/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef CHART_OPROPERTYSET_HXX #define CHART_OPROPERTYSET_HXX // helper classes #include #include #include // interfaces and types #include #include #include #include #include #include #include "charttoolsdllapi.hxx" #include namespace property { namespace impl { class ImplOPropertySet; } class OOO_DLLPUBLIC_CHARTTOOLS OPropertySet : public ::cppu::OBroadcastHelper, // includes beans::XPropertySet, XMultiPropertySet and XFastPropertySet public ::cppu::OPropertySetHelper, // includes uno::XWeak (and XInterface, esp. ref-counting) public ::com::sun::star::lang::XTypeProvider, public ::com::sun::star::beans::XPropertyState, public ::com::sun::star::beans::XMultiPropertyStates, public ::com::sun::star::style::XStyleSupplier { public: OPropertySet( ::osl::Mutex & rMutex ); virtual ~OPropertySet(); protected: explicit OPropertySet( const OPropertySet & rOther, ::osl::Mutex & rMutex ); 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. */ virtual ::com::sun::star::uno::Any GetDefaultValue( sal_Int32 nHandle ) const throw(::com::sun::star::beans::UnknownPropertyException) = 0; /** The InfoHelper table contains all property names and types of this object. @return the object that provides information for the PropertySetInfo @see ::cppu::OPropertySetHelper */ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() = 0; /** Try to convert the value rValue to the type required by the property associated with nHandle. Overload this method to take influence in modification of properties. If the conversion changed , is returned and the converted value is in rConvertedValue. The former value is contained in rOldValue. After this call returns successfully, the vetoable listeners are notified. @throws IllegalArgumentException, if the conversion was not successful, or if there is no corresponding property to the given handle. @param rConvertedValue the converted value. Only set if return is true. @param rOldValue the old value. Only set if return is true. @param nHandle the handle of the property. @return true, if the conversion was successful and converted value differs from the old value. @see ::cppu::OPropertySetHelper */ 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); /** The same as setFastProperyValue; nHandle is always valid. The changes must not be broadcasted in this method. @attention Although you are permitted to throw any UNO exception, only the following are valid for usage: -- ::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 @param nHandle handle @param rValue value @see ::cppu::OPropertySetHelper */ virtual void SAL_CALL setFastPropertyValue_NoBroadcast ( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) throw (::com::sun::star::uno::Exception); /** The same as getFastProperyValue, but return the value through rValue and nHandle is always valid. @see ::cppu::OPropertySetHelper */ virtual void SAL_CALL getFastPropertyValue ( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const; /// 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(); /// call this when a derived component is disposed virtual void disposePropertySet(); // ======================================== // Interfaces // ======================================== // ____ XInterface ____ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException); // ____ XTypeProvider ____ virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException); // ____ XPropertyState ____ virtual ::com::sun::star::beans::PropertyState SAL_CALL getPropertyState( const ::rtl::OUString& PropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyState > SAL_CALL getPropertyStates( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setPropertyToDefault( const ::rtl::OUString& PropertyName ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); 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); // ____ XMultiPropertyStates ____ // Note: getPropertyStates() is already implemented in XPropertyState with the // same signature virtual void SAL_CALL setAllPropertiesToDefault() throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setPropertiesToDefault( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::uno::RuntimeException); virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > SAL_CALL getPropertyDefaults( const ::com::sun::star::uno::Sequence< ::rtl::OUString >& aPropertyNames ) throw (::com::sun::star::beans::UnknownPropertyException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); // ____ XStyleSupplier ____ virtual ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle > SAL_CALL getStyle() throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setStyle( const ::com::sun::star::uno::Reference< ::com::sun::star::style::XStyle >& xStyle ) throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); // ____ XMultiPropertySet ____ 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); // ____ XFastPropertySet ____ virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const ::com::sun::star::uno::Any& rValue ) 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); // 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; /// pImpl idiom implementation ::std::auto_ptr< impl::ImplOPropertySet > m_pImplProperties; bool m_bSetNewValuesExplicitlyEvenIfTheyEqualDefault; }; } // namespace property // CHART_OPROPERTYSET_HXX #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */