1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
/* This file is part of the KDE project
Copyright (C) 2002 Peter Simonsson <psn@linux.se>
Copyright (C) 2003-2006 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 _KEXICOMBOBOXTABLEEDIT_H_
#define _KEXICOMBOBOXTABLEEDIT_H_
#include "kexidb/field.h"
#include "kexiinputtableedit.h"
#include "kexicomboboxbase.h"
#include <kexidb/lookupfieldschema.h>
class KPushButton;
class KLineEdit;
class KexiComboBoxPopup;
class KexiTableItem;
class KexiTableViewColumn;
/*! @short Drop-down cell editor.
*/
class KexiComboBoxTableEdit : public KexiInputTableEdit, public KexiComboBoxBase
{
Q_OBJECT
public:
KexiComboBoxTableEdit(KexiTableViewColumn &column, QWidget *parent=0);
virtual ~KexiComboBoxTableEdit();
//! Implemented for KexiComboBoxBase
virtual KexiTableViewColumn *column() const { return m_column; }
//! Implemented for KexiComboBoxBase
virtual KexiDB::Field *field() const { return m_column->field(); }
//! Implemented for KexiComboBoxBase
virtual QVariant origValue() const { return m_origValue; }
virtual void setValueInternal(const QVariant& add, bool removeOld)
{ KexiComboBoxBase::setValueInternal(add, removeOld); }
virtual QVariant value() { return KexiComboBoxBase::value(); }
virtual void clear();
virtual bool valueChanged();
virtual QVariant visibleValue();
/*! Reimplemented: resizes a view(). */
virtual void resize(int w, int h);
virtual void showFocus( const QRect& r, bool readOnly );
virtual void hideFocus();
virtual void paintFocusBorders( QPainter *p, QVariant &cal, int x, int y, int w, int h );
/*! Setups contents of the cell. As a special case, if there is lookup field schema
defined, \a val already contains the visible value (usually the text)
set by \ref KexiTableView::paintcell(), so there is noo need to lookup the value
in the combo box's popup. */
virtual void setupContents( QPainter *p, bool focused, const QVariant& val,
QString &txt, int &align, int &x, int &y_offset, int &w, int &h );
/*! Used to handle key press events for the item. */
virtual bool handleKeyPress( QKeyEvent *ke, bool editorActive );
virtual int widthForValue( QVariant &val, const QFontMetrics &fm );
virtual void hide();
virtual void show();
/*! \return total size of this editor, including popup button. */
virtual QSize totalSize() const;
virtual void createInternalEditor(KexiDB::QuerySchema& schema);
/*! Reimplemented after KexiInputTableEdit. */
virtual void handleAction(const QString& actionName);
/*! Reimplemented after KexiInputTableEdit.
For a special case (combo box), \a visibleValue can be provided,
so it can be copied to the clipboard instead of unreadable \a value. */
virtual void handleCopyAction(const QVariant& value, const QVariant& visibleValue);
public slots:
//! Implemented for KexiDataItemInterface
virtual void moveCursorToEnd();
//! Implemented for KexiDataItemInterface
virtual void moveCursorToStart();
//! Implemented for KexiDataItemInterface
virtual void selectAll();
protected slots:
void slotButtonClicked();
void slotRowAccepted(KexiTableItem *item, int row) { KexiComboBoxBase::slotRowAccepted(item, row); }
void slotItemSelected(KexiTableItem* item) { KexiComboBoxBase::slotItemSelected(item); }
void slotInternalEditorValueChanged(const QVariant& v)
{ KexiComboBoxBase::slotInternalEditorValueChanged(v); }
void slotLineEditTextChanged(const QString& s);
void slotPopupHidden();
protected:
//! internal
void updateFocus( const QRect& r );
virtual bool eventFilter( QObject *o, QEvent *e );
//! Implemented for KexiComboBoxBase
virtual QWidget *internalEditor() const;
//! Implemented for KexiComboBoxBase
virtual void moveCursorToEndInInternalEditor();
//! Implemented for KexiComboBoxBase
virtual void selectAllInInternalEditor();
//! Implemented for KexiComboBoxBase
virtual void setValueInInternalEditor(const QVariant& value);
//! Implemented for KexiComboBoxBase
virtual QVariant valueFromInternalEditor();
//! Implemented for KexiComboBoxBase
virtual void editRequested() { KexiInputTableEdit::editRequested(); }
//! Implemented for KexiComboBoxBase
virtual void acceptRequested() { KexiInputTableEdit::acceptRequested(); }
//! Implemented for KexiComboBoxBase
virtual QPoint mapFromParentToGlobal(const QPoint& pos) const;
//! Implemented for KexiComboBoxBase
virtual int popupWidthHint() const;
//! Implemented this to update button state.
virtual void updateButton();
virtual KexiComboBoxPopup *popup() const;
virtual void setPopup(KexiComboBoxPopup *popup);
class Private;
Private *d;
};
KEXI_DECLARE_CELLEDITOR_FACTORY_ITEM(KexiComboBoxEditorFactoryItem)
#endif
|