summaryrefslogtreecommitdiffstats
path: root/kexi/widget/tableview/kexicomboboxbase.h
diff options
context:
space:
mode:
Diffstat (limited to 'kexi/widget/tableview/kexicomboboxbase.h')
-rw-r--r--kexi/widget/tableview/kexicomboboxbase.h170
1 files changed, 170 insertions, 0 deletions
diff --git a/kexi/widget/tableview/kexicomboboxbase.h b/kexi/widget/tableview/kexicomboboxbase.h
new file mode 100644
index 00000000..1433ab0f
--- /dev/null
+++ b/kexi/widget/tableview/kexicomboboxbase.h
@@ -0,0 +1,170 @@
+/* This file is part of the KDE project
+ Copyright (C) 2002 Peter Simonsson <psn@linux.se>
+ Copyright (C) 2003-2007 Jaroslaw Staniek <js@iidea.pl>
+
+ 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 _KEXICOMBOBOXBASE_H_
+#define _KEXICOMBOBOXBASE_H_
+
+#include "kexidb/field.h"
+#include "kexiinputtableedit.h"
+#include <kexidb/lookupfieldschema.h>
+
+class KPushButton;
+class KLineEdit;
+class KexiComboBoxPopup;
+class KexiTableItem;
+class KexiTableViewColumn;
+
+/*! @short A base class for handling data-aware combo boxes.
+ This class is used by KexiComboBoxTableEdit and KexiDBComboBox.
+*/
+class KEXIDATATABLE_EXPORT KexiComboBoxBase
+{
+ public:
+ KexiComboBoxBase();
+ virtual ~KexiComboBoxBase();
+
+ //! \return column related to this combo; for KexiComboBoxTableEdit 0 is returned here
+ virtual KexiTableViewColumn *column() const = 0;
+
+ //! \return database field related to this combo
+ virtual KexiDB::Field *field() const = 0;
+
+ //! \return the original value
+ virtual QVariant origValue() const = 0;
+
+ //! Note: Generally in current implementation this is integer > 0; may be null if no value is set
+ virtual QVariant value();
+
+ virtual QVariant visibleValue();
+
+ //! Reimplement this and call this impl.: used to clear internal editor
+ virtual void clear();
+
+ virtual tristate valueChangedInternal();
+ virtual bool valueIsNull();
+ virtual bool valueIsEmpty();
+
+ public:
+ virtual void hide();
+
+ void createPopup(bool show);
+
+ void showPopup();
+
+ //! Call this from slot
+ virtual void slotRowAccepted(KexiTableItem *item, int row);
+
+ //! Call this from slot
+ virtual void slotItemSelected(KexiTableItem*);
+
+ //! Call this from slot
+ void slotInternalEditorValueChanged(const QVariant &v);
+
+ //! Implement this to return the internal editor
+ virtual QWidget *internalEditor() const = 0;
+
+ protected:
+ virtual void setValueInternal(const QVariant& add, bool removeOld);
+
+ //! Used to select row item for an user-entered value \a v.
+ //! Only for "lookup table" mode.
+ KexiTableItem* selectItemForEnteredValueInLookupTable(const QVariant& v);
+
+ /*! \return value from \a returnFromColumn related to \a str value from column \a lookInColumn.
+ If \a allowNulls is true, NULL is returend if no matched column found, else:
+ \a str is returned.
+ Example: lookInColumn=0, returnFromColumn=1 --returns user-visible string
+ for column #1 for id-column #0 */
+ QString valueForString(const QString& str, int* row, uint lookInColumn,
+ uint returnFromColumn, bool allowNulls = false);
+
+ //! sets \a value for the line edit without setting a flag (m_userEnteredValue) that indicates that
+ //! the text has been entered by hand (by a user)
+ void setValueOrTextInInternalEditor(const QVariant& value); //QString& text);
+
+ //! \return lookup field schema for this combo box, if present and if is valid (i.e. has defined row source)
+ KexiDB::LookupFieldSchema* lookupFieldSchema() const;
+
+ int rowToHighlightForLookupTable() const;
+
+ //! Implement this to perform "move cursor to end" in the internal editor
+ virtual void moveCursorToEndInInternalEditor() = 0;
+
+ //! Implement this to perform "select all" in the internal editor
+ virtual void selectAllInInternalEditor() = 0;
+
+ //! Implement this to perform "set value" in the internal editor
+ virtual void setValueInInternalEditor(const QVariant& value) = 0;
+
+ //! Implement this to return value from the internal editor
+ virtual QVariant valueFromInternalEditor() = 0;
+
+ //! Implement this as signal
+ virtual void editRequested() = 0;
+
+ //! Implement this as signal
+ virtual void acceptRequested() = 0;
+
+ //! Implement this to return a position \a pos mapped from parent (e.g. viewport)
+ //! to global coordinates. QPoint(-1, -1) should be returned if this cannot be computed.
+ virtual QPoint mapFromParentToGlobal(const QPoint& pos) const = 0;
+
+ //! Implement this to return a hint for popup width.
+ virtual int popupWidthHint() const = 0;
+
+ //! Implement this to update button state. Table view just updates on/off state
+ //! for the button depending on visibility of the popup
+ virtual void updateButton() {}
+
+ virtual KexiComboBoxPopup *popup() const = 0;
+ virtual void setPopup(KexiComboBoxPopup *popup) = 0;
+
+ virtual QVariant visibleValueForLookupField();
+
+ void updateTextForHighlightedRow();
+
+ bool handleKeyPressForPopup( QKeyEvent *ke );
+
+ void acceptPopupSelection();
+
+ //! Used by KexiDBComboBox.
+ void undoChanges();
+
+ QVariant m_visibleValue;
+
+ QVariant m_userEnteredValue; //!< value (usually a text) entered by hand (by the user)
+
+ bool m_internalEditorValueChanged : 1; //!< true if user has text or other value inside editor
+ bool m_slotInternalEditorValueChanged_enabled : 1; //!< Used in slotInternalEditorValueChanged()
+ bool m_setValueOrTextInInternalEditor_enabled : 1; //!< Used in setValueOrTextInInternalEditor() and slotItemSelected()
+ bool m_mouseBtnPressedWhenPopupVisible : 1; //!< Used only by KexiComboBoxTableEdit
+ bool m_insideCreatePopup : 1; //!< true if we're inside createPopup(); used in slotItemSelected()
+ bool m_updatePopupSelectionOnShow : 1; //!< Set to false as soon as the item corresponding with the current
+ //!< value is selected in the popup table. This avoids selecting item
+ //!< for origValue() and thus loosing the recent choice.
+ bool m_moveCursorToEndInInternalEditor_enabled : 1;
+ bool m_selectAllInInternalEditor_enabled : 1;
+ bool m_setValueInInternalEditor_enabled : 1;
+ bool m_setVisibleValueOnSetValueInternal : 1; //!< Used in setValueInternal() to control whether
+ //!< we want to set visible value on setValueInternal()
+ //!< - true for table view's combo box
+};
+
+#endif