summaryrefslogtreecommitdiffstats
path: root/kexi/plugins/forms/kexiformdataiteminterface.h
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/plugins/forms/kexiformdataiteminterface.h')
-rw-r--r--kexi/plugins/forms/kexiformdataiteminterface.h145
1 files changed, 145 insertions, 0 deletions
diff --git a/kexi/plugins/forms/kexiformdataiteminterface.h b/kexi/plugins/forms/kexiformdataiteminterface.h
new file mode 100644
index 00000000..99d20db4
--- /dev/null
+++ b/kexi/plugins/forms/kexiformdataiteminterface.h
@@ -0,0 +1,145 @@
+/* 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 KEXIFORMDATAITEMINTERFACE_H
+#define KEXIFORMDATAITEMINTERFACE_H
+
+#include <widget/utils/kexidisplayutils.h>
+#include <kexidataiteminterface.h>
+#include <qwidget.h>
+
+namespace KexiDB {
+ class Field;
+}
+
+//! An interface for declaring form widgets to be data-aware.
+class KEXIFORMUTILS_EXPORT KexiFormDataItemInterface : public KexiDataItemInterface
+{
+ public:
+ KexiFormDataItemInterface();
+ virtual ~KexiFormDataItemInterface();
+
+ //! \return the name of the data source for this widget.
+ //! Data source usually means here a table or query, a field name or an expression.
+ inline QString dataSource() const { return m_dataSource; }
+
+ //! Sets the name of the data source for this widget.
+ //! Data source usually means here a table or query or field name name.
+ inline void setDataSource(const QString &ds) { m_dataSource = ds; }
+
+ /*! \return the mime type of the data source for this widget.
+ Data source mime type means here types like "kexi/table" or "kexi/query"
+ in.the data source is set to object (as within form or subform) or is empty
+ if the data source is set to table field or query column. */
+ inline QCString dataSourceMimeType() const { return m_dataSourceMimeType; }
+
+ /*! Sets the mime type of the data source for this widget.
+ Data source usually means here a "kexi/table" or "kexi/query".
+ @see dataSourceMimeType() */
+ inline void setDataSourceMimeType(const QCString &ds) { m_dataSourceMimeType = ds; }
+
+ /*! If \a displayDefaultValue is true, the value set by KexiDataItemInterface::setValue()
+ is displayed in a special way. Used by KexiFormDataProvider::fillDataItems().
+ \a widget is equal to 'this'.
+ You can reimplement this in the widget. Always call the superclass' implementation.
+ setDisplayDefaultValue(.., false) is called in KexiFormScrollView::valueChanged()
+ as a response on data change performed by user. */
+ virtual void setDisplayDefaultValue(QWidget* widget, bool displayDefaultValue);
+
+ /*! \return true if default value is displayed for this item. */
+ virtual bool hasDisplayedDefaultValue() const { return m_displayDefaultValue; }
+
+ /*! Convenience function: casts this item to a QWidget.
+ Can return 0 if the item is not a QWidget-derived object. */
+ virtual QWidget* widget() { return dynamic_cast<QWidget*>(this); }
+
+ /*! Sets 'invalid' state, e.g. a text editor widget should display
+ text \a displayText and become read only to prevent entering data,
+ because updating at the database backend is not available.
+ \a displayText is usually set to something i18n'd like "#NAME?".
+ Note: that even widgets that usualy do not display texts (e.g. pixmaps)
+ should display \a displayText too.
+ */
+ virtual void setInvalidState( const QString& displayText ) = 0;
+
+ /*! Changes 'read only' flag, for this widget.
+ Typically this flag can be passed to a widget itself,
+ e.g. KLineEdit::setReadOnly(bool). */
+ virtual void setReadOnly( bool readOnly ) = 0;
+
+ //! \return database column information for this item
+ virtual KexiDB::Field* field() const;
+
+ //! \return database column information for this item
+ virtual KexiDB::QueryColumnInfo* columnInfo() const { return m_columnInfo; }
+
+ /*! Used internally to set database column information.
+ Reimplement if you need to do additional actions,
+ e.g. set data validator based on field type. Don't forget about
+ calling superclass implementation. */
+ virtual void setColumnInfo(KexiDB::QueryColumnInfo* cinfo) { m_columnInfo = cinfo; }
+
+ /*! Used internally to set visible database column information.
+ Reimplemented in KexiDBComboBox: except for combo box, this does nothing. */
+ virtual void setVisibleColumnInfo(KexiDB::QueryColumnInfo* cinfo) { Q_UNUSED(cinfo); }
+
+ /*! \return visible database column information for this item.
+ Except for combo box, this is exactly the same as columnInfo(). */
+ virtual KexiDB::QueryColumnInfo* visibleColumnInfo() const { return columnInfo(); }
+
+ /*! Does nothing, because within forms, widgets are always visible. */
+ virtual void hideWidget() { }
+
+ /*! Does nothing, because within forms, widgets are always visible. */
+ virtual void showWidget() { }
+
+ /*! Undoes changes made to this item - just resets the widget to original value.
+ Note: This is internal method called by KexiFormScrollView::cancelEditor().
+ To cancel editing of the widget's data from the widget's code,
+ use KexiFormDataItemInterface::cancelEditor().
+ Reimplemented in KexiDBComboBox to also revert the visible value (i.e. text) to the original state.
+ */
+ virtual void undoChanges();
+
+ /* Cancels editing of the widget's data. This method just looks for
+ the (grand)parent KexiFormScrollView object and calls
+ KexiFormScrollView::cancelEditor(). */
+ void cancelEditor();
+
+ /*! @internal
+ Called by top-level form on key press event.
+ Default implementation does nothing.
+ Implement this if you want to handle key presses from within the editor widget item.
+ \return true if \a ke should be accepted by the widget item.
+ This method is used e.g. in KexiDBImageBox for Key_Escape to if the popup is visible,
+ so the key press won't be consumed to perform "cancel editing". */
+ virtual bool keyPressed(QKeyEvent *ke) { Q_UNUSED(ke); return false; };
+
+ protected:
+ QString m_dataSource;
+ QCString m_dataSourceMimeType;
+ KexiDB::QueryColumnInfo* m_columnInfo;
+ KexiDisplayUtils::DisplayParameters *m_displayParametersForEnteredValue; //!< used in setDisplayDefaultValue()
+ KexiDisplayUtils::DisplayParameters *m_displayParametersForDefaultValue; //!< used in setDisplayDefaultValue()
+ bool m_displayDefaultValue : 1; //!< used by setDisplayDefaultValue()
+
+ friend class KexiDBAutoField;
+};
+
+#endif