19877b273SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
39877b273SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
49877b273SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
59877b273SAndrew Rist  * distributed with this work for additional information
69877b273SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
79877b273SAndrew Rist  * to you under the Apache License, Version 2.0 (the
89877b273SAndrew Rist  * "License"); you may not use this file except in compliance
99877b273SAndrew Rist  * with the License.  You may obtain a copy of the License at
109877b273SAndrew Rist  *
119877b273SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
129877b273SAndrew Rist  *
139877b273SAndrew Rist  * Unless required by applicable law or agreed to in writing,
149877b273SAndrew Rist  * software distributed under the License is distributed on an
159877b273SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
169877b273SAndrew Rist  * KIND, either express or implied.  See the License for the
179877b273SAndrew Rist  * specific language governing permissions and limitations
189877b273SAndrew Rist  * under the License.
199877b273SAndrew Rist  *
209877b273SAndrew Rist  *************************************************************/
219877b273SAndrew Rist 
229877b273SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef _COMPHELPER_PROPERTY_AGGREGATION_HXX_
25cdf0e10cSrcweir #define _COMPHELPER_PROPERTY_AGGREGATION_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir #include <com/sun/star/uno/XAggregation.hpp>
28cdf0e10cSrcweir #include <comphelper/propstate.hxx>
29cdf0e10cSrcweir #include "comphelper/comphelperdllapi.h"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <map>
32cdf0e10cSrcweir 
33cdf0e10cSrcweir //=========================================================================
34cdf0e10cSrcweir //= property helper classes
35cdf0e10cSrcweir //=========================================================================
36cdf0e10cSrcweir 
37cdf0e10cSrcweir //.........................................................................
38cdf0e10cSrcweir namespace comphelper
39cdf0e10cSrcweir {
40cdf0e10cSrcweir //.........................................................................
41cdf0e10cSrcweir 
42cdf0e10cSrcweir //==================================================================
43cdf0e10cSrcweir //= OPropertyAccessor
44cdf0e10cSrcweir //= internal helper class for OPropertyArrayAggregationHelper
45cdf0e10cSrcweir //==================================================================
46cdf0e10cSrcweir namespace internal
47cdf0e10cSrcweir {
48cdf0e10cSrcweir 	struct OPropertyAccessor
49cdf0e10cSrcweir 	{
50cdf0e10cSrcweir 		sal_Int32   nOriginalHandle;
51cdf0e10cSrcweir 		sal_Int32   nPos;
52cdf0e10cSrcweir 		sal_Bool    bAggregate;
53cdf0e10cSrcweir 
OPropertyAccessorcomphelper::internal::OPropertyAccessor54cdf0e10cSrcweir 		OPropertyAccessor(sal_Int32 _nOriginalHandle, sal_Int32 _nPos, sal_Bool _bAggregate)
55cdf0e10cSrcweir 			:nOriginalHandle(_nOriginalHandle) ,nPos(_nPos) ,bAggregate(_bAggregate) { }
OPropertyAccessorcomphelper::internal::OPropertyAccessor56cdf0e10cSrcweir 		OPropertyAccessor()
57cdf0e10cSrcweir 			:nOriginalHandle(-1) ,nPos(-1) ,bAggregate(sal_False) { }
58cdf0e10cSrcweir 
operator ==comphelper::internal::OPropertyAccessor59cdf0e10cSrcweir 		sal_Bool operator==(const OPropertyAccessor& rOb) const { return nPos == rOb.nPos; }
operator <comphelper::internal::OPropertyAccessor60cdf0e10cSrcweir 		sal_Bool operator <(const OPropertyAccessor& rOb) const { return nPos < rOb.nPos; }
61cdf0e10cSrcweir 	};
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 	typedef std::map< sal_Int32, OPropertyAccessor, ::std::less< sal_Int32 > >	PropertyAccessorMap;
64cdf0e10cSrcweir 	typedef PropertyAccessorMap::iterator			PropertyAccessorMapIterator;
65cdf0e10cSrcweir 	typedef PropertyAccessorMap::const_iterator		ConstPropertyAccessorMapIterator;
66cdf0e10cSrcweir }
67cdf0e10cSrcweir 
68cdf0e10cSrcweir //==================================================================
69cdf0e10cSrcweir /**
70cdf0e10cSrcweir  * used as callback for a OPropertyArrayAggregationHelper
71cdf0e10cSrcweir  */
72cdf0e10cSrcweir class IPropertyInfoService
73cdf0e10cSrcweir {
74cdf0e10cSrcweir public:
75*07a3d7f1SPedro Giffuni 	/**	get the preferred handle for the given property
76cdf0e10cSrcweir 		@param		_rName		the property name
77*07a3d7f1SPedro Giffuni 		@return					the handle the property should be referred by, or -1 if there are no
78cdf0e10cSrcweir 								preferences for the given property
79cdf0e10cSrcweir 	*/
80cdf0e10cSrcweir 	virtual	sal_Int32			getPreferedPropertyId(const ::rtl::OUString& _rName) = 0;
81cdf0e10cSrcweir };
82cdf0e10cSrcweir 
83cdf0e10cSrcweir /**
84cdf0e10cSrcweir  * used for implementing an cppu::IPropertyArrayHelper for classes
85cdf0e10cSrcweir  * aggregating property sets
86cdf0e10cSrcweir  */
87cdf0e10cSrcweir 
88cdf0e10cSrcweir #define DEFAULT_AGGREGATE_PROPERTY_ID	10000
89cdf0e10cSrcweir //------------------------------------------------------------------
90cdf0e10cSrcweir class COMPHELPER_DLLPUBLIC OPropertyArrayAggregationHelper: public ::cppu::IPropertyArrayHelper
91cdf0e10cSrcweir {
92cdf0e10cSrcweir 	friend class OPropertySetAggregationHelper;
93cdf0e10cSrcweir protected:
94cdf0e10cSrcweir 
95cdf0e10cSrcweir 	::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property>	m_aProperties;
96cdf0e10cSrcweir 	internal::PropertyAccessorMap			m_aPropertyAccessors;
97cdf0e10cSrcweir 
98cdf0e10cSrcweir public:
99cdf0e10cSrcweir 	/** construct the object.
100cdf0e10cSrcweir 		@param	_rProperties	the properties of the object doing the aggregation. These properties
101cdf0e10cSrcweir 								are used without any checks, so the caller has to ensure that the names and
102cdf0e10cSrcweir 								handles are valid.
103cdf0e10cSrcweir 		@param	_rAggProperties	the properties of the aggregate, usually got via an call to getProperties on the
104cdf0e10cSrcweir 								XPropertySetInfo of the aggregate.
105cdf0e10cSrcweir 								The names of the properties are used without any checks, so the caller has to ensure
106cdf0e10cSrcweir 								that there are no doubles.
107cdf0e10cSrcweir 								The handles are stored for later quick access, but the outside-handles the
108cdf0e10cSrcweir 								aggregate properties get depend from the following two parameters.
109cdf0e10cSrcweir 		@param	_pInfoService
110cdf0e10cSrcweir 								If not NULL, the object pointed to is used to calc handles which should be used
111*07a3d7f1SPedro Giffuni 								for referring the aggregate's properties from outside.
112cdf0e10cSrcweir 								If one of the properties returned from the info service conflict with other handles
113cdf0e10cSrcweir 								alread present (e.g. through _rProperties), the property is handled as if -1 was returned.
114cdf0e10cSrcweir 								If NULL (or, for a special property, a call to getPreferedPropertyId returns -1),
115*07a3d7f1SPedro Giffuni 								the aggregate property(ies) get a new handle which they can be referred by from outside.
116cdf0e10cSrcweir 		@param	_nFirstAggregateId
117cdf0e10cSrcweir 								if the object is about to create new handles for the aggregate properties, it uses
118cdf0e10cSrcweir 								id's ascending from this given id.
119cdf0e10cSrcweir 								No checks are made if the handle range determined by _nFirstAggregateId conflicts with other
120cdf0e10cSrcweir 								handles within _rProperties.
121cdf0e10cSrcweir 	*/
122cdf0e10cSrcweir 	OPropertyArrayAggregationHelper(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property>& _rProperties,
123cdf0e10cSrcweir 									const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property>& _rAggProperties,
124cdf0e10cSrcweir 									IPropertyInfoService* _pInfoService = NULL,
125cdf0e10cSrcweir 									sal_Int32 _nFirstAggregateId = DEFAULT_AGGREGATE_PROPERTY_ID);
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
129cdf0e10cSrcweir 	virtual sal_Bool SAL_CALL fillPropertyMembersByHandle( ::rtl::OUString* _pPropName, sal_Int16* _pAttributes,
130cdf0e10cSrcweir 											sal_Int32 _nHandle) ;
131cdf0e10cSrcweir 
132cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
133cdf0e10cSrcweir     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property> SAL_CALL getProperties();
134cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
135cdf0e10cSrcweir 	virtual ::com::sun::star::beans::Property SAL_CALL getPropertyByName(const ::rtl::OUString& _rPropertyName)
136cdf0e10cSrcweir 								throw(::com::sun::star::beans::UnknownPropertyException);
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
139cdf0e10cSrcweir 	virtual sal_Bool  SAL_CALL hasPropertyByName(const ::rtl::OUString& _rPropertyName) ;
140cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
141cdf0e10cSrcweir 	virtual sal_Int32 SAL_CALL getHandleByName(const ::rtl::OUString & _rPropertyName);
142cdf0e10cSrcweir 	/// inherited from IPropertyArrayHelper
143cdf0e10cSrcweir 	virtual sal_Int32 SAL_CALL fillHandles( /*out*/sal_Int32* _pHandles, const ::com::sun::star::uno::Sequence< ::rtl::OUString >& _rPropNames );
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	/** returns information about a property of the aggregate.
146*07a3d7f1SPedro Giffuni 		@param	_pPropName			points to a string to receive the property name. No name is returned if this is NULL.
147*07a3d7f1SPedro Giffuni 		@param	_pOriginalHandle	points to a sal_Int32 to receive the original property hande. No original handle is returned
148cdf0e10cSrcweir 									if this is NULL.
149cdf0e10cSrcweir 		@param	_nHandle			the handle of the property as got by, for instance, fillHandles
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 		@return	sal_True, if _nHandle marks an aggregate property, otherwise sal_False
152cdf0e10cSrcweir 	*/
153cdf0e10cSrcweir 	virtual sal_Bool SAL_CALL fillAggregatePropertyInfoByHandle(::rtl::OUString* _pPropName, sal_Int32* _pOriginalHandle,
154cdf0e10cSrcweir 												   sal_Int32 _nHandle) const;
155cdf0e10cSrcweir 
156cdf0e10cSrcweir     /** returns information about a property given by handle
157cdf0e10cSrcweir     */
158cdf0e10cSrcweir     sal_Bool getPropertyByHandle( sal_Int32 _nHandle, ::com::sun::star::beans::Property& _rProperty ) const;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir 
161cdf0e10cSrcweir 	enum PropertyOrigin
162cdf0e10cSrcweir 	{
163cdf0e10cSrcweir 		AGGREGATE_PROPERTY,
164cdf0e10cSrcweir 		DELEGATOR_PROPERTY,
165cdf0e10cSrcweir 		UNKNOWN_PROPERTY
166cdf0e10cSrcweir 	};
167cdf0e10cSrcweir 	/** prefer this one over the XPropertySetInfo of the aggregate!
168cdf0e10cSrcweir 
169cdf0e10cSrcweir 		<p>The reason is that OPropertyArrayAggregationHelper is the only instance which really knows
170cdf0e10cSrcweir 		which properties of the aggregate are to be exposed. <br/>
171cdf0e10cSrcweir 
172cdf0e10cSrcweir 		For instance, some derivee of OPropertySetAggregationHelper may decide to create an
173cdf0e10cSrcweir 		OPropertyArrayAggregationHelper which contains only a subset of the aggregate properties. This way,
174cdf0e10cSrcweir 		some of the aggregate properties may be hidded to the public.<br/>
175cdf0e10cSrcweir 
176cdf0e10cSrcweir 		When using the XPropertySetInfo of the aggregate set to determine the existence of a property, then this
177cdf0e10cSrcweir 		would return false positives.</p>
178cdf0e10cSrcweir 	*/
179cdf0e10cSrcweir 	PropertyOrigin	classifyProperty( const ::rtl::OUString& _rName );
180cdf0e10cSrcweir 
181cdf0e10cSrcweir protected:
182cdf0e10cSrcweir 	const ::com::sun::star::beans::Property* findPropertyByName(const ::rtl::OUString& _rName) const;
183cdf0e10cSrcweir };
184cdf0e10cSrcweir 
185cdf0e10cSrcweir //==================================================================
186cdf0e10cSrcweir namespace internal
187cdf0e10cSrcweir {
188cdf0e10cSrcweir     class PropertyForwarder;
189cdf0e10cSrcweir }
190cdf0e10cSrcweir 
191cdf0e10cSrcweir /**
192cdf0e10cSrcweir  * helper class for implementing the property-set-related interfaces
193cdf0e10cSrcweir  * for an object doin' aggregation
194cdf0e10cSrcweir  * supports at least XPropertySet and XMultiPropertySet
195cdf0e10cSrcweir  *
196cdf0e10cSrcweir  */
197cdf0e10cSrcweir class COMPHELPER_DLLPUBLIC OPropertySetAggregationHelper	:public OPropertyStateHelper
198cdf0e10cSrcweir 									,public ::com::sun::star::beans::XPropertiesChangeListener
199cdf0e10cSrcweir 									,public ::com::sun::star::beans::XVetoableChangeListener
200cdf0e10cSrcweir {
201cdf0e10cSrcweir     friend class internal::PropertyForwarder;
202cdf0e10cSrcweir 
203cdf0e10cSrcweir protected:
204cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyState>      m_xAggregateState;
205cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet>        m_xAggregateSet;
206cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet>   m_xAggregateMultiSet;
207cdf0e10cSrcweir     ::com::sun::star::uno::Reference< ::com::sun::star::beans::XFastPropertySet>    m_xAggregateFastSet;
208cdf0e10cSrcweir 
209cdf0e10cSrcweir     internal::PropertyForwarder*    m_pForwarder;
210cdf0e10cSrcweir 	sal_Bool                        m_bListening : 1;
211cdf0e10cSrcweir 
212cdf0e10cSrcweir public:
213cdf0e10cSrcweir 	OPropertySetAggregationHelper( ::cppu::OBroadcastHelper& rBHelper );
214cdf0e10cSrcweir 
215cdf0e10cSrcweir     virtual ::com::sun::star::uno::Any SAL_CALL queryInterface(const ::com::sun::star::uno::Type& aType) throw(::com::sun::star::uno::RuntimeException);
216cdf0e10cSrcweir 
217cdf0e10cSrcweir // XEventListener
218cdf0e10cSrcweir 	virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& Source) throw (::com::sun::star::uno::RuntimeException);
219cdf0e10cSrcweir 
220cdf0e10cSrcweir // XFastPropertySet
221cdf0e10cSrcweir     virtual void SAL_CALL setFastPropertyValue(sal_Int32 nHandle, const ::com::sun::star::uno::Any& aValue) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
222cdf0e10cSrcweir     virtual ::com::sun::star::uno::Any SAL_CALL getFastPropertyValue(sal_Int32 nHandle) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
223cdf0e10cSrcweir 
224cdf0e10cSrcweir // XPropertySet
225cdf0e10cSrcweir 	virtual void SAL_CALL			addPropertyChangeListener(const ::rtl::OUString& aPropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertyChangeListener >& xListener) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
226cdf0e10cSrcweir 	virtual void SAL_CALL			addVetoableChangeListener(const ::rtl::OUString& PropertyName, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XVetoableChangeListener >& aListener) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
227cdf0e10cSrcweir 
228cdf0e10cSrcweir // XPropertiesChangeListener
229cdf0e10cSrcweir 	virtual void SAL_CALL propertiesChange(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyChangeEvent >& evt) throw(::com::sun::star::uno::RuntimeException);
230cdf0e10cSrcweir 
231cdf0e10cSrcweir // XVetoableChangeListener
232cdf0e10cSrcweir 	virtual void SAL_CALL vetoableChange(const ::com::sun::star::beans::PropertyChangeEvent& aEvent) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::uno::RuntimeException);
233cdf0e10cSrcweir 
234cdf0e10cSrcweir // XMultiPropertySet
235cdf0e10cSrcweir 	virtual void SAL_CALL	setPropertyValues(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& PropertyNames, const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any >& Values) throw(::com::sun::star::beans::PropertyVetoException, ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
236cdf0e10cSrcweir 	virtual void SAL_CALL	addPropertiesChangeListener(const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames, const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertiesChangeListener >& xListener) throw(::com::sun::star::uno::RuntimeException);
237cdf0e10cSrcweir 
238cdf0e10cSrcweir // XPropertyState
239cdf0e10cSrcweir 	virtual ::com::sun::star::beans::PropertyState SAL_CALL	getPropertyState(const ::rtl::OUString& PropertyName) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
240cdf0e10cSrcweir     virtual void SAL_CALL                                   setPropertyToDefault(const ::rtl::OUString& PropertyName) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException);
241cdf0e10cSrcweir 	virtual ::com::sun::star::uno::Any SAL_CALL				getPropertyDefault(const ::rtl::OUString& aPropertyName) throw(::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException);
242cdf0e10cSrcweir 
243cdf0e10cSrcweir // OPropertySetHelper
244cdf0e10cSrcweir 	/** still waiting to be overwritten ...
245cdf0e10cSrcweir 		you <B>must<B/> use an OPropertyArrayAggregationHelper here, as the implementation strongly relies on this.
246cdf0e10cSrcweir 	*/
247cdf0e10cSrcweir 	virtual ::cppu::IPropertyArrayHelper& SAL_CALL getInfoHelper() = 0;
248cdf0e10cSrcweir 
249cdf0e10cSrcweir     /** only implemented for "forwarded" properties, every other property must be handled
250cdf0e10cSrcweir         in the derivee, and will assert if passed herein
251cdf0e10cSrcweir     */
252cdf0e10cSrcweir 	virtual sal_Bool SAL_CALL convertFastPropertyValue( ::com::sun::star::uno::Any& _rConvertedValue, ::com::sun::star::uno::Any& _rOldValue, sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw(::com::sun::star::lang::IllegalArgumentException);
253cdf0e10cSrcweir 
254cdf0e10cSrcweir     /** only implemented for "forwarded" properties, every other property must be handled
255cdf0e10cSrcweir         in the derivee, and will assert if passed herein
256cdf0e10cSrcweir     */
257cdf0e10cSrcweir 	virtual void SAL_CALL setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) throw ( ::com::sun::star::uno::Exception );
258cdf0e10cSrcweir 
259cdf0e10cSrcweir protected:
260cdf0e10cSrcweir 	~OPropertySetAggregationHelper();
261cdf0e10cSrcweir 
262cdf0e10cSrcweir 	virtual void SAL_CALL getFastPropertyValue(::com::sun::star::uno::Any& rValue, sal_Int32 nHandle) const;
263cdf0e10cSrcweir 	virtual void SAL_CALL disposing();
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 	sal_Int32	    getOriginalHandle( sal_Int32 _nHandle ) const;
266cdf0e10cSrcweir     ::rtl::OUString getPropertyName( sal_Int32 _nHandle ) const;
267cdf0e10cSrcweir 
268cdf0e10cSrcweir     /** declares the property with the given (public) handle as one to be forwarded to the aggregate
269cdf0e10cSrcweir 
270cdf0e10cSrcweir         Sometimes, you might want to <em>overwrite</em> properties at the aggregate. That is,
271cdf0e10cSrcweir         though the aggregate implements this property, and still is to hold the property value,
272cdf0e10cSrcweir         you want to do additional handling upon setting the property, but then forward the value
273cdf0e10cSrcweir         to the aggregate.
274cdf0e10cSrcweir 
275cdf0e10cSrcweir         Use this method to declare such properties.
276cdf0e10cSrcweir 
277cdf0e10cSrcweir         When a "forwarded property" is set from outside, the class first calls
278cdf0e10cSrcweir         <member>forwardingPropertyValue</member> for any preprocessing, then forwards the property
279cdf0e10cSrcweir         value to the aggregate, and then calls <member>forwardedPropertyValue</member>.
280cdf0e10cSrcweir 
281cdf0e10cSrcweir         When you declare a property as "forwarded", the class takes care for some multi-threading
282cdf0e10cSrcweir         issues, for instance, it won't fire any property change notifications which result from
283cdf0e10cSrcweir         forwarding a property value, unless it's safe to do so (i.e. unless our mutex is
284cdf0e10cSrcweir         released).
285cdf0e10cSrcweir 
286cdf0e10cSrcweir         @see forwardingPropertyValue
287cdf0e10cSrcweir         @see forwardedPropertyValue
288cdf0e10cSrcweir     */
289cdf0e10cSrcweir     void declareForwardedProperty( sal_Int32 _nHandle );
290cdf0e10cSrcweir 
291cdf0e10cSrcweir     /** checks whether we're actually forwarding a property value to our aggregate
292cdf0e10cSrcweir 
293cdf0e10cSrcweir         @see declareForwardedProperty
294cdf0e10cSrcweir         @see forwardingPropertyValue
295cdf0e10cSrcweir         @see forwardedPropertyValue
296cdf0e10cSrcweir     */
297cdf0e10cSrcweir     bool    isCurrentlyForwardingProperty( sal_Int32 _nHandle ) const;
298cdf0e10cSrcweir 
299cdf0e10cSrcweir     /** called immediately before a property value which is overwritten in this instance
300cdf0e10cSrcweir         is forwarded to the aggregate
301cdf0e10cSrcweir 
302cdf0e10cSrcweir         @see declareForwardedProperty
303cdf0e10cSrcweir         @see forwardedPropertyValue
304cdf0e10cSrcweir     */
305cdf0e10cSrcweir     virtual void SAL_CALL forwardingPropertyValue( sal_Int32 _nHandle );
306cdf0e10cSrcweir 
307cdf0e10cSrcweir     /** called immediately after a property value which is overwritten in this instance
308cdf0e10cSrcweir         has been forwarded to the aggregate
309cdf0e10cSrcweir 
310cdf0e10cSrcweir         @see declareForwardedProperty
311cdf0e10cSrcweir         @see forwardingPropertyValue
312cdf0e10cSrcweir     */
313cdf0e10cSrcweir     virtual void SAL_CALL forwardedPropertyValue( sal_Int32 _nHandle, bool _bSuccess );
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 	/// must be called before aggregation, if aggregation is used
316cdf0e10cSrcweir 	void setAggregation(const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >&) throw( ::com::sun::star::lang::IllegalArgumentException );
317cdf0e10cSrcweir 	void startListening();
318cdf0e10cSrcweir };
319cdf0e10cSrcweir 
320cdf0e10cSrcweir //.........................................................................
321cdf0e10cSrcweir }	// namespace comphelper
322cdf0e10cSrcweir //.........................................................................
323cdf0e10cSrcweir 
324cdf0e10cSrcweir #endif // _COMPHELPER_PROPERTY_AGGREGATION_HXX_
325cdf0e10cSrcweir 
326