1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef FORMS_PROPERTYBAGHELPER_HXX 25*b1cdbd2cSJim Jagielski #define FORMS_PROPERTYBAGHELPER_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 28*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp> 29*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 30*b1cdbd2cSJim Jagielski 31*b1cdbd2cSJim Jagielski #include <comphelper/propertybag.hxx> 32*b1cdbd2cSJim Jagielski #include <comphelper/propagg.hxx> 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski #include <boost/noncopyable.hpp> 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski //........................................................................ 37*b1cdbd2cSJim Jagielski namespace frm 38*b1cdbd2cSJim Jagielski { 39*b1cdbd2cSJim Jagielski //........................................................................ 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //==================================================================== 42*b1cdbd2cSJim Jagielski //= class IPropertyBagHelperContext 43*b1cdbd2cSJim Jagielski //==================================================================== 44*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE IPropertyBagHelperContext 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski public: 47*b1cdbd2cSJim Jagielski virtual ::osl::Mutex& getMutex() = 0; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski virtual void describeFixedAndAggregateProperties( 50*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rFixedProperties, 51*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::beans::Property >& _out_rAggregateProperties 52*b1cdbd2cSJim Jagielski ) const = 0; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XMultiPropertySet > 55*b1cdbd2cSJim Jagielski getPropertiesInterface() = 0; 56*b1cdbd2cSJim Jagielski }; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski //==================================================================== 59*b1cdbd2cSJim Jagielski //= class PropertyBagHelper 60*b1cdbd2cSJim Jagielski //==================================================================== 61*b1cdbd2cSJim Jagielski class PropertyBagHelper : public ::boost::noncopyable 62*b1cdbd2cSJim Jagielski { 63*b1cdbd2cSJim Jagielski private: 64*b1cdbd2cSJim Jagielski IPropertyBagHelperContext& m_rContext; 65*b1cdbd2cSJim Jagielski ::comphelper::OPropertyArrayAggregationHelper* m_pPropertyArrayHelper; 66*b1cdbd2cSJim Jagielski ::comphelper::PropertyBag m_aDynamicProperties; 67*b1cdbd2cSJim Jagielski bool m_bDisposed; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski public: 70*b1cdbd2cSJim Jagielski PropertyBagHelper( IPropertyBagHelperContext& _rContext ); 71*b1cdbd2cSJim Jagielski ~PropertyBagHelper(); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski // XComponent equivalent 74*b1cdbd2cSJim Jagielski void dispose(); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski // OPropertySetHelper equivalent 77*b1cdbd2cSJim Jagielski inline ::comphelper::OPropertyArrayAggregationHelper& getInfoHelper() const; 78*b1cdbd2cSJim Jagielski 79*b1cdbd2cSJim Jagielski // XPropertyContainer equivalent 80*b1cdbd2cSJim Jagielski void addProperty( const ::rtl::OUString& _rName, ::sal_Int16 _nAttributes, const ::com::sun::star::uno::Any& _rInitialValue ); 81*b1cdbd2cSJim Jagielski void removeProperty( const ::rtl::OUString& _rName ); 82*b1cdbd2cSJim Jagielski 83*b1cdbd2cSJim Jagielski // XPropertyAccess equivalent 84*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > SAL_CALL getPropertyValues(); 85*b1cdbd2cSJim Jagielski void setPropertyValues( const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& _rProps ); 86*b1cdbd2cSJim Jagielski 87*b1cdbd2cSJim Jagielski // forwards to m_aDynamicProperties 88*b1cdbd2cSJim Jagielski inline void getDynamicFastPropertyValue( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const; 89*b1cdbd2cSJim Jagielski inline bool convertDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::com::sun::star::uno::Any& _out_rConvertedValue, ::com::sun::star::uno::Any& _out_rCurrentValue ) const; 90*b1cdbd2cSJim Jagielski inline void setDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ); 91*b1cdbd2cSJim Jagielski inline void getDynamicPropertyDefaultByHandle( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const; 92*b1cdbd2cSJim Jagielski inline bool hasDynamicPropertyByName( const ::rtl::OUString& _rName ) const; 93*b1cdbd2cSJim Jagielski inline bool hasDynamicPropertyByHandle( sal_Int32 _nHandle ) const; 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski private: 96*b1cdbd2cSJim Jagielski void impl_nts_checkDisposed_throw() const; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski /** invalidates our property set info, so subsequent calls to impl_ts_getArrayHelper and thus 99*b1cdbd2cSJim Jagielski getInfoHelper will return a newly created instance 100*b1cdbd2cSJim Jagielski */ 101*b1cdbd2cSJim Jagielski void impl_nts_invalidatePropertySetInfo(); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski /** returns the IPropertyArrayHelper instance used by |this| 104*b1cdbd2cSJim Jagielski */ 105*b1cdbd2cSJim Jagielski ::comphelper::OPropertyArrayAggregationHelper& impl_ts_getArrayHelper() const; 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski /** finds a free property handle 108*b1cdbd2cSJim Jagielski @param _rPropertyName 109*b1cdbd2cSJim Jagielski the name of the property to find a handle for. If possible, the handle as determined by 110*b1cdbd2cSJim Jagielski our ConcreteInfoService instance will be used 111*b1cdbd2cSJim Jagielski */ 112*b1cdbd2cSJim Jagielski sal_Int32 impl_findFreeHandle( const ::rtl::OUString& _rPropertyName ); 113*b1cdbd2cSJim Jagielski }; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getInfoHelper() const116*b1cdbd2cSJim Jagielski inline ::comphelper::OPropertyArrayAggregationHelper& PropertyBagHelper::getInfoHelper() const 117*b1cdbd2cSJim Jagielski { 118*b1cdbd2cSJim Jagielski return impl_ts_getArrayHelper(); 119*b1cdbd2cSJim Jagielski } 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getDynamicFastPropertyValue(sal_Int32 _nHandle,::com::sun::star::uno::Any & _out_rValue) const122*b1cdbd2cSJim Jagielski inline void PropertyBagHelper::getDynamicFastPropertyValue( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const 123*b1cdbd2cSJim Jagielski { 124*b1cdbd2cSJim Jagielski m_aDynamicProperties.getFastPropertyValue( _nHandle, _out_rValue ); 125*b1cdbd2cSJim Jagielski } 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- convertDynamicFastPropertyValue(sal_Int32 _nHandle,const::com::sun::star::uno::Any & _rNewValue,::com::sun::star::uno::Any & _out_rConvertedValue,::com::sun::star::uno::Any & _out_rCurrentValue) const128*b1cdbd2cSJim Jagielski inline bool PropertyBagHelper::convertDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rNewValue, ::com::sun::star::uno::Any& _out_rConvertedValue, ::com::sun::star::uno::Any& _out_rCurrentValue ) const 129*b1cdbd2cSJim Jagielski { 130*b1cdbd2cSJim Jagielski return m_aDynamicProperties.convertFastPropertyValue( _nHandle, _rNewValue, _out_rConvertedValue, _out_rCurrentValue ); 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- setDynamicFastPropertyValue(sal_Int32 _nHandle,const::com::sun::star::uno::Any & _rValue)134*b1cdbd2cSJim Jagielski inline void PropertyBagHelper::setDynamicFastPropertyValue( sal_Int32 _nHandle, const ::com::sun::star::uno::Any& _rValue ) 135*b1cdbd2cSJim Jagielski { 136*b1cdbd2cSJim Jagielski m_aDynamicProperties.setFastPropertyValue( _nHandle, _rValue ); 137*b1cdbd2cSJim Jagielski } 138*b1cdbd2cSJim Jagielski 139*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- getDynamicPropertyDefaultByHandle(sal_Int32 _nHandle,::com::sun::star::uno::Any & _out_rValue) const140*b1cdbd2cSJim Jagielski inline void PropertyBagHelper::getDynamicPropertyDefaultByHandle( sal_Int32 _nHandle, ::com::sun::star::uno::Any& _out_rValue ) const 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski m_aDynamicProperties.getPropertyDefaultByHandle( _nHandle, _out_rValue ); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- hasDynamicPropertyByName(const::rtl::OUString & _rName) const146*b1cdbd2cSJim Jagielski inline bool PropertyBagHelper::hasDynamicPropertyByName( const ::rtl::OUString& _rName ) const 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski return m_aDynamicProperties.hasPropertyByName( _rName ); 149*b1cdbd2cSJim Jagielski } 150*b1cdbd2cSJim Jagielski 151*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------- hasDynamicPropertyByHandle(sal_Int32 _nHandle) const152*b1cdbd2cSJim Jagielski inline bool PropertyBagHelper::hasDynamicPropertyByHandle( sal_Int32 _nHandle ) const 153*b1cdbd2cSJim Jagielski { 154*b1cdbd2cSJim Jagielski return m_aDynamicProperties.hasPropertyByHandle( _nHandle ); 155*b1cdbd2cSJim Jagielski } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski //........................................................................ 158*b1cdbd2cSJim Jagielski } // namespace frm 159*b1cdbd2cSJim Jagielski //........................................................................ 160*b1cdbd2cSJim Jagielski 161*b1cdbd2cSJim Jagielski #endif // FORMS_PROPERTYBAGHELPER_HXX 162*b1cdbd2cSJim Jagielski 163