/* This file is part of the KDE project Copyright (C) 2004 Cedric Pasteur This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifndef KPROPERTY_CUSTOMPROPERTY_H #define KPROPERTY_CUSTOMPROPERTY_H #include "koproperty_global.h" class TQVariant; namespace KoProperty { class Property; //! \brief Base class for custom properties /*! You will need to subclass CustomProperty to override the behaviour of a property type.\n In the constructor, you should create the child properties (if needed). Then, you need to implement the functions concerning values.\n Examples of custom properties implementation can be found in customproperty.cpp. \author Cedric Pasteur */ class KOPROPERTY_EXPORT CustomProperty { public: CustomProperty(Property *tqparent); virtual ~CustomProperty(); /*! This function is called by \ref Property::setValue() when a custom property is set. You don't have to modify the property value, it is done by Property class. You just have to update child or tqparent properties value (m_property->tqparent()->setValue()). Note that, when calling Property::setValue, you need to set useCustomProperty (3rd parameter) to false, or there will be infinite recursion. */ virtual void setValue(const TQVariant &value, bool rememberOldValue) = 0; /*! This function is called by \ref Property::value() when a custom property is set and \ref handleValue() is true. You should return property's value, taken from tqparent's value.*/ virtual TQVariant value() const = 0; /*! Tells whether CustomProperty should be used to get the property's value. CustomProperty::setValue() will always be called. But if hadleValue() == true, then the value stored in the Property won't be changed. You should return true for child properties, and false for others. */ virtual bool handleValue() const { return false; } protected: Property *m_property; /*! This method emits the \a Set::propertyChanged() signal for all sets our tqparent-property is registered in. */ void emitPropertyChanged(); }; //! \brief Custom property implementation for TQSize type class KOPROPERTY_EXPORT SizeCustomProperty : public CustomProperty { public: SizeCustomProperty(Property *tqparent); ~SizeCustomProperty(); void setValue(const TQVariant &value, bool rememberOldValue); TQVariant value() const; bool handleValue() const; }; //! \brief Custom property implementation for TQPoint type class KOPROPERTY_EXPORT PointCustomProperty : public CustomProperty { public: PointCustomProperty(Property *tqparent); ~PointCustomProperty(); void setValue(const TQVariant &value, bool rememberOldValue); TQVariant value() const; bool handleValue() const; }; //! \brief Custom property implementation for TQRect type class KOPROPERTY_EXPORT RectCustomProperty : public CustomProperty { public: RectCustomProperty(Property *tqparent); ~RectCustomProperty(); void setValue(const TQVariant &value, bool rememberOldValue); TQVariant value() const; bool handleValue() const; }; //! \brief Custom property implementation for TQSizePolicy type class KOPROPERTY_EXPORT SizePolicyCustomProperty : public CustomProperty { public: SizePolicyCustomProperty(Property *tqparent); ~SizePolicyCustomProperty(); void setValue(const TQVariant &value, bool rememberOldValue); TQVariant value() const; bool handleValue() const; }; } #endif