diff options
Diffstat (limited to 'chart2/source/inc/OPropertySet.hxx')
-rw-r--r-- | chart2/source/inc/OPropertySet.hxx | 86 |
1 files changed, 59 insertions, 27 deletions
diff --git a/chart2/source/inc/OPropertySet.hxx b/chart2/source/inc/OPropertySet.hxx index aa0bf918c42c..0dd19a236e8a 100644 --- a/chart2/source/inc/OPropertySet.hxx +++ b/chart2/source/inc/OPropertySet.hxx @@ -18,7 +18,10 @@ */ #pragma once + +#include <config_options.h> // helper classes +#include <cppuhelper/basemutex.hxx> #include <cppuhelper/propshlp.hxx> // interfaces and types @@ -26,16 +29,15 @@ #include <com/sun/star/beans/XPropertyState.hpp> #include <com/sun/star/beans/XMultiPropertyStates.hpp> #include <com/sun/star/style/XStyleSupplier.hpp> +#include "charttoolsdllapi.hxx" -#include <memory> +#include <unordered_map> namespace property { -namespace impl -{ class ImplOPropertySet; } - -class OPropertySet : +class UNLESS_MERGELIBS(OOO_DLLPUBLIC_CHARTTOOLS) OPropertySet : + protected cppu::BaseMutex, public ::cppu::OBroadcastHelper, // includes beans::XPropertySet, XMultiPropertySet and XFastPropertySet public ::cppu::OPropertySetHelper, @@ -47,22 +49,25 @@ class OPropertySet : public css::style::XStyleSupplier { public: - OPropertySet( ::osl::Mutex & rMutex ); + OPropertySet(); virtual ~OPropertySet(); protected: - explicit OPropertySet( const OPropertySet & rOther, ::osl::Mutex & rMutex ); + explicit OPropertySet( const OPropertySet & rOther ); void SetNewValuesExplicitlyEvenIfTheyEqualDefault(); /** implement this method to provide default values for all properties supporting defaults. If a property does not have a default value, you may throw an UnknownPropertyException. + We pass the any by reference because this code is very hot and doing + it this way is cheaper than the two step process of constructing a new + any and then assigning to via a return value. @throws css::beans::UnknownPropertyException @throws css::uno::RuntimeException */ - virtual css::uno::Any GetDefaultValue( sal_Int32 nHandle ) const = 0; + virtual void GetDefaultValue( sal_Int32 nHandle, css::uno::Any& rAny ) const = 0; /** The InfoHelper table contains all property names and types of this object. @@ -102,7 +107,7 @@ protected: ( css::uno::Any & rConvertedValue, css::uno::Any & rOldValue, sal_Int32 nHandle, - const css::uno::Any& rValue ) override; + const css::uno::Any& rValue ) override final; /** The same as setFastPropertyValue; nHandle is always valid. The changes must not be broadcasted in this method. @@ -135,14 +140,15 @@ protected: ( css::uno::Any& rValue, sal_Int32 nHandle ) const override; - /// make original interface function visible again - using ::com::sun::star::beans::XFastPropertySet::getFastPropertyValue; - /** implement this method in derived classes to get called when properties change. */ virtual void firePropertyChangeEvent(); +public: + /// make original interface function visible again + using ::cppu::OPropertySetHelper::getFastPropertyValue; + // Interfaces // ____ XInterface ____ @@ -156,46 +162,72 @@ protected: // ____ XPropertyState ____ virtual css::beans::PropertyState SAL_CALL - getPropertyState( const OUString& PropertyName ) override; + getPropertyState( const OUString& PropertyName ) override final; virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL - getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) override; + getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName ) override final; virtual void SAL_CALL - setPropertyToDefault( const OUString& PropertyName ) override; + setPropertyToDefault( const OUString& PropertyName ) override final; virtual css::uno::Any SAL_CALL - getPropertyDefault( const OUString& aPropertyName ) override; + getPropertyDefault( const OUString& aPropertyName ) override final; // ____ XMultiPropertyStates ____ // Note: getPropertyStates() is already implemented in XPropertyState with the // same signature virtual void SAL_CALL - setAllPropertiesToDefault() override; + setAllPropertiesToDefault() override final; virtual void SAL_CALL - setPropertiesToDefault( const css::uno::Sequence< OUString >& aPropertyNames ) override; + setPropertiesToDefault( const css::uno::Sequence< OUString >& aPropertyNames ) override final; virtual css::uno::Sequence< css::uno::Any > SAL_CALL - getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override; + getPropertyDefaults( const css::uno::Sequence< OUString >& aPropertyNames ) override final; // ____ XStyleSupplier ____ - virtual css::uno::Reference< css::style::XStyle > SAL_CALL getStyle() override; - virtual void SAL_CALL setStyle( const css::uno::Reference< css::style::XStyle >& xStyle ) override; + virtual css::uno::Reference< css::style::XStyle > SAL_CALL getStyle() override final; + virtual void SAL_CALL setStyle( const css::uno::Reference< css::style::XStyle >& xStyle ) override final; // ____ XMultiPropertySet ____ virtual void SAL_CALL setPropertyValues( const css::uno::Sequence< OUString >& PropertyNames, - const css::uno::Sequence< css::uno::Any >& Values ) override; + const css::uno::Sequence< css::uno::Any >& Values ) override final; // ____ XFastPropertySet ____ - virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const css::uno::Any& rValue ) override; + virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const css::uno::Any& rValue ) override final; // Note: it is assumed that the base class implements setPropertyValue by // using setFastPropertyValue private: - /// reference to mutex of class deriving from here - ::osl::Mutex & m_rMutex; + /** supports states DIRECT_VALUE and DEFAULT_VALUE + */ + css::beans::PropertyState + GetPropertyStateByHandle( sal_Int32 nHandle ) const; + + css::uno::Sequence< css::beans::PropertyState > + GetPropertyStatesByHandle( const std::vector< sal_Int32 > & aHandles ) const; + + void SetPropertyToDefault( sal_Int32 nHandle ); + void SetPropertiesToDefault( const std::vector< sal_Int32 > & aHandles ); + void SetAllPropertiesToDefault(); + + /** @param rValue is set to the value for the property given in nHandle. If + the property is not set, the style chain is searched for any + instance set there. If there was no value found either in the + property set itself or any of its styles, rValue remains + unchanged and false is returned. + + @return false if the property is default, true otherwise. + */ + bool GetPropertyValueByHandle( + css::uno::Any & rValue, + sal_Int32 nHandle ) const; + + void SetPropertyValueByHandle( sal_Int32 nHandle, + const css::uno::Any & rValue ); + + bool SetStyle( const css::uno::Reference< css::style::XStyle > & xStyle ); - /// pImpl idiom implementation - std::unique_ptr< impl::ImplOPropertySet > m_pImplProperties; bool m_bSetNewValuesExplicitlyEvenIfTheyEqualDefault; + std::unordered_map< sal_Int32, css::uno::Any > m_aProperties; + css::uno::Reference< css::style::XStyle > m_xStyle; }; } // namespace property |