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 
23 
24 #ifndef EXTENSIONS_SOURCE_PROPCTRLR_PROPERTYHANDLER_HXX
25 #define EXTENSIONS_SOURCE_PROPCTRLR_PROPERTYHANDLER_HXX
26 
27 #include "pcrcomponentcontext.hxx"
28 #include "pcrcommon.hxx"
29 #ifndef _EXTENSIONS_PROPCTRLR_MODULEPCR_HXX_
30 #include "modulepcr.hxx"
31 #endif
32 
33 /** === begin UNO includes === **/
34 #include <com/sun/star/uno/XComponentContext.hpp>
35 #include <com/sun/star/beans/PropertyState.hpp>
36 #include <com/sun/star/beans/XPropertySet.hpp>
37 #include <com/sun/star/beans/Property.hpp>
38 #include <com/sun/star/script/XTypeConverter.hpp>
39 #include <com/sun/star/frame/XModel.hpp>
40 #include <com/sun/star/uno/Sequence.hxx>
41 #include <com/sun/star/uno/Any.hxx>
42 #include <com/sun/star/util/Date.hpp>
43 #include <com/sun/star/util/Time.hpp>
44 #include <com/sun/star/util/DateTime.hpp>
45 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
46 #include <com/sun/star/inspection/XPropertyHandler.hpp>
47 #include <com/sun/star/lang/XServiceInfo.hpp>
48 /** === end UNO includes === **/
49 #include <osl/interlck.h>
50 #include <cppuhelper/compbase1.hxx>
51 #include <cppuhelper/implbase1.hxx>
52 #include <comphelper/uno3.hxx>
53 
54 #include <memory>
55 #include <vector>
56 
57 namespace com { namespace sun { namespace star {
58     namespace inspection {
59         struct LineDescriptor;
60         class XPropertyControlFactory;
61     }
62 } } }
63 
64 class Window;
65 //........................................................................
66 namespace pcr
67 {
68 //........................................................................
69 
70     typedef sal_Int32   PropertyId;
71 
72 	//====================================================================
73 	//= PropertyHandler
74 	//====================================================================
75     class OPropertyInfoService;
76     typedef ::cppu::WeakComponentImplHelper1    <   ::com::sun::star::inspection::XPropertyHandler
77                                                 >   PropertyHandler_Base;
78     /** the base class for property handlers
79     */
80     class PropertyHandler : public PropertyHandler_Base
81     {
82     private:
83         /// cache for getSupportedProperties
84         mutable StlSyntaxSequence< ::com::sun::star::beans::Property >
85                                     m_aSupportedProperties;
86         mutable bool                m_bSupportedPropertiesAreKnown;
87 
88         /// helper which ensures that we can access resources as long as the instance lives
89         PcrClient       m_aEnsureResAccess;
90 
91     private:
92         /// the property listener which has been registered
93         PropertyChangeListeners                                                         m_aPropertyListeners;
94 
95     protected:
96 		mutable ::osl::Mutex                                                            m_aMutex;
97         /// the context in which the instance was created
98         ComponentContext                                                                m_aContext;
99         /// the component we're inspecting
100         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >       m_xComponent;
101         /// info about our component's properties
102         ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo >   m_xComponentPropertyInfo;
103         /// type converter, needed on various occasions
104         ::com::sun::star::uno::Reference< ::com::sun::star::script::XTypeConverter >    m_xTypeConverter;
105         /// access to property meta data
106         ::std::auto_ptr< OPropertyInfoService >                                         m_pInfoService;
107 
108     protected:
109         PropertyHandler(
110             const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext
111         );
112         ~PropertyHandler();
113 
114         // default implementations for XPropertyHandler
115         virtual void SAL_CALL inspect( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& _rxIntrospectee ) throw (::com::sun::star::uno::RuntimeException, ::com::sun::star::lang::NullPointerException);
116         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property > SAL_CALL getSupportedProperties() throw (::com::sun::star::uno::RuntimeException);
117         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupersededProperties( ) throw (::com::sun::star::uno::RuntimeException);
118         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getActuatingProperties( ) throw (::com::sun::star::uno::RuntimeException);
119         virtual ::com::sun::star::uno::Any SAL_CALL convertToPropertyValue( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rControlValue ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
120         virtual ::com::sun::star::uno::Any SAL_CALL convertToControlValue( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Any& _rPropertyValue, const ::com::sun::star::uno::Type& _rControlValueType ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
121         virtual ::com::sun::star::beans::PropertyState  SAL_CALL getPropertyState( const ::rtl::OUString& _rPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
122         virtual ::com::sun::star::inspection::LineDescriptor SAL_CALL describePropertyLine( const ::rtl::OUString& _rPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XPropertyControlFactory >& _rxControlFactory ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
123         virtual ::sal_Bool SAL_CALL isComposable( const ::rtl::OUString& _rPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
124         virtual ::com::sun::star::inspection::InteractiveSelectionResult SAL_CALL onInteractivePropertySelection( const ::rtl::OUString& _rPropertyName, sal_Bool _bPrimary, ::com::sun::star::uno::Any& _rData, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XObjectInspectorUI >& _rxInspectorUI ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
125         virtual void SAL_CALL actuatingPropertyChanged( const ::rtl::OUString& _rActuatingPropertyName, const ::com::sun::star::uno::Any& _rNewValue, const ::com::sun::star::uno::Any& _rOldValue, const ::com::sun::star::uno::Reference< ::com::sun::star::inspection::XObjectInspectorUI >& _rxInspectorUI, sal_Bool _bFirstTimeInit ) throw (::com::sun::star::lang::NullPointerException, ::com::sun::star::uno::RuntimeException);
126         virtual void SAL_CALL addPropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException);
127         virtual void SAL_CALL removePropertyChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& _rxListener ) throw (::com::sun::star::uno::RuntimeException);
128         virtual sal_Bool SAL_CALL suspend( sal_Bool _bSuspend ) throw (::com::sun::star::uno::RuntimeException);
129 
130         // XComponent
131         DECLARE_XCOMPONENT()
132         virtual void SAL_CALL disposing();
133 
134         // own overridables
135         virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >
136                     SAL_CALL doDescribeSupportedProperties() const = 0;
137 
138         /// called when XPropertyHandler::inspect has been called, and we thus have a new component to inspect
139         virtual void onNewComponent();
140 
141     protected:
142         /** fires the change in a property value to our listener (if any)
143             @see addPropertyChangeListener
144         */
145         void    firePropertyChange( const ::rtl::OUString& _rPropName, PropertyId _nPropId,
146                     const ::com::sun::star::uno::Any& _rOldValue, const ::com::sun::star::uno::Any& _rNewValue ) SAL_THROW(());
147 
148         /** retrieves a window which can be used as parent for dialogs
149         */
150         Window* impl_getDefaultDialogParent_nothrow() const;
151 
152         /** retrieves the property id for a given property name
153             @throw com::sun::star::beans::UnknownPropertyException
154                 if the property name is not known to our ->m_pInfoService
155         */
156         PropertyId impl_getPropertyId_throw( const ::rtl::OUString& _rPropertyName ) const;
157 
158         //-------------------------------------------------------------------------------
159         // helper for implementing doDescribeSupportedProperties
160         /** adds a description for the given string property to the given property vector
161             Most probably to be called from within getSupportedProperties
162         */
163         inline void addStringPropertyDescription(
164                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
165                     const ::rtl::OUString& _rPropertyName,
166                     sal_Int16 _nAttribs = 0
167                 ) const;
168 
169         /** adds a description for the given int32 property to the given property vector
170         */
171         inline void addInt32PropertyDescription(
172                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
173                     const ::rtl::OUString& _rPropertyName,
174                     sal_Int16 _nAttribs = 0
175                 ) const;
176 
177         /** adds a description for the given int16 property to the given property vector
178         */
179         inline void addInt16PropertyDescription(
180                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
181                     const ::rtl::OUString& _rPropertyName,
182                     sal_Int16 _nAttribs = 0
183                 ) const;
184 
185         /** adds a description for the given double property to the given property vector
186         */
187         inline void addDoublePropertyDescription(
188                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
189                     const ::rtl::OUString& _rPropertyName,
190                     sal_Int16 _nAttribs = 0
191                 ) const;
192 
193         /** adds a description for the given date property to the given property vector
194         */
195         inline void addDatePropertyDescription(
196                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
197                     const ::rtl::OUString& _rPropertyName,
198                     sal_Int16 _nAttribs = 0
199                 ) const;
200 
201         /** adds a description for the given time property to the given property vector
202         */
203         inline void addTimePropertyDescription(
204                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
205                     const ::rtl::OUString& _rPropertyName,
206                     sal_Int16 _nAttribs = 0
207                 ) const;
208 
209         /** adds a description for the given DateTime property to the given property vector
210         */
211         inline void addDateTimePropertyDescription(
212                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
213                     const ::rtl::OUString& _rPropertyName,
214                     sal_Int16 _nAttribs = 0
215                 ) const;
216 
217         /// adds a Property, given by name only, to a given vector of Properties
218         void implAddPropertyDescription(
219                     ::std::vector< ::com::sun::star::beans::Property >& _rProperties,
220                     const ::rtl::OUString& _rPropertyName,
221                     const ::com::sun::star::uno::Type& _rType,
222                     sal_Int16 _nAttribs = 0
223                 ) const;
224 
225         //-------------------------------------------------------------------------------
226         // helper for accessing and maintaining meta data about our supported properties
227 
228         /** retrieves a property given by handle
229 
230             @return
231                 a pointer to the descriptor for the given properties, if it is one of our
232                 supported properties, <NULL/> else.
233 
234             @see doDescribeSupportedProperties
235             @see impl_getPropertyFromId_throw
236         */
237         const ::com::sun::star::beans::Property*
238                     impl_getPropertyFromId_nothrow( PropertyId _nPropId ) const;
239 
240         /** retrieves a property given by handle
241 
242             @throws UnknownPropertyException
243                 if the handler does not support a property with the given handle
244 
245             @seealso doDescribeSupportedProperties
246             @see impl_getPropertyFromId_nothrow
247         */
248         const ::com::sun::star::beans::Property&
249                     impl_getPropertyFromId_throw( PropertyId _nPropId ) const;
250 
251         /** determines whether a given property id is part of our supported properties
252             @see getSupportedProperties
253             @see doDescribeSupportedProperties
254         */
impl_isSupportedProperty_nothrow(PropertyId _nPropId) const255         inline bool impl_isSupportedProperty_nothrow( PropertyId _nPropId ) const
256         {
257             return impl_getPropertyFromId_nothrow( _nPropId ) != NULL;
258         }
259 
260         /** retrieves a property given by name
261 
262             @throws UnknownPropertyException
263                 if the handler does not support a property with the given name
264 
265             @seealso doDescribeSupportedProperties
266         */
267         const ::com::sun::star::beans::Property&
268                     impl_getPropertyFromName_throw( const ::rtl::OUString& _rPropertyName ) const;
269 
270         /** get the name of a property given by handle
271         */
272         inline ::rtl::OUString
273                     impl_getPropertyNameFromId_nothrow( PropertyId _nPropId ) const;
274 
275         /** returns the value of the ContextDocument property in the ComponentContext which was used to create
276             this handler.
277         */
278         inline ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >
impl_getContextDocument_nothrow() const279                     impl_getContextDocument_nothrow() const
280         {
281             return ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel >(
282                 m_aContext.getContextValueByAsciiName( "ContextDocument" ), ::com::sun::star::uno::UNO_QUERY );
283         }
284 
285         /** marks the context document as modified
286 
287             @see impl_getContextDocument_nothrow
288         */
289         void impl_setContextDocumentModified_nothrow() const;
290 
291         /// determines whether our component has a given property
292         bool impl_componentHasProperty_throw( const ::rtl::OUString& _rPropName ) const;
293 
294         /** determines the default measure unit for the document in which our component lives
295         */
296         sal_Int16 impl_getDocumentMeasurementUnit_throw() const;
297 
298     private:
299         PropertyHandler();                                    // never implemented
300         PropertyHandler( const PropertyHandler& );            // never implemented
301         PropertyHandler& operator=( const PropertyHandler& ); // never implemented
302     };
303 
304     //--------------------------------------------------------------------
addStringPropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const305     inline void PropertyHandler::addStringPropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
306     {
307         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< ::rtl::OUString* >( NULL ) ), _nAttribs );
308     }
309 
addInt32PropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const310     inline void PropertyHandler::addInt32PropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
311     {
312         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< sal_Int32* >( NULL ) ), _nAttribs );
313     }
314 
addInt16PropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const315     inline void PropertyHandler::addInt16PropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
316     {
317         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< sal_Int16* >( NULL ) ), _nAttribs );
318     }
319 
addDoublePropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const320     inline void PropertyHandler::addDoublePropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
321     {
322         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< double* >( NULL ) ), _nAttribs );
323     }
324 
addDatePropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const325     inline void PropertyHandler::addDatePropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
326     {
327         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< com::sun::star::util::Date* >( NULL ) ), _nAttribs );
328     }
329 
addTimePropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const330     inline void PropertyHandler::addTimePropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
331     {
332         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< com::sun::star::util::Time* >( NULL ) ), _nAttribs );
333     }
334 
addDateTimePropertyDescription(::std::vector<::com::sun::star::beans::Property> & _rProperties,const::rtl::OUString & _rPropertyName,sal_Int16 _nAttribs) const335     inline void PropertyHandler::addDateTimePropertyDescription( ::std::vector< ::com::sun::star::beans::Property >& _rProperties, const ::rtl::OUString& _rPropertyName, sal_Int16 _nAttribs ) const
336     {
337         implAddPropertyDescription( _rProperties, _rPropertyName, ::getCppuType( static_cast< com::sun::star::util::DateTime* >( NULL ) ), _nAttribs );
338     }
339 
impl_getPropertyNameFromId_nothrow(PropertyId _nPropId) const340     inline ::rtl::OUString PropertyHandler::impl_getPropertyNameFromId_nothrow( PropertyId _nPropId ) const
341     {
342         const ::com::sun::star::beans::Property* pProp = impl_getPropertyFromId_nothrow( _nPropId );
343         return pProp ? pProp->Name : ::rtl::OUString();
344     }
345 
346     //====================================================================
347 	//= PropertyHandlerComponent
348 	//====================================================================
349     typedef ::cppu::ImplHelper1 <   ::com::sun::star::lang::XServiceInfo
350                                 >   PropertyHandlerComponent_Base;
351     /** PropertyHandler implementation which additionally supports XServiceInfo
352     */
353     class PropertyHandlerComponent  :public PropertyHandler
354                                     ,public PropertyHandlerComponent_Base
355     {
356     protected:
357         PropertyHandlerComponent(
358             const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext
359         );
360 
361         DECLARE_XINTERFACE()
362         DECLARE_XTYPEPROVIDER()
363 
364         // XServiceInfo
365         virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException) = 0;
366         virtual ::sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw (::com::sun::star::uno::RuntimeException);
367         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw (::com::sun::star::uno::RuntimeException) = 0;
368     };
369 
370     //====================================================================
371 	//= HandlerComponentBase
372 	//====================================================================
373     /** a PropertyHandlerComponent implementation which routes XServiceInfo::getImplementationName and
374         XServiceInfo::getSupportedServiceNames to static versions of those methods, which are part of
375         the derived class.
376 
377         Additionally, a method <member>Create</member> is provided which takes a component context, and returns a new
378         instance of the derived class. This <member>Create</member> is used to register the implementation
379         of the derived class at the <type>PcrModule</type>.
380 
381         Well, every time we're talking about derived class, we in fact mean the template argument of
382         <type>HandlerComponentBase</type>. But usually this equals your derived class:
383         <pre>
384         class MyHandler;
385         typedef HandlerComponentBase< MyHandler > MyHandler_Base;
386         class MyHandler : MyHandler_Base
387         {
388             ...
389         public:
390             static ::rtl::OUString SAL_CALL getImplementationName_static(  ) throw (::com::sun::star::uno::RuntimeException);
391             static ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames_static(  ) throw (::com::sun::star::uno::RuntimeException);
392         };
393         </pre>
394     */
395     template < class HANDLER >
396     class HandlerComponentBase : public PropertyHandlerComponent
397     {
398     protected:
HandlerComponentBase(const::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> & _rxContext)399         HandlerComponentBase( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext )
400             :PropertyHandlerComponent( _rxContext )
401         {
402         }
403 
404     protected:
405         // XServiceInfo
406         virtual ::rtl::OUString SAL_CALL getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException);
407         virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames(  ) throw (::com::sun::star::uno::RuntimeException);
408         static ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext );
409 
410     public:
411         /** registers the implementation of HANDLER at the <type>PcrModule</type>
412         */
413         static void registerImplementation();
414     };
415 
416 	//--------------------------------------------------------------------
417     template < class HANDLER >
getImplementationName()418     ::rtl::OUString SAL_CALL HandlerComponentBase< HANDLER >::getImplementationName(  ) throw (::com::sun::star::uno::RuntimeException)
419     {
420         return HANDLER::getImplementationName_static();
421     }
422 
423 	//--------------------------------------------------------------------
424     template < class HANDLER >
getSupportedServiceNames()425     ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL HandlerComponentBase< HANDLER >::getSupportedServiceNames(  ) throw (::com::sun::star::uno::RuntimeException)
426     {
427         return HANDLER::getSupportedServiceNames_static();
428     }
429 
430 	//--------------------------------------------------------------------
431     template < class HANDLER >
registerImplementation()432     void HandlerComponentBase< HANDLER >::registerImplementation()
433     {
434         PcrModule::getInstance().registerImplementation(
435             HANDLER::getImplementationName_static(),
436             HANDLER::getSupportedServiceNames_static(),
437             HANDLER::Create
438         );
439     }
440 
441 	//--------------------------------------------------------------------
442     template < class HANDLER >
Create(const::com::sun::star::uno::Reference<::com::sun::star::uno::XComponentContext> & _rxContext)443     ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > SAL_CALL HandlerComponentBase< HANDLER >::Create( const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& _rxContext )
444     {
445         return *( new HANDLER( _rxContext ) );
446     }
447 
448 //........................................................................
449 } // namespace pcr
450 //........................................................................
451 
452 #endif // EXTENSIONS_SOURCE_PROPCTRLR_PROPERTYHANDLER_HXX
453 
454