1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22 #include "precompiled_sfx2.hxx"
23
24 #include "sfx2/sidebar/Tools.hxx"
25
26 #include "sfx2/sidebar/Theme.hxx"
27
28 #include "sfx2/imagemgr.hxx"
29 #include <comphelper/processfactory.hxx>
30 #include <comphelper/componentcontext.hxx>
31 #include <comphelper/namedvaluecollection.hxx>
32 #include <vcl/gradient.hxx>
33
34 #include <com/sun/star/frame/XDispatchProvider.hpp>
35 #include <com/sun/star/graphic/XGraphicProvider.hpp>
36 #include <com/sun/star/util/XURLTransformer.hpp>
37 #include <com/sun/star/frame/XModuleManager.hpp>
38
39 #include <cstring>
40
41 using namespace css;
42 using namespace cssu;
43
44
45 namespace sfx2 { namespace sidebar {
46
GetImage(const::rtl::OUString & rsImageURL,const::rtl::OUString & rsHighContrastImageURL,const Reference<frame::XFrame> & rxFrame)47 Image Tools::GetImage (
48 const ::rtl::OUString& rsImageURL,
49 const ::rtl::OUString& rsHighContrastImageURL,
50 const Reference<frame::XFrame>& rxFrame)
51 {
52 if (Theme::IsHighContrastMode())
53 return GetImage(rsHighContrastImageURL, rxFrame);
54 else
55 return GetImage(rsImageURL, rxFrame);
56 }
57
58
59
60
GetImage(const::rtl::OUString & rsURL,const Reference<frame::XFrame> & rxFrame)61 Image Tools::GetImage (
62 const ::rtl::OUString& rsURL,
63 const Reference<frame::XFrame>& rxFrame)
64 {
65 if (rsURL.getLength() > 0)
66 {
67 static const sal_Char* sUnoCommandPrefix = ".uno:";
68 static const sal_Int32 nUnoCommandPrefixLength = strlen(sUnoCommandPrefix);
69 static const sal_Char* sCommandImagePrefix = "private:commandimage/";
70 static const sal_Int32 nCommandImagePrefixLength = strlen(sCommandImagePrefix);
71
72 if (rsURL.compareToAscii(sUnoCommandPrefix, nUnoCommandPrefixLength) == 0)
73 {
74 const Image aPanelImage (::GetImage(rxFrame, rsURL, sal_False, Theme::IsHighContrastMode()));
75 return aPanelImage;
76 }
77 else if (rsURL.compareToAscii(sCommandImagePrefix, nCommandImagePrefixLength) == 0)
78 {
79 ::rtl::OUStringBuffer aCommandName;
80 aCommandName.appendAscii(sUnoCommandPrefix);
81 aCommandName.append(rsURL.copy(nCommandImagePrefixLength));
82 const ::rtl::OUString sCommandName (aCommandName.makeStringAndClear());
83
84 const Image aPanelImage (::GetImage(rxFrame, sCommandName, sal_False, Theme::IsHighContrastMode()));
85 return aPanelImage;
86 }
87 else
88 {
89 const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory());
90 const Reference<graphic::XGraphicProvider> xGraphicProvider (
91 aContext.createComponent("com.sun.star.graphic.GraphicProvider"),
92 UNO_QUERY);
93 if ( xGraphicProvider.is())
94 {
95 ::comphelper::NamedValueCollection aMediaProperties;
96 aMediaProperties.put("URL", rsURL);
97 const Reference<graphic::XGraphic> xGraphic (
98 xGraphicProvider->queryGraphic(aMediaProperties.getPropertyValues()),
99 UNO_QUERY);
100 if (xGraphic.is())
101 return Image(xGraphic);
102 }
103 }
104 }
105 return Image();
106 }
107
108
109
110
VclToAwtGradient(const Gradient aVclGradient)111 css::awt::Gradient Tools::VclToAwtGradient (const Gradient aVclGradient)
112 {
113 css::awt::Gradient aAwtGradient (
114 awt::GradientStyle(aVclGradient.GetStyle()),
115 aVclGradient.GetStartColor().GetRGBColor(),
116 aVclGradient.GetEndColor().GetRGBColor(),
117 aVclGradient.GetAngle(),
118 aVclGradient.GetBorder(),
119 aVclGradient.GetOfsX(),
120 aVclGradient.GetOfsY(),
121 aVclGradient.GetStartIntensity(),
122 aVclGradient.GetEndIntensity(),
123 aVclGradient.GetSteps());
124 return aAwtGradient;
125 }
126
127
128
129
AwtToVclGradient(const css::awt::Gradient aAwtGradient)130 Gradient Tools::AwtToVclGradient (const css::awt::Gradient aAwtGradient)
131 {
132 Gradient aVclGradient (
133 GradientStyle(aAwtGradient.Style),
134 aAwtGradient.StartColor,
135 aAwtGradient.EndColor);
136 aVclGradient.SetAngle(aAwtGradient.Angle);
137 aVclGradient.SetBorder(aAwtGradient.Border);
138 aVclGradient.SetOfsX(aAwtGradient.XOffset);
139 aVclGradient.SetOfsY(aAwtGradient.YOffset);
140 aVclGradient.SetStartIntensity(aAwtGradient.StartIntensity);
141 aVclGradient.SetEndIntensity(aAwtGradient.EndIntensity);
142 aVclGradient.SetSteps(aAwtGradient.StepCount);
143
144 return aVclGradient;
145 }
146
147
148
149
RectangleToSvBorder(const Rectangle aBox)150 SvBorder Tools::RectangleToSvBorder (const Rectangle aBox)
151 {
152 return SvBorder(
153 aBox.Left(),
154 aBox.Top(),
155 aBox.Right(),
156 aBox.Bottom());
157 }
158
159
160
161
GetURL(const::rtl::OUString & rsCommand)162 util::URL Tools::GetURL (const ::rtl::OUString& rsCommand)
163 {
164 util::URL aURL;
165 aURL.Complete = rsCommand;
166
167 const ::comphelper::ComponentContext aComponentContext (::comphelper::getProcessServiceFactory());
168 const Reference<util::XURLTransformer> xParser (
169 aComponentContext.createComponent("com.sun.star.util.URLTransformer"),
170 UNO_QUERY_THROW);
171 xParser->parseStrict(aURL);
172
173 return aURL;
174 }
175
176
177
178
GetDispatch(const cssu::Reference<css::frame::XFrame> & rxFrame,const util::URL & rURL)179 Reference<frame::XDispatch> Tools::GetDispatch (
180 const cssu::Reference<css::frame::XFrame>& rxFrame,
181 const util::URL& rURL)
182 {
183 Reference<frame::XDispatchProvider> xProvider (rxFrame, UNO_QUERY_THROW);
184 Reference<frame::XDispatch> xDispatch (xProvider->queryDispatch(rURL, ::rtl::OUString(), 0));
185 return xDispatch;
186 }
187
188
189
190
GetModuleName(const cssu::Reference<css::frame::XFrame> & rxFrame)191 ::rtl::OUString Tools::GetModuleName (
192 const cssu::Reference<css::frame::XFrame>& rxFrame)
193 {
194 if ( ! rxFrame.is() || ! rxFrame->getController().is())
195 return ::rtl::OUString();
196
197 try
198 {
199 const ::comphelper::ComponentContext aContext (::comphelper::getProcessServiceFactory());
200 const Reference<frame::XModuleManager> xModuleManager (
201 aContext.createComponent("com.sun.star.frame.ModuleManager"),
202 UNO_QUERY_THROW);
203 return xModuleManager->identify(rxFrame);
204 }
205 catch (const Exception&)
206 {
207 // Ignored.
208 }
209 return ::rtl::OUString();
210 }
211
212
213 } } // end of namespace sfx2::sidebar
214