145da7d5eSAndre Fischer /**************************************************************
245da7d5eSAndre Fischer  *
345da7d5eSAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
445da7d5eSAndre Fischer  * or more contributor license agreements.  See the NOTICE file
545da7d5eSAndre Fischer  * distributed with this work for additional information
645da7d5eSAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
745da7d5eSAndre Fischer  * to you under the Apache License, Version 2.0 (the
845da7d5eSAndre Fischer  * "License"); you may not use this file except in compliance
945da7d5eSAndre Fischer  * with the License.  You may obtain a copy of the License at
1045da7d5eSAndre Fischer  *
1145da7d5eSAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
1245da7d5eSAndre Fischer  *
1345da7d5eSAndre Fischer  * Unless required by applicable law or agreed to in writing,
1445da7d5eSAndre Fischer  * software distributed under the License is distributed on an
1545da7d5eSAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1645da7d5eSAndre Fischer  * KIND, either express or implied.  See the License for the
1745da7d5eSAndre Fischer  * specific language governing permissions and limitations
1845da7d5eSAndre Fischer  * under the License.
1945da7d5eSAndre Fischer  *
2045da7d5eSAndre Fischer  *************************************************************/
2145da7d5eSAndre Fischer 
2245da7d5eSAndre Fischer #include "precompiled_sfx2.hxx"
2345da7d5eSAndre Fischer 
24*f35c6d02SAndre Fischer #include "sfx2/sidebar/CommandInfoProvider.hxx"
2545da7d5eSAndre Fischer 
2645da7d5eSAndre Fischer #include <comphelper/processfactory.hxx>
2745da7d5eSAndre Fischer #include <svtools/acceleratorexecute.hxx>
2845da7d5eSAndre Fischer #include <cppuhelper/compbase1.hxx>
2945da7d5eSAndre Fischer #include <cppuhelper/basemutex.hxx>
3045da7d5eSAndre Fischer 
3145da7d5eSAndre Fischer #include <com/sun/star/frame/XModuleManager.hpp>
3245da7d5eSAndre Fischer #include <com/sun/star/ui/XUIConfigurationManagerSupplier.hpp>
3345da7d5eSAndre Fischer #include <com/sun/star/ui/XModuleUIConfigurationManagerSupplier.hpp>
3445da7d5eSAndre Fischer 
3545da7d5eSAndre Fischer using namespace css;
3645da7d5eSAndre Fischer using namespace cssu;
3745da7d5eSAndre Fischer using ::rtl::OUString;
3845da7d5eSAndre Fischer 
3945da7d5eSAndre Fischer 
4045da7d5eSAndre Fischer #define A2S(s) rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
4145da7d5eSAndre Fischer 
4245da7d5eSAndre Fischer 
4345da7d5eSAndre Fischer namespace
4445da7d5eSAndre Fischer {
4545da7d5eSAndre Fischer     typedef ::cppu::WeakComponentImplHelper1 <
4645da7d5eSAndre Fischer         css::lang::XEventListener
4745da7d5eSAndre Fischer         > FrameListenerInterfaceBase;
4845da7d5eSAndre Fischer     class FrameListener
4945da7d5eSAndre Fischer         : public ::cppu::BaseMutex,
5045da7d5eSAndre Fischer           public FrameListenerInterfaceBase
5145da7d5eSAndre Fischer     {
5245da7d5eSAndre Fischer     public:
FrameListener(sfx2::sidebar::CommandInfoProvider & rInfoProvider,const Reference<frame::XFrame> & rxFrame)5345da7d5eSAndre Fischer         FrameListener (sfx2::sidebar::CommandInfoProvider& rInfoProvider, const Reference<frame::XFrame>& rxFrame)
5445da7d5eSAndre Fischer             : FrameListenerInterfaceBase(m_aMutex),
5545da7d5eSAndre Fischer               mrInfoProvider(rInfoProvider),
5645da7d5eSAndre Fischer               mxFrame(rxFrame)
5745da7d5eSAndre Fischer         {
5845da7d5eSAndre Fischer             if (mxFrame.is())
5945da7d5eSAndre Fischer                 mxFrame->addEventListener(this);
6045da7d5eSAndre Fischer         }
~FrameListener(void)6145da7d5eSAndre Fischer         virtual ~FrameListener (void)
6245da7d5eSAndre Fischer         {
6345da7d5eSAndre Fischer         }
disposing(void)6445da7d5eSAndre Fischer         virtual void SAL_CALL disposing (void)
6545da7d5eSAndre Fischer         {
6645da7d5eSAndre Fischer             if (mxFrame.is())
6745da7d5eSAndre Fischer                 mxFrame->removeEventListener(this);
6845da7d5eSAndre Fischer         }
disposing(const css::lang::EventObject & rEvent)6945da7d5eSAndre Fischer         virtual void SAL_CALL disposing (const css::lang::EventObject& rEvent)
7045da7d5eSAndre Fischer             throw (cssu::RuntimeException)
7145da7d5eSAndre Fischer         {
7245da7d5eSAndre Fischer             (void)rEvent;
7345da7d5eSAndre Fischer             mrInfoProvider.SetFrame(NULL);
7445da7d5eSAndre Fischer             mxFrame = NULL;
7545da7d5eSAndre Fischer         }
7645da7d5eSAndre Fischer 
7745da7d5eSAndre Fischer     private:
7845da7d5eSAndre Fischer         sfx2::sidebar::CommandInfoProvider& mrInfoProvider;
7945da7d5eSAndre Fischer         Reference<frame::XFrame> mxFrame;
8045da7d5eSAndre Fischer     };
8145da7d5eSAndre Fischer }
8245da7d5eSAndre Fischer 
8345da7d5eSAndre Fischer 
8445da7d5eSAndre Fischer 
8545da7d5eSAndre Fischer namespace sfx2 { namespace sidebar {
8645da7d5eSAndre Fischer 
Instance(void)8745da7d5eSAndre Fischer CommandInfoProvider& CommandInfoProvider::Instance (void)
8845da7d5eSAndre Fischer {
8945da7d5eSAndre Fischer     static CommandInfoProvider aProvider;
9045da7d5eSAndre Fischer     return aProvider;
9145da7d5eSAndre Fischer }
9245da7d5eSAndre Fischer 
9345da7d5eSAndre Fischer 
9445da7d5eSAndre Fischer 
9545da7d5eSAndre Fischer 
CommandInfoProvider(void)9645da7d5eSAndre Fischer CommandInfoProvider::CommandInfoProvider (void)
9745da7d5eSAndre Fischer     : mxServiceFactory(comphelper::getProcessServiceFactory()),
9845da7d5eSAndre Fischer       mxCachedDataFrame(),
9945da7d5eSAndre Fischer       mxCachedDocumentAcceleratorConfiguration(),
10045da7d5eSAndre Fischer       mxCachedModuleAcceleratorConfiguration(),
10145da7d5eSAndre Fischer       mxCachedGlobalAcceleratorConfiguration(),
10245da7d5eSAndre Fischer       msCachedModuleIdentifier(),
10345da7d5eSAndre Fischer       mxFrameListener()
10445da7d5eSAndre Fischer {
10545da7d5eSAndre Fischer }
10645da7d5eSAndre Fischer 
10745da7d5eSAndre Fischer 
10845da7d5eSAndre Fischer 
10945da7d5eSAndre Fischer 
~CommandInfoProvider(void)11045da7d5eSAndre Fischer CommandInfoProvider::~CommandInfoProvider (void)
11145da7d5eSAndre Fischer {
11245da7d5eSAndre Fischer     if (mxFrameListener.is())
11345da7d5eSAndre Fischer     {
11445da7d5eSAndre Fischer         mxFrameListener->dispose();
11545da7d5eSAndre Fischer         mxFrameListener = NULL;
11645da7d5eSAndre Fischer     }
11745da7d5eSAndre Fischer }
11845da7d5eSAndre Fischer 
11945da7d5eSAndre Fischer 
12045da7d5eSAndre Fischer 
12145da7d5eSAndre Fischer 
GetLabelForCommand(const OUString & rsCommandName,const Reference<frame::XFrame> & rxFrame)12245da7d5eSAndre Fischer OUString CommandInfoProvider::GetLabelForCommand (
12345da7d5eSAndre Fischer     const OUString& rsCommandName,
12445da7d5eSAndre Fischer     const Reference<frame::XFrame>& rxFrame)
12545da7d5eSAndre Fischer {
12645da7d5eSAndre Fischer     SetFrame(rxFrame);
12745da7d5eSAndre Fischer 
12845da7d5eSAndre Fischer     const OUString sLabel (GetCommandLabel(rsCommandName));
12945da7d5eSAndre Fischer     const OUString sShortCut (GetCommandShortcut(rsCommandName));
13045da7d5eSAndre Fischer     if (sShortCut.getLength() > 0)
13145da7d5eSAndre Fischer         return sLabel + A2S(" (") + sShortCut + A2S(")");
13245da7d5eSAndre Fischer     else
13345da7d5eSAndre Fischer         return sLabel;
13445da7d5eSAndre Fischer }
13545da7d5eSAndre Fischer 
13645da7d5eSAndre Fischer 
13745da7d5eSAndre Fischer 
13845da7d5eSAndre Fischer 
SetFrame(const Reference<frame::XFrame> & rxFrame)13945da7d5eSAndre Fischer void CommandInfoProvider::SetFrame (const Reference<frame::XFrame>& rxFrame)
14045da7d5eSAndre Fischer {
14145da7d5eSAndre Fischer     if (rxFrame != mxCachedDataFrame)
14245da7d5eSAndre Fischer     {
14345da7d5eSAndre Fischer         // Detach from the old frame.
14445da7d5eSAndre Fischer         if (mxFrameListener.is())
14545da7d5eSAndre Fischer         {
14645da7d5eSAndre Fischer             mxFrameListener->dispose();
14745da7d5eSAndre Fischer             mxFrameListener = NULL;
14845da7d5eSAndre Fischer         }
14945da7d5eSAndre Fischer 
15045da7d5eSAndre Fischer         // Release objects that are tied to the old frame.
15145da7d5eSAndre Fischer         mxCachedDocumentAcceleratorConfiguration = NULL;
15245da7d5eSAndre Fischer         mxCachedModuleAcceleratorConfiguration = NULL;
15345da7d5eSAndre Fischer         msCachedModuleIdentifier = OUString();
15445da7d5eSAndre Fischer         mxCachedDataFrame = rxFrame;
15545da7d5eSAndre Fischer 
15645da7d5eSAndre Fischer         // Connect to the new frame.
15745da7d5eSAndre Fischer         if (rxFrame.is())
15845da7d5eSAndre Fischer             mxFrameListener = new FrameListener(*this, rxFrame);
15945da7d5eSAndre Fischer     }
16045da7d5eSAndre Fischer }
16145da7d5eSAndre Fischer 
16245da7d5eSAndre Fischer 
16345da7d5eSAndre Fischer 
16445da7d5eSAndre Fischer 
GetDocumentAcceleratorConfiguration(void)16545da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetDocumentAcceleratorConfiguration (void)
16645da7d5eSAndre Fischer {
16745da7d5eSAndre Fischer     if ( ! mxCachedDocumentAcceleratorConfiguration.is())
16845da7d5eSAndre Fischer     {
16945da7d5eSAndre Fischer         // Get the accelerator configuration for the document.
17045da7d5eSAndre Fischer         if (mxCachedDataFrame.is())
17145da7d5eSAndre Fischer         {
17245da7d5eSAndre Fischer             Reference<frame::XController> xController = mxCachedDataFrame->getController();
17345da7d5eSAndre Fischer             if (xController.is())
17445da7d5eSAndre Fischer             {
17545da7d5eSAndre Fischer                 Reference<frame::XModel> xModel (xController->getModel());
17645da7d5eSAndre Fischer                 if (xModel.is())
17745da7d5eSAndre Fischer                 {
17845da7d5eSAndre Fischer                     Reference<ui::XUIConfigurationManagerSupplier> xSupplier (xModel, UNO_QUERY);
17945da7d5eSAndre Fischer                     if (xSupplier.is())
18045da7d5eSAndre Fischer                     {
18145da7d5eSAndre Fischer                         Reference<ui::XUIConfigurationManager> xConfigurationManager(
18245da7d5eSAndre Fischer                             xSupplier->getUIConfigurationManager(),
18345da7d5eSAndre Fischer                             UNO_QUERY);
18445da7d5eSAndre Fischer                         if (xConfigurationManager.is())
18545da7d5eSAndre Fischer                         {
18645da7d5eSAndre Fischer                             mxCachedDocumentAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
18745da7d5eSAndre Fischer                                 xConfigurationManager->getShortCutManager(),
18845da7d5eSAndre Fischer                                 UNO_QUERY);
18945da7d5eSAndre Fischer                         }
19045da7d5eSAndre Fischer                     }
19145da7d5eSAndre Fischer                 }
19245da7d5eSAndre Fischer             }
19345da7d5eSAndre Fischer         }
19445da7d5eSAndre Fischer     }
19545da7d5eSAndre Fischer     return mxCachedDocumentAcceleratorConfiguration;
19645da7d5eSAndre Fischer }
19745da7d5eSAndre Fischer 
19845da7d5eSAndre Fischer 
19945da7d5eSAndre Fischer 
20045da7d5eSAndre Fischer 
GetModuleAcceleratorConfiguration(void)20145da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetModuleAcceleratorConfiguration (void)
20245da7d5eSAndre Fischer {
20345da7d5eSAndre Fischer     if ( ! mxCachedModuleAcceleratorConfiguration.is())
20445da7d5eSAndre Fischer     {
20545da7d5eSAndre Fischer         try
20645da7d5eSAndre Fischer         {
20745da7d5eSAndre Fischer             Reference<ui::XModuleUIConfigurationManagerSupplier> xSupplier (
20845da7d5eSAndre Fischer                 mxServiceFactory->createInstance(A2S("com.sun.star.ui.ModuleUIConfigurationManagerSupplier")),
20945da7d5eSAndre Fischer                 UNO_QUERY);
21045da7d5eSAndre Fischer             Reference<ui::XUIConfigurationManager> xManager (
21145da7d5eSAndre Fischer                 xSupplier->getUIConfigurationManager(GetModuleIdentifier()));
21245da7d5eSAndre Fischer             if (xManager.is())
21345da7d5eSAndre Fischer             {
21445da7d5eSAndre Fischer                 mxCachedModuleAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
21545da7d5eSAndre Fischer                     xManager->getShortCutManager(),
21645da7d5eSAndre Fischer                     UNO_QUERY);
21745da7d5eSAndre Fischer             }
21845da7d5eSAndre Fischer         }
21945da7d5eSAndre Fischer         catch (Exception&)
22045da7d5eSAndre Fischer         {
22145da7d5eSAndre Fischer         }
22245da7d5eSAndre Fischer     }
22345da7d5eSAndre Fischer     return mxCachedModuleAcceleratorConfiguration;
22445da7d5eSAndre Fischer }
22545da7d5eSAndre Fischer 
22645da7d5eSAndre Fischer 
22745da7d5eSAndre Fischer 
22845da7d5eSAndre Fischer 
GetGlobalAcceleratorConfiguration(void)22945da7d5eSAndre Fischer Reference<ui::XAcceleratorConfiguration> CommandInfoProvider::GetGlobalAcceleratorConfiguration (void)
23045da7d5eSAndre Fischer {
23145da7d5eSAndre Fischer     // Get the global accelerator configuration.
23245da7d5eSAndre Fischer     if ( ! mxCachedGlobalAcceleratorConfiguration.is())
23345da7d5eSAndre Fischer     {
23445da7d5eSAndre Fischer         mxCachedGlobalAcceleratorConfiguration = Reference<ui::XAcceleratorConfiguration>(
23545da7d5eSAndre Fischer             mxServiceFactory->createInstance(A2S("com.sun.star.ui.GlobalAcceleratorConfiguration")),
23645da7d5eSAndre Fischer             UNO_QUERY);
23745da7d5eSAndre Fischer     }
23845da7d5eSAndre Fischer 
23945da7d5eSAndre Fischer     return mxCachedGlobalAcceleratorConfiguration;
24045da7d5eSAndre Fischer }
24145da7d5eSAndre Fischer 
24245da7d5eSAndre Fischer 
24345da7d5eSAndre Fischer 
24445da7d5eSAndre Fischer 
GetModuleIdentifier(void)24545da7d5eSAndre Fischer OUString CommandInfoProvider::GetModuleIdentifier (void)
24645da7d5eSAndre Fischer {
24745da7d5eSAndre Fischer     if (msCachedModuleIdentifier.getLength() == 0)
24845da7d5eSAndre Fischer     {
24945da7d5eSAndre Fischer         Reference<frame::XModuleManager> xModuleManager (
25045da7d5eSAndre Fischer             mxServiceFactory->createInstance(A2S("com.sun.star.frame.ModuleManager")),
25145da7d5eSAndre Fischer             UNO_QUERY);
25245da7d5eSAndre Fischer         if (xModuleManager.is())
25345da7d5eSAndre Fischer             msCachedModuleIdentifier = xModuleManager->identify(mxCachedDataFrame);
25445da7d5eSAndre Fischer     }
25545da7d5eSAndre Fischer     return msCachedModuleIdentifier;
25645da7d5eSAndre Fischer }
25745da7d5eSAndre Fischer 
25845da7d5eSAndre Fischer 
25945da7d5eSAndre Fischer 
26045da7d5eSAndre Fischer 
GetCommandShortcut(const OUString & rsCommandName)26145da7d5eSAndre Fischer OUString CommandInfoProvider::GetCommandShortcut (const OUString& rsCommandName)
26245da7d5eSAndre Fischer {
26345da7d5eSAndre Fischer     OUString sShortcut;
26445da7d5eSAndre Fischer 
26545da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetDocumentAcceleratorConfiguration(), rsCommandName);
26645da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
26745da7d5eSAndre Fischer         return sShortcut;
26845da7d5eSAndre Fischer 
26945da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetModuleAcceleratorConfiguration(), rsCommandName);
27045da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
27145da7d5eSAndre Fischer         return sShortcut;
27245da7d5eSAndre Fischer 
27345da7d5eSAndre Fischer     sShortcut = RetrieveShortcutsFromConfiguration(GetGlobalAcceleratorConfiguration(), rsCommandName);
27445da7d5eSAndre Fischer     if (sShortcut.getLength() > 0)
27545da7d5eSAndre Fischer         return sShortcut;
27645da7d5eSAndre Fischer 
27745da7d5eSAndre Fischer     return OUString();
27845da7d5eSAndre Fischer }
27945da7d5eSAndre Fischer 
28045da7d5eSAndre Fischer 
28145da7d5eSAndre Fischer 
28245da7d5eSAndre Fischer 
RetrieveShortcutsFromConfiguration(const Reference<ui::XAcceleratorConfiguration> & rxConfiguration,const OUString & rsCommandName)28345da7d5eSAndre Fischer OUString CommandInfoProvider::RetrieveShortcutsFromConfiguration(
28445da7d5eSAndre Fischer     const Reference<ui::XAcceleratorConfiguration>& rxConfiguration,
28545da7d5eSAndre Fischer     const OUString& rsCommandName)
28645da7d5eSAndre Fischer {
28745da7d5eSAndre Fischer     if (rxConfiguration.is())
28845da7d5eSAndre Fischer     {
28945da7d5eSAndre Fischer         try
29045da7d5eSAndre Fischer         {
29145da7d5eSAndre Fischer             Sequence<OUString> aCommands(1);
29245da7d5eSAndre Fischer             aCommands[0] = rsCommandName;
29345da7d5eSAndre Fischer 
29445da7d5eSAndre Fischer             Sequence<Any> aKeyCodes (rxConfiguration->getPreferredKeyEventsForCommandList(aCommands));
29545da7d5eSAndre Fischer             if (aCommands.getLength() == 1)
29645da7d5eSAndre Fischer             {
29745da7d5eSAndre Fischer                 css::awt::KeyEvent aKeyEvent;
29845da7d5eSAndre Fischer                 if (aKeyCodes[0] >>= aKeyEvent)
29945da7d5eSAndre Fischer                 {
30045da7d5eSAndre Fischer                     return svt::AcceleratorExecute::st_AWTKey2VCLKey(aKeyEvent).GetName();
30145da7d5eSAndre Fischer                 }
30245da7d5eSAndre Fischer             }
30345da7d5eSAndre Fischer         }
30445da7d5eSAndre Fischer         catch (lang::IllegalArgumentException&)
30545da7d5eSAndre Fischer         {
30645da7d5eSAndre Fischer         }
30745da7d5eSAndre Fischer     }
30845da7d5eSAndre Fischer     return OUString();
30945da7d5eSAndre Fischer }
31045da7d5eSAndre Fischer 
31145da7d5eSAndre Fischer 
31245da7d5eSAndre Fischer 
31345da7d5eSAndre Fischer 
GetCommandProperties(const OUString & rsCommandName)31445da7d5eSAndre Fischer Sequence<beans::PropertyValue> CommandInfoProvider::GetCommandProperties (const OUString& rsCommandName)
31545da7d5eSAndre Fischer {
31645da7d5eSAndre Fischer     Sequence<beans::PropertyValue> aProperties;
31745da7d5eSAndre Fischer 
31845da7d5eSAndre Fischer     try
31945da7d5eSAndre Fischer     {
32045da7d5eSAndre Fischer         const OUString sModuleIdentifier (GetModuleIdentifier());
32145da7d5eSAndre Fischer         if (sModuleIdentifier.getLength() > 0)
32245da7d5eSAndre Fischer         {
32345da7d5eSAndre Fischer             Reference<container::XNameAccess> xNameAccess (
32445da7d5eSAndre Fischer                 mxServiceFactory->createInstance(
32545da7d5eSAndre Fischer                     OUString::createFromAscii("com.sun.star.frame.UICommandDescription")),
32645da7d5eSAndre Fischer                 UNO_QUERY);
32745da7d5eSAndre Fischer             Reference<container::XNameAccess> xUICommandLabels;
32845da7d5eSAndre Fischer             if (xNameAccess.is())
32945da7d5eSAndre Fischer                 if (xNameAccess->getByName(sModuleIdentifier) >>= xUICommandLabels)
33045da7d5eSAndre Fischer                     xUICommandLabels->getByName(rsCommandName) >>= aProperties;
33145da7d5eSAndre Fischer         }
33245da7d5eSAndre Fischer     }
33345da7d5eSAndre Fischer     catch (Exception&)
33445da7d5eSAndre Fischer     {
33545da7d5eSAndre Fischer     }
33645da7d5eSAndre Fischer 
33745da7d5eSAndre Fischer     return aProperties;
33845da7d5eSAndre Fischer }
33945da7d5eSAndre Fischer 
34045da7d5eSAndre Fischer 
34145da7d5eSAndre Fischer 
34245da7d5eSAndre Fischer 
GetCommandLabel(const OUString & rsCommandName)34345da7d5eSAndre Fischer OUString CommandInfoProvider::GetCommandLabel (const OUString& rsCommandName)
34445da7d5eSAndre Fischer {
34545da7d5eSAndre Fischer     const Sequence<beans::PropertyValue> aProperties (GetCommandProperties(rsCommandName));
34645da7d5eSAndre Fischer     for (sal_Int32 nIndex=0; nIndex<aProperties.getLength(); ++nIndex)
34745da7d5eSAndre Fischer     {
34845da7d5eSAndre Fischer         if (aProperties[nIndex].Name.equalsAscii("Name"))
34945da7d5eSAndre Fischer         {
35045da7d5eSAndre Fischer             OUString sLabel;
35145da7d5eSAndre Fischer             aProperties[nIndex].Value >>= sLabel;
35245da7d5eSAndre Fischer             return sLabel;
35345da7d5eSAndre Fischer         }
35445da7d5eSAndre Fischer     }
35545da7d5eSAndre Fischer     return OUString();
35645da7d5eSAndre Fischer }
35745da7d5eSAndre Fischer 
35845da7d5eSAndre Fischer 
35945da7d5eSAndre Fischer } } // end of namespace sfx2/framework
360