Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "uiconfiguration/uicategorydescription.hxx"
30 : : #include <threadhelp/resetableguard.hxx>
31 : : #include "services.h"
32 : :
33 : : #include "properties.h"
34 : :
35 : : #include "helper/mischelper.hxx"
36 : :
37 : : #include <com/sun/star/beans/PropertyValue.hpp>
38 : : #include <com/sun/star/beans/XPropertySet.hpp>
39 : : #include <com/sun/star/container/XNameAccess.hpp>
40 : : #include <com/sun/star/container/XNameContainer.hpp>
41 : : #include <com/sun/star/container/XContainer.hpp>
42 : :
43 : : #include <rtl/ustrbuf.hxx>
44 : : #include <cppuhelper/implbase2.hxx>
45 : : #include <unotools/configmgr.hxx>
46 : :
47 : : #include <vcl/mnemonic.hxx>
48 : : #include <comphelper/sequence.hxx>
49 : : #include <rtl/logfile.hxx>
50 : :
51 : : //_________________________________________________________________________________________________________________
52 : : // Defines
53 : : //_________________________________________________________________________________________________________________
54 : :
55 : : using namespace com::sun::star::uno;
56 : : using namespace com::sun::star::lang;
57 : : using namespace com::sun::star::beans;
58 : : using namespace com::sun::star::container;
59 : : using namespace ::com::sun::star::frame;
60 : :
61 : : //_________________________________________________________________________________________________________________
62 : : // Namespace
63 : : //_________________________________________________________________________________________________________________
64 : :
65 : : struct ModuleToCategory
66 : : {
67 : : const char* pModuleId;
68 : : const char* pCommands;
69 : : };
70 : :
71 : : static const char GENERIC_MODULE_NAME[] = "generic";
72 : : static const char CONFIGURATION_ROOT_ACCESS[] = "/org.openoffice.Office.UI.";
73 : : static const char CONFIGURATION_CATEGORY_ELEMENT_ACCESS[] = "/Commands/Categories";
74 : : static const char CONFIGURATION_PROPERTY_NAME[] = "Name";
75 : :
76 : : namespace framework
77 : : {
78 : :
79 : : //*****************************************************************************************************************
80 : : // Configuration access class for PopupMenuControllerFactory implementation
81 : : //*****************************************************************************************************************
82 : :
83 : : class ConfigurationAccess_UICategory : // Order is neccessary for right initialization!
84 : : private ThreadHelpBase ,
85 : : public ::cppu::WeakImplHelper2<XNameAccess,XContainerListener>
86 : : {
87 : : public:
88 : : ConfigurationAccess_UICategory( const ::rtl::OUString& aModuleName, const Reference< XNameAccess >& xGenericUICommands, const Reference< XMultiServiceFactory >& rServiceManager );
89 : : virtual ~ConfigurationAccess_UICategory();
90 : :
91 : : // XNameAccess
92 : : virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName )
93 : : throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
94 : :
95 : : virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getElementNames()
96 : : throw (::com::sun::star::uno::RuntimeException);
97 : :
98 : : virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName )
99 : : throw (::com::sun::star::uno::RuntimeException);
100 : :
101 : : // XElementAccess
102 : : virtual ::com::sun::star::uno::Type SAL_CALL getElementType()
103 : : throw (::com::sun::star::uno::RuntimeException);
104 : :
105 : : virtual sal_Bool SAL_CALL hasElements()
106 : : throw (::com::sun::star::uno::RuntimeException);
107 : :
108 : : // container.XContainerListener
109 : : virtual void SAL_CALL elementInserted( const ContainerEvent& aEvent ) throw(RuntimeException);
110 : : virtual void SAL_CALL elementRemoved ( const ContainerEvent& aEvent ) throw(RuntimeException);
111 : : virtual void SAL_CALL elementReplaced( const ContainerEvent& aEvent ) throw(RuntimeException);
112 : :
113 : : // lang.XEventListener
114 : : virtual void SAL_CALL disposing( const EventObject& aEvent ) throw(RuntimeException);
115 : :
116 : : protected:
117 : : Any getUINameFromID( const rtl::OUString& rId );
118 : : Any getUINameFromCache( const rtl::OUString& rId );
119 : : Sequence< rtl::OUString > getAllIds();
120 : : sal_Bool fillCache();
121 : :
122 : : private:
123 : : typedef ::boost::unordered_map< ::rtl::OUString,
124 : : ::rtl::OUString,
125 : : OUStringHashCode,
126 : : ::std::equal_to< ::rtl::OUString > > IdToInfoCache;
127 : :
128 : : sal_Bool initializeConfigAccess();
129 : :
130 : : rtl::OUString m_aConfigCategoryAccess;
131 : : rtl::OUString m_aPropUIName;
132 : : Reference< XNameAccess > m_xGenericUICategories;
133 : : Reference< XMultiServiceFactory > m_xServiceManager;
134 : : Reference< XMultiServiceFactory > m_xConfigProvider;
135 : : Reference< XNameAccess > m_xConfigAccess;
136 : : Reference< XContainerListener > m_xConfigListener;
137 : : sal_Bool m_bConfigAccessInitialized;
138 : : sal_Bool m_bCacheFilled;
139 : : IdToInfoCache m_aIdCache;
140 : : };
141 : :
142 : : //*****************************************************************************************************************
143 : : // XInterface, XTypeProvider
144 : : //*****************************************************************************************************************
145 : :
146 : 2 : ConfigurationAccess_UICategory::ConfigurationAccess_UICategory( const rtl::OUString& aModuleName, const Reference< XNameAccess >& rGenericUICategories, const Reference< XMultiServiceFactory >& rServiceManager ) :
147 : : ThreadHelpBase(),
148 : : m_aConfigCategoryAccess( CONFIGURATION_ROOT_ACCESS ),
149 : : m_aPropUIName( CONFIGURATION_PROPERTY_NAME ),
150 : : m_xGenericUICategories( rGenericUICategories ),
151 : : m_xServiceManager( rServiceManager ),
152 : : m_bConfigAccessInitialized( sal_False ),
153 [ + - ][ + - ]: 2 : m_bCacheFilled( sal_False )
154 : : {
155 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::ConfigurationAccess_UICategory" );
156 : : // Create configuration hierachical access name
157 : 2 : m_aConfigCategoryAccess += aModuleName;
158 : 2 : m_aConfigCategoryAccess += rtl::OUString( CONFIGURATION_CATEGORY_ELEMENT_ACCESS );
159 : :
160 [ + - ][ + - ]: 2 : m_xConfigProvider = Reference< XMultiServiceFactory >( rServiceManager->createInstance(SERVICENAME_CFGPROVIDER),UNO_QUERY );
[ + - ][ + - ]
[ + - ]
161 : 2 : }
162 : :
163 [ + - ][ + - ]: 2 : ConfigurationAccess_UICategory::~ConfigurationAccess_UICategory()
164 : : {
165 : : // SAFE
166 [ + - ]: 2 : ResetableGuard aLock( m_aLock );
167 [ + - ]: 2 : Reference< XContainer > xContainer( m_xConfigAccess, UNO_QUERY );
168 [ - + ]: 2 : if ( xContainer.is() )
169 [ # # ][ # # ]: 2 : xContainer->removeContainerListener(m_xConfigListener);
[ + - ]
170 [ - + ]: 4 : }
171 : :
172 : : // XNameAccess
173 : 0 : Any SAL_CALL ConfigurationAccess_UICategory::getByName( const ::rtl::OUString& rId )
174 : : throw ( NoSuchElementException, WrappedTargetException, RuntimeException)
175 : : {
176 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getByName" );
177 [ # # ]: 0 : ResetableGuard aLock( m_aLock );
178 [ # # ]: 0 : if ( !m_bConfigAccessInitialized )
179 : : {
180 [ # # ]: 0 : initializeConfigAccess();
181 : 0 : m_bConfigAccessInitialized = sal_True;
182 [ # # ]: 0 : fillCache();
183 : : }
184 : :
185 : : // SAFE
186 [ # # ]: 0 : Any a = getUINameFromID( rId );
187 : :
188 [ # # ]: 0 : if ( !a.hasValue() )
189 [ # # ]: 0 : throw NoSuchElementException();
190 : :
191 [ # # ]: 0 : return a;
192 : : }
193 : :
194 : 0 : Sequence< ::rtl::OUString > SAL_CALL ConfigurationAccess_UICategory::getElementNames()
195 : : throw ( RuntimeException )
196 : : {
197 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getElementNames" );
198 : 0 : return getAllIds();
199 : : }
200 : :
201 : 0 : sal_Bool SAL_CALL ConfigurationAccess_UICategory::hasByName( const ::rtl::OUString& rId )
202 : : throw (::com::sun::star::uno::RuntimeException)
203 : : {
204 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::hasByName" );
205 : 0 : return getByName( rId ).hasValue();
206 : : }
207 : :
208 : : // XElementAccess
209 : 0 : Type SAL_CALL ConfigurationAccess_UICategory::getElementType()
210 : : throw ( RuntimeException )
211 : : {
212 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getElementType" );
213 : 0 : return( ::getCppuType( (const rtl::OUString*)NULL ) );
214 : : }
215 : :
216 : 0 : sal_Bool SAL_CALL ConfigurationAccess_UICategory::hasElements()
217 : : throw ( RuntimeException )
218 : : {
219 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::hasElements" );
220 : : // There must be global categories!
221 : 0 : return sal_True;
222 : : }
223 : :
224 : 0 : sal_Bool ConfigurationAccess_UICategory::fillCache()
225 : : {
226 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::fillCache" );
227 : : RTL_LOGFILE_CONTEXT( aLog, "framework (cd100003) ::ConfigurationAccess_UICategory::fillCache" );
228 : :
229 [ # # ]: 0 : if ( m_bCacheFilled )
230 : 0 : return sal_True;
231 : :
232 : 0 : sal_Int32 i( 0 );
233 : 0 : rtl::OUString aUIName;
234 [ # # ][ # # ]: 0 : Sequence< ::rtl::OUString > aNameSeq = m_xConfigAccess->getElementNames();
235 : :
236 [ # # ]: 0 : for ( i = 0; i < aNameSeq.getLength(); i++ )
237 : : {
238 : : try
239 : : {
240 [ # # ][ # # ]: 0 : Reference< XNameAccess > xNameAccess(m_xConfigAccess->getByName( aNameSeq[i] ),UNO_QUERY);
[ # # ][ # # ]
241 [ # # ]: 0 : if ( xNameAccess.is() )
242 : : {
243 [ # # ][ # # ]: 0 : xNameAccess->getByName( m_aPropUIName ) >>= aUIName;
244 : :
245 [ # # ][ # # ]: 0 : m_aIdCache.insert( IdToInfoCache::value_type( aNameSeq[i], aUIName ));
246 [ # # # ]: 0 : }
247 : : }
248 [ # # ]: 0 : catch ( const com::sun::star::lang::WrappedTargetException& )
249 : : {
250 : : }
251 [ # # ]: 0 : catch ( const com::sun::star::container::NoSuchElementException& )
252 : : {
253 : : }
254 : : }
255 : :
256 : 0 : m_bCacheFilled = sal_True;
257 : :
258 [ # # ]: 0 : return sal_True;
259 : : }
260 : :
261 : 0 : Any ConfigurationAccess_UICategory::getUINameFromID( const rtl::OUString& rId )
262 : : {
263 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getUINameFromID" );
264 : 0 : Any a;
265 : :
266 : : try
267 : : {
268 [ # # ]: 0 : a = getUINameFromCache( rId );
269 [ # # ]: 0 : if ( !a.hasValue() )
270 : : {
271 : : // Try to ask our global commands configuration access
272 [ # # ]: 0 : if ( m_xGenericUICategories.is() )
273 : : {
274 : : try
275 : : {
276 [ # # ][ # # ]: 0 : return m_xGenericUICategories->getByName( rId );
277 : : }
278 [ # # ]: 0 : catch ( const com::sun::star::lang::WrappedTargetException& )
279 : : {
280 : : }
281 [ # # # # : 0 : catch ( const com::sun::star::container::NoSuchElementException& )
# ]
282 : : {
283 : : }
284 : : }
285 : : }
286 : : }
287 [ # # ]: 0 : catch( const com::sun::star::container::NoSuchElementException& )
288 : : {
289 : : }
290 [ # # ]: 0 : catch ( const com::sun::star::lang::WrappedTargetException& )
291 : : {
292 : : }
293 : :
294 [ # # # ]: 0 : return a;
295 : : }
296 : :
297 : 0 : Any ConfigurationAccess_UICategory::getUINameFromCache( const rtl::OUString& rId )
298 : : {
299 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getUINameFromCache" );
300 : 0 : Any a;
301 : :
302 [ # # ]: 0 : IdToInfoCache::const_iterator pIter = m_aIdCache.find( rId );
303 [ # # ][ # # ]: 0 : if ( pIter != m_aIdCache.end() )
304 [ # # ][ # # ]: 0 : a <<= pIter->second;
305 : :
306 : 0 : return a;
307 : : }
308 : :
309 : 0 : Sequence< rtl::OUString > ConfigurationAccess_UICategory::getAllIds()
310 : : {
311 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::getAllIds" );
312 : : // SAFE
313 [ # # ]: 0 : ResetableGuard aLock( m_aLock );
314 : :
315 [ # # ]: 0 : if ( !m_bConfigAccessInitialized )
316 : : {
317 [ # # ]: 0 : initializeConfigAccess();
318 : 0 : m_bConfigAccessInitialized = sal_True;
319 [ # # ]: 0 : fillCache();
320 : : }
321 : :
322 [ # # ]: 0 : if ( m_xConfigAccess.is() )
323 : : {
324 : 0 : Any a;
325 : 0 : Reference< XNameAccess > xNameAccess;
326 : :
327 : : try
328 : : {
329 [ # # ][ # # ]: 0 : Sequence< ::rtl::OUString > aNameSeq = m_xConfigAccess->getElementNames();
330 : :
331 [ # # ]: 0 : if ( m_xGenericUICategories.is() )
332 : : {
333 : : // Create concat list of supported user interface commands of the module
334 [ # # ][ # # ]: 0 : Sequence< ::rtl::OUString > aGenericNameSeq = m_xGenericUICategories->getElementNames();
335 : 0 : sal_uInt32 nCount1 = aNameSeq.getLength();
336 : 0 : sal_uInt32 nCount2 = aGenericNameSeq.getLength();
337 : :
338 [ # # ]: 0 : aNameSeq.realloc( nCount1 + nCount2 );
339 [ # # ]: 0 : ::rtl::OUString* pNameSeq = aNameSeq.getArray();
340 : 0 : const ::rtl::OUString* pGenericSeq = aGenericNameSeq.getConstArray();
341 [ # # ]: 0 : for ( sal_uInt32 i = 0; i < nCount2; i++ )
342 [ # # ]: 0 : pNameSeq[nCount1+i] = pGenericSeq[i];
343 : : }
344 : :
345 [ # # ][ # # ]: 0 : return aNameSeq;
[ # # # ]
346 : : }
347 [ # # ]: 0 : catch( const com::sun::star::container::NoSuchElementException& )
348 : : {
349 : : }
350 [ # # ]: 0 : catch ( const com::sun::star::lang::WrappedTargetException& )
351 : : {
352 [ # # ][ # # ]: 0 : }
353 : : }
354 : :
355 [ # # ][ # # ]: 0 : return Sequence< rtl::OUString >();
356 : : }
357 : :
358 : 0 : sal_Bool ConfigurationAccess_UICategory::initializeConfigAccess()
359 : : {
360 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::initializeConfigAccess" );
361 [ # # ]: 0 : Sequence< Any > aArgs( 1 );
362 : 0 : PropertyValue aPropValue;
363 : :
364 : : try
365 : : {
366 : 0 : aPropValue.Name = rtl::OUString( "nodepath" );
367 [ # # ]: 0 : aPropValue.Value <<= m_aConfigCategoryAccess;
368 [ # # ][ # # ]: 0 : aArgs[0] <<= aPropValue;
369 : :
370 [ # # ][ # # ]: 0 : m_xConfigAccess = Reference< XNameAccess >( m_xConfigProvider->createInstanceWithArguments(SERVICENAME_CFGREADACCESS,aArgs ),UNO_QUERY );
[ # # ][ # # ]
[ # # ]
371 [ # # ]: 0 : if ( m_xConfigAccess.is() )
372 : : {
373 : : // Add as container listener
374 [ # # ]: 0 : Reference< XContainer > xContainer( m_xConfigAccess, UNO_QUERY );
375 [ # # ]: 0 : if ( xContainer.is() )
376 : : {
377 [ # # ][ # # ]: 0 : m_xConfigListener = new WeakContainerListener(this);
[ # # ][ # # ]
378 [ # # ][ # # ]: 0 : xContainer->addContainerListener(m_xConfigListener);
379 [ # # # ]: 0 : }
380 : : }
381 : :
382 : 0 : return sal_True;
383 : : }
384 [ # # ]: 0 : catch ( const WrappedTargetException& )
385 : : {
386 : : }
387 [ # # ]: 0 : catch ( const Exception& )
388 : : {
389 : : }
390 : :
391 [ # # ]: 0 : return sal_False;
392 : : }
393 : :
394 : : // container.XContainerListener
395 : 0 : void SAL_CALL ConfigurationAccess_UICategory::elementInserted( const ContainerEvent& ) throw(RuntimeException)
396 : : {
397 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::elementInserted" );
398 : 0 : }
399 : :
400 : 0 : void SAL_CALL ConfigurationAccess_UICategory::elementRemoved ( const ContainerEvent& ) throw(RuntimeException)
401 : : {
402 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::elementRemoved " );
403 : 0 : }
404 : :
405 : 0 : void SAL_CALL ConfigurationAccess_UICategory::elementReplaced( const ContainerEvent& ) throw(RuntimeException)
406 : : {
407 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::elementReplaced" );
408 : 0 : }
409 : :
410 : : // lang.XEventListener
411 : 0 : void SAL_CALL ConfigurationAccess_UICategory::disposing( const EventObject& aEvent ) throw(RuntimeException)
412 : : {
413 : : RTL_LOGFILE_CONTEXT_AUTHOR( aLogger, "framework", "Ocke.Janssen@sun.com", "ConfigurationAccess_UICategory::disposing" );
414 : : // SAFE
415 : : // remove our reference to the config access
416 [ # # ]: 0 : ResetableGuard aLock( m_aLock );
417 : :
418 [ # # ]: 0 : Reference< XInterface > xIfac1( aEvent.Source, UNO_QUERY );
419 [ # # ]: 0 : Reference< XInterface > xIfac2( m_xConfigAccess, UNO_QUERY );
420 [ # # ][ # # ]: 0 : if ( xIfac1 == xIfac2 )
421 [ # # ]: 0 : m_xConfigAccess.clear();
422 : 0 : }
423 : :
424 : : //*****************************************************************************************************************
425 : : // XInterface, XTypeProvider, XServiceInfo
426 : : //*****************************************************************************************************************
427 [ + - ][ + - ]: 742 : DEFINE_XSERVICEINFO_ONEINSTANCESERVICE ( UICategoryDescription ,
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ # # ]
[ # # ]
428 : : ::cppu::OWeakObject ,
429 : : SERVICENAME_UICATEGORYDESCRIPTION ,
430 : : IMPLEMENTATIONNAME_UICATEGORYDESCRIPTION
431 : : )
432 : :
433 : 2 : DEFINE_INIT_SERVICE ( UICategoryDescription, {} )
434 : :
435 : 2 : UICategoryDescription::UICategoryDescription( const Reference< XMultiServiceFactory >& xServiceManager ) :
436 : 2 : UICommandDescription(xServiceManager,true)
437 : : {
438 : 2 : Reference< XNameAccess > xEmpty;
439 : 2 : rtl::OUString aGenericCategories( "GenericCategories" );
440 [ + - ][ + - ]: 2 : m_xGenericUICommands = new ConfigurationAccess_UICategory( aGenericCategories, xEmpty, xServiceManager );
[ + - ]
441 : :
442 : : // insert generic categories mappings
443 : : m_aModuleToCommandFileMap.insert( ModuleToCommandFileMap::value_type(
444 [ + - ]: 2 : rtl::OUString(GENERIC_MODULE_NAME ), aGenericCategories ));
445 : :
446 [ + - ]: 2 : UICommandsHashMap::iterator pCatIter = m_aUICommandsHashMap.find( aGenericCategories );
447 [ + - ][ - + ]: 2 : if ( pCatIter != m_aUICommandsHashMap.end() )
448 [ # # ][ # # ]: 0 : pCatIter->second = m_xGenericUICommands;
449 : :
450 [ + - ]: 2 : impl_fillElements("ooSetupFactoryCmdCategoryConfigRef");
451 : 2 : }
452 : :
453 : 2 : UICategoryDescription::~UICategoryDescription()
454 : : {
455 [ - + ]: 4 : }
456 : 0 : Reference< XNameAccess > UICategoryDescription::impl_createConfigAccess(const ::rtl::OUString& _sName)
457 : : {
458 [ # # ][ # # ]: 0 : return new ConfigurationAccess_UICategory( _sName,m_xGenericUICommands,m_xServiceManager );
459 : : }
460 : :
461 : : } // namespace framework
462 : :
463 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|