blob: 5f72f6843469c477dd2a854fd8394ba6cbc10746 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include "precompiled_sfx2.hxx"
#include "sfx2/sidebar/Tools.hxx"
#include "sfx2/sidebar/Theme.hxx"
#include "sfx2/imagemgr.hxx"
#include <comphelper/processfactory.hxx>
#include <comphelper/componentcontext.hxx>
#include <comphelper/namedvaluecollection.hxx>
#include <vcl/gradient.hxx>
#include <com/sun/star/frame/XDispatchProvider.hpp>
#include <com/sun/star/graphic/XGraphicProvider.hpp>
#include <com/sun/star/util/XURLTransformer.hpp>
#include <com/sun/star/frame/XModuleManager.hpp>
#include <cstring>
using namespace css;
using namespace cssu;
namespace sfx2 { namespace sidebar {
Image Tools::GetImage (
const ::rtl::OUString& rsImageURL,
const ::rtl::OUString& rsHighContrastImageURL,
const Reference<frame::XFrame>& rxFrame)
{
if (Theme::IsHighContrastMode())
return GetImage(rsHighContrastImageURL, rxFrame);
else
return GetImage(rsImageURL, rxFrame);
}
Image Tools::GetImage (
const ::rtl::OUString& rsURL,
const Reference<frame::XFrame>& rxFrame)
{
if (rsURL.getLength() > 0)
{
static const sal_Char* sUnoCommandPrefix = ".uno:";
static const sal_Int32 nUnoCommandPrefixLength = strlen(sUnoCommandPrefix);
static const sal_Char* sCommandImagePrefix = "private:commandimage/";
static const sal_Int32 nCommandImagePrefixLength = strlen(sCommandImagePrefix);
if (rsURL.compareToAscii(sUnoCommandPrefix, nUnoCommandPrefixLength) == 0)
{
const Image aPanelImage (::GetImage(rxFrame, rsURL, sal_False, Theme::IsHighContrastMode()));
return aPanelImage;
}
else if (rsURL.compareToAscii(sCommandImagePrefix, nCommandImagePrefixLength) == 0)
{
::rtl::OUStringBuffer aCommandName;
aCommandName.appendAscii(sUnoCommandPrefix);
aCommandName.append(rsURL.copy(nCommandImagePrefixLength));
const ::rtl::OUString sCommandName (aCommandName.makeStringAndClear());
const Image aPanelImage (::GetImage(rxFrame, sCommandName, sal_False, Theme::IsHighContrastMode()));
return aPanelImage;
}
else
{
const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory());
const Reference<graphic::XGraphicProvider> xGraphicProvider (
aContext.createComponent("com.sun.star.graphic.GraphicProvider"),
UNO_QUERY);
if ( xGraphicProvider.is())
{
::comphelper::NamedValueCollection aMediaProperties;
aMediaProperties.put("URL", rsURL);
const Reference<graphic::XGraphic> xGraphic (
xGraphicProvider->queryGraphic(aMediaProperties.getPropertyValues()),
UNO_QUERY);
if (xGraphic.is())
return Image(xGraphic);
}
}
}
return Image();
}
css::awt::Gradient Tools::VclToAwtGradient (const Gradient aVclGradient)
{
css::awt::Gradient aAwtGradient (
awt::GradientStyle(aVclGradient.GetStyle()),
aVclGradient.GetStartColor().GetRGBColor(),
aVclGradient.GetEndColor().GetRGBColor(),
aVclGradient.GetAngle(),
aVclGradient.GetBorder(),
aVclGradient.GetOfsX(),
aVclGradient.GetOfsY(),
aVclGradient.GetStartIntensity(),
aVclGradient.GetEndIntensity(),
aVclGradient.GetSteps());
return aAwtGradient;
}
Gradient Tools::AwtToVclGradient (const css::awt::Gradient aAwtGradient)
{
Gradient aVclGradient (
GradientStyle(aAwtGradient.Style),
aAwtGradient.StartColor,
aAwtGradient.EndColor);
aVclGradient.SetAngle(aAwtGradient.Angle);
aVclGradient.SetBorder(aAwtGradient.Border);
aVclGradient.SetOfsX(aAwtGradient.XOffset);
aVclGradient.SetOfsY(aAwtGradient.YOffset);
aVclGradient.SetStartIntensity(aAwtGradient.StartIntensity);
aVclGradient.SetEndIntensity(aAwtGradient.EndIntensity);
aVclGradient.SetSteps(aAwtGradient.StepCount);
return aVclGradient;
}
SvBorder Tools::RectangleToSvBorder (const Rectangle aBox)
{
return SvBorder(
aBox.Left(),
aBox.Top(),
aBox.Right(),
aBox.Bottom());
}
util::URL Tools::GetURL (const ::rtl::OUString& rsCommand)
{
util::URL aURL;
aURL.Complete = rsCommand;
const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory());
const Reference<util::XURLTransformer> xParser (
aComponentContext.createComponent("com.sun.star.util.URLTransformer"),
UNO_QUERY_THROW);
xParser->parseStrict(aURL);
return aURL;
}
Reference<frame::XDispatch> Tools::GetDispatch (
const cssu::Reference<css::frame::XFrame>& rxFrame,
const util::URL& rURL)
{
Reference<frame::XDispatchProvider> xProvider (rxFrame, UNO_QUERY_THROW);
Reference<frame::XDispatch> xDispatch (xProvider->queryDispatch(rURL, ::rtl::OUString(), 0));
return xDispatch;
}
::rtl::OUString Tools::GetModuleName (
const cssu::Reference<css::frame::XFrame>& rxFrame)
{
if ( ! rxFrame.is() || ! rxFrame->getController().is())
return ::rtl::OUString();
try
{
const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory());
const Reference<frame::XModuleManager> xModuleManager (
aContext.createComponent("com.sun.star.frame.ModuleManager"),
UNO_QUERY_THROW);
return xModuleManager->identify(rxFrame);
}
catch (const Exception&)
{
// Ignored.
}
return ::rtl::OUString();
}
} } // end of namespace sfx2::sidebar