diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2010-01-20 01:29:50 +0000 |
commit | 8362bf63dea22bbf6736609b0f49c152f975eb63 (patch) | |
tree | 0eea3928e39e50fae91d4e68b21b1e6cbae25604 /kexi/core/kexidataiteminterface.h | |
download | koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.tar.gz koffice-8362bf63dea22bbf6736609b0f49c152f975eb63.zip |
Added old abandoned KDE3 version of koffice
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/koffice@1077364 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kexi/core/kexidataiteminterface.h')
-rw-r--r-- | kexi/core/kexidataiteminterface.h | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/kexi/core/kexidataiteminterface.h b/kexi/core/kexidataiteminterface.h new file mode 100644 index 00000000..dbd38005 --- /dev/null +++ b/kexi/core/kexidataiteminterface.h @@ -0,0 +1,249 @@ +/* This file is part of the KDE project + Copyright (C) 2005-2006 Jaroslaw Staniek <[email protected]> + + This program 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 program 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 program; see the file COPYING. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef KEXIDATAITEMINTERFACE_H +#define KEXIDATAITEMINTERFACE_H + +#include <qvariant.h> +#include <qwidget.h> +#include <qguardedptr.h> + +class KexiDataItemInterface; +namespace KexiDB { + class Field; + class QueryColumnInfo; +} + +//! An helper class used to react on KexiDataItemInterface objects' changes. +class KEXICORE_EXPORT KexiDataItemChangesListener +{ + public: + KexiDataItemChangesListener(); + virtual ~KexiDataItemChangesListener(); + + /*! Implement this to react for change of \a item. + Called by KexiDataItemInterface::valueChanged() */ + virtual void valueChanged(KexiDataItemInterface* item) = 0; + + /*! Implement this to return information whether we're currently at new row or not. + This can be used e.g. by data-aware widgets to determine if "(autonumber)" + label should be displayed. */ + virtual bool cursorAtNewRow() const = 0; +}; + +//! An interface for declaring widgets to be data-aware. +class KEXICORE_EXPORT KexiDataItemInterface +{ + public: + KexiDataItemInterface(); + virtual ~KexiDataItemInterface(); + + /*! Just initializes \a value, and calls setValueInternal(const QString& add, bool removeOld). + If \a removeOld is true, current value is set up as \a add. + If \a removeOld if false, current value is set up as \a value + \a add. + \a value is stored as 'old value' -it'd be usable in the future + (e.g. Combo Box editor can use old value if current value does not + match any item on the list). + + \a visibleValue (if not NULL) is passed to provide visible value to display instead of \a value. + This is currently used only in case of the combo box form widget, where displayed content + (usually a text of image) differs from the value of the widget (a numeric index). + + This method is called by table view's and form's editors. */ + void setValue(const QVariant& value, const QVariant& add = QVariant(), bool removeOld = false, + const QVariant* visibleValue = 0); + + //! \return field information for this item + virtual KexiDB::Field *field() const = 0; + + //! \return column information for this item + virtual KexiDB::QueryColumnInfo* columnInfo() const = 0; + + //! Used internally to set column information. + virtual void setColumnInfo(KexiDB::QueryColumnInfo* cinfo) = 0; + + //! Sets listener. No need to reimplement this. + virtual void installListener(KexiDataItemChangesListener* listener); + +// //! Sets value \a value for a widget. +// //! Just calls setValueInternal(), but also blocks valueChanged() +// //! as you we don't want to react on our own change +// void setValue(const QVariant& value); + + //! \return value currently represented by this item. + virtual QVariant value() = 0; + + //! \return true if editor's value is valid for a given type + //! Used for checking if an entered value is valid, + //! E.g. a part of time value can be entered: "12:8" and this is invalid, not only null. + //! Null time or date is valid in Kexi, so it is not enough to test value().isValid(). + //! Default implementation just returns true. + virtual bool valueIsValid(); + + //! \return true if editor's value is null (not empty) + //! Used for checking if a given constraint within table or form is met. + virtual bool valueIsNull() = 0; + + //! \return true if editor's value is empty (not necessary null). + //! Only few data types can accept "EMPTY" property + //! (use KexiDB::Field::hasEmptyProperty() to check this). + //! Used for checking if a given constraint within table of form is met. + virtual bool valueIsEmpty() = 0; + + //! \return value that should be displayed for this item. + //! Only used for items like combo box, where real value is an integer while + //! displayed value is usually a text. For other item types this method should be empty. + virtual QVariant visibleValue() { return QVariant(); } + + /*! \return 'readOnly' flag for this item. The flag is usually taken from + the item's widget, e.g. KLineEdit::isReadOnly(). + By default, always returns false. */ + virtual bool isReadOnly() const { return false; } + + /*! \return the view widget of this item, e.g. line edit widget. */ + virtual QWidget* widget() = 0; + + /*! Hides item's widget, if available. */ + virtual void hideWidget() { if (widget()) widget()->hide(); } + + /*! Shows item's widget, if available. */ + virtual void showWidget() { if (widget()) widget()->show(); } + + //! \return true if editor's value is changed (compared to original value) + virtual bool valueChanged(); + + /*! \return true if the item widget's cursor (whatever that means, eg. line edit cursor) + is at the beginning of editor's contents. This can inform table/form view that + after pressing "left arrow" key should stop editing and move to a field on the left hand. */ + virtual bool cursorAtStart() = 0; + + /*! \return true if the item widget's cursor (whatever that means, eg. line edit cursor) + is at the end of editor's contents. This can inform table/form view that + after pressing "right arrow" key should stop editing and move to a field on the right hand. */ + virtual bool cursorAtEnd() = 0; + + /*! Moves cursor after the last character (or element). + For implementation in items supporting text cursor's movement; by default does nothing. */ + virtual void moveCursorToEnd() {}; + + /*! Moves cursor before the first character (or element). + For implementation in items supporting text cursor's movement; by default does nothing. */ + virtual void moveCursorToStart() {}; + + /*! Selects all characters (or elements) of the item. + For implementation in items supporting text or elements; by default does nothing. */ + virtual void selectAll() {}; + + //! clears item's data, so the data will contain NULL data + virtual void clear() = 0; + + /*! \return true if this editor offers a widget (e.g. line edit) that we can move focus to. + Editor for boolean values has this set to false (see KexiBoolTableEdit). + This is true by default. You can override this flag by changing + m_hasFocusableWidget in your subclass' constructor. */ + inline bool hasFocusableWidget() const { return m_hasFocusableWidget; } + + /*! Displays additional elements that are needed for indicating that the current cell + is selected. For example, combobox editor (KexiComboBoxTableEdit) moves and shows + dropdown button. \a r is the rectangle for the cell. + If \a readOnly is true, additional elements should be visually disabled, + e.g. dropdown button of the combobox editor should be disabled. + For reimplementation. By default does nothing. */ + virtual void showFocus( const QRect& r, bool readOnly ); + + /*! Hides additional elements that are needed for indicating that the current cell + is selected. + For reimplementation. By default does nothing. */ + virtual void hideFocus(); + + /*! Allows to define reaction for clicking on cell's contents. + Currently it's used for editor of type boolean, where we want to toggle true/false + on single mouse click. \sa hasFocusableWidget(), KexiBoolTableEdit. + Default implementation does nothing. */ + virtual void clickedOnContents(); + + /*! \return true if editing should be accepted immediately after + deleting contents for the cell (usually using Delete key). + This flag is false by default, and is true e.g. for date, time and datetime types. */ + bool acceptEditorAfterDeleteContents() const { return m_acceptEditorAfterDeleteContents; } + + inline virtual void setFocus() { if (widget()) widget()->setFocus(); } + + bool cursorAtNewRow(); + + /*! Sets a pointer to a Parent Data Item Interface. This pointer is 0 by default, + but can be set by parent widget if this interface is a building block of a larger data widget. + It is the case for KexiDBFieldEdit widget (see KexiDBFieldEdit::createEditor()). Use with care. + signalValueChanged() method will check this pointer, and if it's not 0, + m_parentDataItemInterface->signalValueChanged() is called, so a changes can be signalled at higher level. */ + void setParentDataItemInterface(KexiDataItemInterface* parentDataItemInterface); + + /*! \return a pointer to a Parent Data Item Interface. + @see setParentDataItemInterface() */ + inline KexiDataItemInterface* parentInterface() const { return m_parentDataItemInterface; } + + /*! Handles action having standard name \a actionName. + Action could be: "edit_cut", "edit_paste", etc. + For reimplementation. */ + virtual void handleAction(const QString& actionName) { Q_UNUSED(actionName); } + + protected: + /*! Initializes this editor with \a add value, which should be somewhat added to the current + value (already storted in m_origValue). + If \a removeOld is true, a value should be set to \a add, otherwise + -it should be set to current \a m_origValue + \a add, if possible. + Implement this. */ + virtual void setValueInternal(const QVariant& add, bool removeOld) = 0; + + /*! Initializes this editor with \a value visible value. + This is currently used only in case of the combo box form widget, where displayed content + (usually a text of image) differs from the value of the widget (a numeric index). + For implementation in the combo box widget, by default does nothing. */ + virtual void setVisibleValueInternal(const QVariant& value); + +// //! Sets value \a value for a widget. +// //! Implement this method to allow setting value for this widget item. +// virtual void setValueInternal(const QVariant& value) = 0; + + /*! Call this in your implementation when value changes, + so installed listener can react on this change. If there is a parent data item defined + (see setParentDataItemInterface()), parent's signalValueChanged() method will be called instead. */ + virtual void signalValueChanged(); + + /*! Used to perform some actions before signalValueChanged() call. + We need this because the intrface is not QObject and thus has got no real signals. + Used in KexiDBComboBox. */ + virtual void beforeSignalValueChanged() {}; + + KexiDataItemChangesListener* listener(); + +//moved to KexiFormDataItemInterface: QString m_dataSource; + QGuardedPtr<QObject> m_listenerObject; + KexiDataItemChangesListener* m_listener; + bool m_listenerIsQObject; + QVariant m_origValue; + + /*! @see parentDataItemInterface() */ + KexiDataItemInterface* m_parentDataItemInterface; + bool m_hasFocusableWidget : 1; + bool m_disable_signalValueChanged : 1; + bool m_acceptEditorAfterDeleteContents : 1; +}; + +#endif |