xref: /AOO41X/main/sfx2/source/sidebar/CommandInfoProvider.cxx (revision 45da7d5eec8bb670617c18931b2b362b2fb77cde)
1*45da7d5eSAndre Fischer /**************************************************************
2*45da7d5eSAndre Fischer  *
3*45da7d5eSAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
4*45da7d5eSAndre Fischer  * or more contributor license agreements.  See the NOTICE file
5*45da7d5eSAndre Fischer  * distributed with this work for additional information
6*45da7d5eSAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
7*45da7d5eSAndre Fischer  * to you under the Apache License, Version 2.0 (the
8*45da7d5eSAndre Fischer  * "License"); you may not use this file except in compliance
9*45da7d5eSAndre Fischer  * with the License.  You may obtain a copy of the License at
10*45da7d5eSAndre Fischer  *
11*45da7d5eSAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
12*45da7d5eSAndre Fischer  *
13*45da7d5eSAndre Fischer  * Unless required by applicable law or agreed to in writing,
14*45da7d5eSAndre Fischer  * software distributed under the License is distributed on an
15*45da7d5eSAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*45da7d5eSAndre Fischer  * KIND, either express or implied.  See the License for the
17*45da7d5eSAndre Fischer  * specific language governing permissions and limitations
18*45da7d5eSAndre Fischer  * under the License.
19*45da7d5eSAndre Fischer  *
20*45da7d5eSAndre Fischer  *************************************************************/
21*45da7d5eSAndre Fischer 
22*45da7d5eSAndre Fischer #include "precompiled_sfx2.hxx"
23*45da7d5eSAndre Fischer 
24*45da7d5eSAndre Fischer #include "CommandInfoProvider.hxx"
25*45da7d5eSAndre Fischer 
26*45da7d5eSAndre Fischer #include <comphelper/processfactory.hxx>
27*45da7d5eSAndre Fischer #include <svtools/acceleratorexecute.hxx>
28*45da7d5eSAndre Fischer #include <cppuhelper/compbase1.hxx>
29*45da7d5eSAndre Fischer #include <cppuhelper/basemutex.hxx>
30*45da7d5eSAndre Fischer 
31*45da7d5eSAndre Fischer #include <com/sun/star/frame/XModuleManager.hpp>
32*45da7d5eSAndre Fischer #include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
33*45da7d5eSAndre Fischer #include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
34*45da7d5eSAndre Fischer 
35*45da7d5eSAndre Fischer using namespace css;
36*45da7d5eSAndre Fischer using namespace cssu;
37*45da7d5eSAndre Fischer using ::rtl::OUString;
38*45da7d5eSAndre Fischer 
39*45da7d5eSAndre Fischer 
40*45da7d5eSAndre Fischer #define A2S(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
41*45da7d5eSAndre Fischer 
42*45da7d5eSAndre Fischer 
43*45da7d5eSAndre Fischer namespace
44*45da7d5eSAndre Fischer {
45*45da7d5eSAndre Fischer     typedef ::cppu::WeakComponentImplHelper1 <
46*45da7d5eSAndre Fischer         css::lang::XEventListener
47*45da7d5eSAndre Fischer         > FrameListenerInterfaceBase;
48*45da7d5eSAndre Fischer     class FrameListener
49*45da7d5eSAndre Fischer         : public ::cppu::BaseMutex,
50*45da7d5eSAndre Fischer           public FrameListenerInterfaceBase
51*45da7d5eSAndre Fischer     {
52*45da7d5eSAndre Fischer     public:
53*45da7d5eSAndre Fischer         FrameListener (sfx2::sidebar::CommandInfoProvider& rInfoProvider, const Reference<frame::XFrame>& rxFrame)
54*45da7d5eSAndre Fischer             : FrameListenerInterfaceBase(m_aMutex),
55*45da7d5eSAndre Fischer               mrInfoProvider(rInfoProvider),
56*45da7d5eSAndre Fischer               mxFrame(rxFrame)
57*45da7d5eSAndre Fischer         {
58*45da7d5eSAndre Fischer             if (mxFrame.is())
59*45da7d5eSAndre Fischer                 mxFrame->addEventListener(this);
60*45da7d5eSAndre Fischer         }
61*45da7d5eSAndre Fischer         virtual ~FrameListener (void)
62*45da7d5eSAndre Fischer         {
63*45da7d5eSAndre Fischer         }
64*45da7d5eSAndre Fischer         virtual void SAL_CALL disposing (void)
65*45da7d5eSAndre Fischer         {
66*45da7d5eSAndre Fischer             if (mxFrame.is())
67*45da7d5eSAndre Fischer                 mxFrame->removeEventListener(this);
68*45da7d5eSAndre Fischer         }
69*45da7d5eSAndre Fischer         virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent)
70*45da7d5eSAndre Fischer             throw (cssu::RuntimeException)
71*45da7d5eSAndre Fischer         {
72*45da7d5eSAndre Fischer             (void)rEvent;
73*45da7d5eSAndre Fischer             mrInfoProvider.SetFrame(NULL);
74*45da7d5eSAndre Fischer             mxFrame = NULL;
75*45da7d5eSAndre Fischer         }
76*45da7d5eSAndre Fischer 
77*45da7d5eSAndre Fischer     private:
78*45da7d5eSAndre Fischer         sfx2::sidebar::CommandInfoProvider& mrInfoProvider;
79*45da7d5eSAndre Fischer         Reference<frame::XFrame> mxFrame;
80*45da7d5eSAndre Fischer     };
81*45da7d5eSAndre Fischer }
82*45da7d5eSAndre Fischer 
83*45da7d5eSAndre Fischer 
84*45da7d5eSAndre Fischer 
85*45da7d5eSAndre Fischer namespace sfx2 { namespace sidebar {
86*45da7d5eSAndre Fischer 
87*45da7d5eSAndre Fischer CommandInfoProvider& CommandInfoProvider::Instance (void)
88*45da7d5eSAndre Fischer {
89*45da7d5eSAndre Fischer     static CommandInfoProvider aProvider;
90*45da7d5eSAndre Fischer     return aProvider;
91*45da7d5eSAndre Fischer }
92*45da7d5eSAndre Fischer 
93*45da7d5eSAndre Fischer 
94*45da7d5eSAndre Fischer 
95*45da7d5eSAndre Fischer 
96*45da7d5eSAndre Fischer CommandInfoProvider::CommandInfoProvider (void)
97*45da7d5eSAndre Fischer     : mxServiceFactory(comphelper::getProcessServiceFactory()),
98*45da7d5eSAndre Fischer       mxCachedDataFrame(),
99*45da7d5eSAndre Fischer       mxCachedDocumentAcceleratorConfiguration(),
100*45da7d5eSAndre Fischer       mxCachedModuleAcceleratorConfiguration(),
101*45da7d5eSAndre Fischer       mxCachedGlobalAcceleratorConfiguration(),
102*45da7d5eSAndre Fischer       msCachedModuleIdentifier(),
103*45da7d5eSAndre Fischer       mxFrameListener()
104*45da7d5eSAndre Fischer {
105*45da7d5eSAndre Fischer }
106*45da7d5eSAndre Fischer 
107*45da7d5eSAndre Fischer 
108*45da7d5eSAndre Fischer 
109*45da7d5eSAndre Fischer 
110*45da7d5eSAndre Fischer CommandInfoProvider::~CommandInfoProvider (void)
111*45da7d5eSAndre Fischer {
112*45da7d5eSAndre Fischer     if (mxFrameListener.is())
113*45da7d5eSAndre Fischer     {
114*45da7d5eSAndre Fischer         mxFrameListener->dispose();
115*45da7d5eSAndre Fischer         mxFrameListener = NULL;
116*45da7d5eSAndre Fischer     }
117*45da7d5eSAndre Fischer }
118*45da7d5eSAndre Fischer 
119*45da7d5eSAndre Fischer 
120*45da7d5eSAndre Fischer 
121*45da7d5eSAndre Fischer 
122*45da7d5eSAndre Fischer OUString CommandInfoProvider::GetLabelForCommand (
123*45da7d5eSAndre Fischer     const OUString& rsCommandName,
124*45da7d5eSAndre Fischer     const Reference<frame::XFrame>& rxFrame)
125*45da7d5eSAndre Fischer {
126*45da7d5eSAndre Fischer     SetFrame(rxFrame);
127*45da7d5eSAndre Fischer 
128*45da7d5eSAndre Fischer     const OUString sLabel (GetCommandLabel(rsCommandName));
129*45da7d5eSAndre Fischer     const OUString sShortCut (GetCommandShortcut(rsCommandName));
130*45da7d5eSAndre Fischer     if (sShortCut.getLength() > 0)
131*45da7d5eSAndre Fischer         return sLabel + A2S(" (") + sShortCut + A2S(")");
132*45da7d5eSAndre Fischer     else
133*45da7d5eSAndre Fischer         return sLabel;
134*45da7d5eSAndre Fischer }
135*45da7d5eSAndre Fischer 
136*45da7d5eSAndre Fischer 
137*45da7d5eSAndre Fischer 
138*45da7d5eSAndre Fischer 
139*45da7d5eSAndre Fischer void CommandInfoProvider::SetFrame (const Reference<frame::XFrame>& rxFrame)
140*45da7d5eSAndre Fischer {
141*45da7d5eSAndre Fischer     if (rxFrame != mxCachedDataFrame)
142*45da7d5eSAndre Fischer     {
143*45da7d5eSAndre Fischer         // Detach from the old frame.
144*45da7d5eSAndre Fischer         if (mxFrameListener.is())
145*45da7d5eSAndre Fischer         {
146*45da7d5eSAndre Fischer             mxFrameListener->dispose();
147*45da7d5eSAndre Fischer             mxFrameListener = NULL;
148*45da7d5eSAndre Fischer         }
149*45da7d5eSAndre Fischer 
150*45da7d5eSAndre Fischer         // Release objects that are tied to the old frame.
151*45da7d5eSAndre Fischer         mxCachedDocumentAcceleratorConfiguration = NULL;
152*45da7d5eSAndre Fischer         mxCachedModuleAcceleratorConfiguration = NULL;
153*45da7d5eSAndre Fischer         msCachedModuleIdentifier = OUString();
154*45da7d5eSAndre Fischer         mxCachedDataFrame = rxFrame;
155*45da7d5eSAndre Fischer 
156*45da7d5eSAndre Fischer         // Connect to the new frame.
157*45da7d5eSAndre Fischer         if (rxFrame.is())
158*45da7d5eSAndre Fischer             mxFrameListener = new FrameListener(*this, rxFrame);
159*45da7d5eSAndre Fischer     }
160*45da7d5eSAndre Fischer }
161*45da7d5eSAndre Fischer 
162*45da7d5eSAndre Fischer 
163*45da7d5eSAndre Fischer 
164*45da7d5eSAndre Fischer 
165*45da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetDocumentAcceleratorConfiguration (void)
166*45da7d5eSAndre Fischer {
167*45da7d5eSAndre Fischer     if ( ! mxCachedDocumentAcceleratorConfiguration.is())
168*45da7d5eSAndre Fischer     {
169*45da7d5eSAndre Fischer         // Get the accelerator configuration for the document.
170*45da7d5eSAndre Fischer         if (mxCachedDataFrame.is())
171*45da7d5eSAndre Fischer         {
172*45da7d5eSAndre Fischer             Reference<frame::XController> xController = mxCachedDataFrame->getController();
173*45da7d5eSAndre Fischer             if (xController.is())
174*45da7d5eSAndre Fischer             {
175*45da7d5eSAndre Fischer                 Reference<frame::XModel> xModel (xController->getModel());
176*45da7d5eSAndre Fischer                 if (xModel.is())
177*45da7d5eSAndre Fischer                 {
178*45da7d5eSAndre Fischer                     Reference<ui::XUIConfigurationManagerSupplier> xSupplier (xModel, UNO_QUERY);
179*45da7d5eSAndre Fischer                     if (xSupplier.is())
180*45da7d5eSAndre Fischer                     {
181*45da7d5eSAndre Fischer                         Reference<ui::XUIConfigurationManager> xConfigurationManager(
182*45da7d5eSAndre Fischer                             xSupplier->getUIConfigurationManager(),
183*45da7d5eSAndre Fischer                             UNO_QUERY);
184*45da7d5eSAndre Fischer                         if (xConfigurationManager.is())
185*45da7d5eSAndre Fischer                         {
186*45da7d5eSAndre Fischer                             mxCachedDocumentAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
187*45da7d5eSAndre Fischer                                 xConfigurationManager->getShortCutManager(),
188*45da7d5eSAndre Fischer                                 UNO_QUERY);
189*45da7d5eSAndre Fischer                         }
190*45da7d5eSAndre Fischer                     }
191*45da7d5eSAndre Fischer                 }
192*45da7d5eSAndre Fischer             }
193*45da7d5eSAndre Fischer         }
194*45da7d5eSAndre Fischer     }
195*45da7d5eSAndre Fischer     return mxCachedDocumentAcceleratorConfiguration;
196*45da7d5eSAndre Fischer }
197*45da7d5eSAndre Fischer 
198*45da7d5eSAndre Fischer 
199*45da7d5eSAndre Fischer 
200*45da7d5eSAndre Fischer 
201*45da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetModuleAcceleratorConfiguration (void)
202*45da7d5eSAndre Fischer {
203*45da7d5eSAndre Fischer     if ( ! mxCachedModuleAcceleratorConfiguration.is())
204*45da7d5eSAndre Fischer     {
205*45da7d5eSAndre Fischer         try
206*45da7d5eSAndre Fischer         {
207*45da7d5eSAndre Fischer             Reference<ui::XModuleUIConfigurationManagerSupplier> xSupplier (
208*45da7d5eSAndre Fischer                 mxServiceFactory->createInstance(A2S("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")),
209*45da7d5eSAndre Fischer                 UNO_QUERY);
210*45da7d5eSAndre Fischer             Reference<ui::XUIConfigurationManager> xManager (
211*45da7d5eSAndre Fischer                 xSupplier->getUIConfigurationManager(GetModuleIdentifier()));
212*45da7d5eSAndre Fischer             if (xManager.is())
213*45da7d5eSAndre Fischer             {
214*45da7d5eSAndre Fischer                 mxCachedModuleAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
215*45da7d5eSAndre Fischer                     xManager->getShortCutManager(),
216*45da7d5eSAndre Fischer                     UNO_QUERY);
217*45da7d5eSAndre Fischer             }
218*45da7d5eSAndre Fischer         }
219*45da7d5eSAndre Fischer         catch (Exception&)
220*45da7d5eSAndre Fischer         {
221*45da7d5eSAndre Fischer         }
222*45da7d5eSAndre Fischer     }
223*45da7d5eSAndre Fischer     return mxCachedModuleAcceleratorConfiguration;
224*45da7d5eSAndre Fischer }
225*45da7d5eSAndre Fischer 
226*45da7d5eSAndre Fischer 
227*45da7d5eSAndre Fischer 
228*45da7d5eSAndre Fischer 
229*45da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetGlobalAcceleratorConfiguration (void)
230*45da7d5eSAndre Fischer {
231*45da7d5eSAndre Fischer     // Get the global accelerator configuration.
232*45da7d5eSAndre Fischer     if ( ! mxCachedGlobalAcceleratorConfiguration.is())
233*45da7d5eSAndre Fischer     {
234*45da7d5eSAndre Fischer         mxCachedGlobalAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
235*45da7d5eSAndre Fischer             mxServiceFactory->createInstance(A2S("com.sun.star.ui.GlobalAcceleratorConfiguration")),
236*45da7d5eSAndre Fischer             UNO_QUERY);
237*45da7d5eSAndre Fischer     }
238*45da7d5eSAndre Fischer 
239*45da7d5eSAndre Fischer     return mxCachedGlobalAcceleratorConfiguration;
240*45da7d5eSAndre Fischer }
241*45da7d5eSAndre Fischer 
242*45da7d5eSAndre Fischer 
243*45da7d5eSAndre Fischer 
244*45da7d5eSAndre Fischer 
245*45da7d5eSAndre Fischer OUString CommandInfoProvider::GetModuleIdentifier (void)
246*45da7d5eSAndre Fischer {
247*45da7d5eSAndre Fischer     if (msCachedModuleIdentifier.getLength() == 0)
248*45da7d5eSAndre Fischer     {
249*45da7d5eSAndre Fischer         Reference<frame::XModuleManager> xModuleManager (
250*45da7d5eSAndre Fischer             mxServiceFactory->createInstance(A2S("com.sun.star.frame.ModuleManager")),
251*45da7d5eSAndre Fischer             UNO_QUERY);
252*45da7d5eSAndre Fischer         if (xModuleManager.is())
253*45da7d5eSAndre Fischer             msCachedModuleIdentifier = xModuleManager->identify(mxCachedDataFrame);
254*45da7d5eSAndre Fischer     }
255*45da7d5eSAndre Fischer     return msCachedModuleIdentifier;
256*45da7d5eSAndre Fischer }
257*45da7d5eSAndre Fischer 
258*45da7d5eSAndre Fischer 
259*45da7d5eSAndre Fischer 
260*45da7d5eSAndre Fischer 
261*45da7d5eSAndre Fischer OUString CommandInfoProvider::GetCommandShortcut (const OUString& rsCommandName)
262*45da7d5eSAndre Fischer {
263*45da7d5eSAndre Fischer     OUString sShortcut;
264*45da7d5eSAndre Fischer 
265*45da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetDocumentAcceleratorConfiguration(), rsCommandName);
266*45da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
267*45da7d5eSAndre Fischer         return sShortcut;
268*45da7d5eSAndre Fischer 
269*45da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetModuleAcceleratorConfiguration(), rsCommandName);
270*45da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
271*45da7d5eSAndre Fischer         return sShortcut;
272*45da7d5eSAndre Fischer 
273*45da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetGlobalAcceleratorConfiguration(), rsCommandName);
274*45da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
275*45da7d5eSAndre Fischer         return sShortcut;
276*45da7d5eSAndre Fischer 
277*45da7d5eSAndre Fischer     return OUString();
278*45da7d5eSAndre Fischer }
279*45da7d5eSAndre Fischer 
280*45da7d5eSAndre Fischer 
281*45da7d5eSAndre Fischer 
282*45da7d5eSAndre Fischer 
283*45da7d5eSAndre Fischer OUString CommandInfoProvider::RetrieveShortcutsFromConfiguration(
284*45da7d5eSAndre Fischer     const Reference<ui::XAcceleratorConfiguration>& rxConfiguration,
285*45da7d5eSAndre Fischer     const OUString& rsCommandName)
286*45da7d5eSAndre Fischer {
287*45da7d5eSAndre Fischer     if (rxConfiguration.is())
288*45da7d5eSAndre Fischer     {
289*45da7d5eSAndre Fischer         try
290*45da7d5eSAndre Fischer         {
291*45da7d5eSAndre Fischer             Sequence<OUString> aCommands(1);
292*45da7d5eSAndre Fischer             aCommands[0] = rsCommandName;
293*45da7d5eSAndre Fischer 
294*45da7d5eSAndre Fischer             Sequence<Any> aKeyCodes (rxConfiguration->getPreferredKeyEventsForCommandList(aCommands));
295*45da7d5eSAndre Fischer             if (aCommands.getLength() == 1)
296*45da7d5eSAndre Fischer             {
297*45da7d5eSAndre Fischer                 css::awt::KeyEvent aKeyEvent;
298*45da7d5eSAndre Fischer                 if (aKeyCodes[0] >>= aKeyEvent)
299*45da7d5eSAndre Fischer                 {
300*45da7d5eSAndre Fischer                     return svt::AcceleratorExecute::st_AWTKey2VCLKey(aKeyEvent).GetName();
301*45da7d5eSAndre Fischer                 }
302*45da7d5eSAndre Fischer             }
303*45da7d5eSAndre Fischer         }
304*45da7d5eSAndre Fischer         catch (lang::IllegalArgumentException&)
305*45da7d5eSAndre Fischer         {
306*45da7d5eSAndre Fischer         }
307*45da7d5eSAndre Fischer     }
308*45da7d5eSAndre Fischer     return OUString();
309*45da7d5eSAndre Fischer }
310*45da7d5eSAndre Fischer 
311*45da7d5eSAndre Fischer 
312*45da7d5eSAndre Fischer 
313*45da7d5eSAndre Fischer 
314*45da7d5eSAndre Fischer Sequence<beans::PropertyValue> CommandInfoProvider::GetCommandProperties (const OUString& rsCommandName)
315*45da7d5eSAndre Fischer {
316*45da7d5eSAndre Fischer     Sequence<beans::PropertyValue> aProperties;
317*45da7d5eSAndre Fischer 
318*45da7d5eSAndre Fischer     try
319*45da7d5eSAndre Fischer     {
320*45da7d5eSAndre Fischer         const OUString sModuleIdentifier (GetModuleIdentifier());
321*45da7d5eSAndre Fischer         if (sModuleIdentifier.getLength() > 0)
322*45da7d5eSAndre Fischer         {
323*45da7d5eSAndre Fischer             Reference<container::XNameAccess> xNameAccess (
324*45da7d5eSAndre Fischer                 mxServiceFactory->createInstance(
325*45da7d5eSAndre Fischer                     OUString::createFromAscii("com.sun.star.frame.UICommandDescription")),
326*45da7d5eSAndre Fischer                 UNO_QUERY);
327*45da7d5eSAndre Fischer             Reference<container::XNameAccess> xUICommandLabels;
328*45da7d5eSAndre Fischer             if (xNameAccess.is())
329*45da7d5eSAndre Fischer                 if (xNameAccess->getByName(sModuleIdentifier) >>= xUICommandLabels)
330*45da7d5eSAndre Fischer                     xUICommandLabels->getByName(rsCommandName) >>= aProperties;
331*45da7d5eSAndre Fischer         }
332*45da7d5eSAndre Fischer     }
333*45da7d5eSAndre Fischer     catch (Exception&)
334*45da7d5eSAndre Fischer     {
335*45da7d5eSAndre Fischer     }
336*45da7d5eSAndre Fischer 
337*45da7d5eSAndre Fischer     return aProperties;
338*45da7d5eSAndre Fischer }
339*45da7d5eSAndre Fischer 
340*45da7d5eSAndre Fischer 
341*45da7d5eSAndre Fischer 
342*45da7d5eSAndre Fischer 
343*45da7d5eSAndre Fischer OUString CommandInfoProvider::GetCommandLabel (const OUString& rsCommandName)
344*45da7d5eSAndre Fischer {
345*45da7d5eSAndre Fischer     const Sequence<beans::PropertyValue> aProperties (GetCommandProperties(rsCommandName));
346*45da7d5eSAndre Fischer     for (sal_Int32 nIndex=0; nIndex<aProperties.getLength(); ++nIndex)
347*45da7d5eSAndre Fischer     {
348*45da7d5eSAndre Fischer         if (aProperties[nIndex].Name.equalsAscii("Name"))
349*45da7d5eSAndre Fischer         {
350*45da7d5eSAndre Fischer             OUString sLabel;
351*45da7d5eSAndre Fischer             aProperties[nIndex].Value >>= sLabel;
352*45da7d5eSAndre Fischer             return sLabel;
353*45da7d5eSAndre Fischer         }
354*45da7d5eSAndre Fischer     }
355*45da7d5eSAndre Fischer     return OUString();
356*45da7d5eSAndre Fischer }
357*45da7d5eSAndre Fischer 
358*45da7d5eSAndre Fischer 
359*45da7d5eSAndre Fischer } } // end of namespace sfx2/framework
360