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