You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
koffice/kexi/plugins/macros/kexipart/keximacroproperty.h

189 lines
6.4 KiB

/* This file is part of the KDE project
Copyright (C) 2006 Sebastian Sauer <mail@dipe.org>
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 KEXIMACROPROPERTY_H
#define KEXIMACROPROPERTY_H
#include <ksharedptr.h>
#include <koproperty/property.h>
#include <koproperty/factory.h>
#include <koproperty/customproperty.h>
#include <koproperty/widget.h>
namespace KoMacro {
class Variable;
class MacroItem;
}
class KexiMacroPropertyWidget;
/**
* Implementation of a @a KoProperty::CustomProperty to have
* more control about the handling of our macro-properties.
*/
class KexiMacroProperty
: public TQObject
, public KoProperty::CustomProperty
{
TQ_OBJECT
friend class KexiMacroPropertyWidget;
public:
/** Constructor. */
explicit KexiMacroProperty(KoProperty::Property* parent, TDESharedPtr<KoMacro::MacroItem> macroitem, const TQString& name);
/** Destructor. */
virtual ~KexiMacroProperty();
/** @return the parent @a KoProperty::Property instance. */
KoProperty::Property* parentProperty() const;
/** This function is called by @ref KoProperty::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 parent properties value (m_property->parent()->setValue()).
Note that, when calling Property::setValue, you <b>need</b> to set
useCustomProperty (3rd parameter) to false, or there will be infinite recursion. */
virtual void setValue(const TQVariant &value, bool rememberOldValue);
/** This function is called by @ref KoProperty::Property::value()
when a custom property is set and @ref handleValue() is true.
You should return property's value, taken from parent's value.*/
virtual TQVariant value() const;
/** Tells whether CustomProperty should be used to get the property's value.
You should return true for child properties, and false for others. */
virtual bool handleValue() const;
/** \return the \a KoMacro::MacroItem this custom property has or
NULL if there was no item provided. */
TDESharedPtr<KoMacro::MacroItem> macroItem() const;
/** \return the name the property has in the \a KoMacro::MacroItem
above. Is TQString() if there was no item provided. */
TQString name() const;
/** \return the \a KoMacro::Variable which has the name @a name()
in the item @a macroItem() . If such a variable doesn't exists NULL
is returned. */
TDESharedPtr<KoMacro::Variable> variable() const;
/** Factory function to create a new @a KoProperty::Property instance
that will use a @a KexiMacroProperty as container. */
static KoProperty::Property* createProperty(TDESharedPtr<KoMacro::MacroItem> macroitem, const TQString& name);
signals:
/** Emitted if @a setValue was called and the value changed. */
void valueChanged();
private:
/** \internal d-pointer class. */
class Private;
/** \internal d-pointer instance. */
Private* const d;
/** \internal initializer method. */
inline void init();
};
/**
* Implementation of a @a KoProperty::CustomPropertyFactory to handle
* creation of @a KexiMacroProperty and @a KexiMacroPropertyWidget
* instances for our macro-properties.
*/
class KexiMacroPropertyFactory : public KoProperty::CustomPropertyFactory
{
public:
/** Constructor. */
explicit KexiMacroPropertyFactory(TQObject* parent);
/** Destructor. */
virtual ~KexiMacroPropertyFactory();
/** @return a new instance of custom property for @p parent.
Implement this for property types you want to support.
Use parent->type() to get type of the property. */
virtual KoProperty::CustomProperty* createCustomProperty(KoProperty::Property* parent);
/** @return a new instance of custom property for @p property.
Implement this for property editor types you want to support.
Use parent->type() to get type of the property. */
virtual KoProperty::Widget* createCustomWidget(KoProperty::Property* property);
/** Initializes this factory. The factory may register itself at
the @a KoProperty::FactoryManager if not alreadydone before. This
function should be called from within the @a KexiMacroDesignView
before the functionality provided with @a KexiMacroProperty and
@a KexiMacroPropertyWidget got used. */
static void initFactory();
};
/**
* Implementation of a @a KoProperty::Widget used to display and
* edit a @a KexiMacroProperty .
*/
class KexiMacroPropertyWidget : public KoProperty::Widget
{
TQ_OBJECT
public:
/** Constructor. */
explicit KexiMacroPropertyWidget(KoProperty::Property* property, TQWidget* parent = 0);
/** Destructor. */
virtual ~KexiMacroPropertyWidget();
/** @return the value this widget has. */
virtual TQVariant value() const;
/** Set the value @p value this widget has. If @p emitChange is true,
the @p KoProperty::Widget::valueChanged signal will be emitted. */
virtual void setValue(const TQVariant& value, bool emitChange=true);
//virtual void drawViewer(TQPainter *p, const TQColorGroup &cg, const TQRect &r, const TQVariant &value);
protected:
/** Called if the value should be read only. */
virtual void setReadOnlyInternal(bool readOnly);
private slots:
/** Called if the text in the KComboBox changed. */
void slotComboBoxChanged();
/** Called if an item in the TQListBox of the KComboBox got activated. */
void slotComboBoxActivated();
/** Called if the @a KoProperty::Widget of the EditListBoxItem got changed. */
void slotWidgetValueChanged();
/** Called if the value of a @a KexiMacroProperty changed to update
the widget and the displayed content. */
void slotPropertyValueChanged();
private:
/** \internal d-pointer class. */
class Private;
/** \internal d-pointer instance. */
Private* const d;
};
#endif