1 /*
2  * DQt - D bindings for the Qt Toolkit
3  *
4  * GNU Lesser General Public License Usage
5  * This file may be used under the terms of the GNU Lesser
6  * General Public License version 3 as published by the Free Software
7  * Foundation and appearing in the file LICENSE.LGPL3 included in the
8  * packaging of this file. Please review the following information to
9  * ensure the GNU Lesser General Public License version 3 requirements
10  * will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
11  */
12 module qt.widgets.combobox;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.abstractitemmodel;
17 import qt.core.coreevent;
18 import qt.core.namespace;
19 import qt.core.size;
20 import qt.core.string;
21 import qt.core.stringlist;
22 import qt.core.variant;
23 import qt.gui.event;
24 import qt.gui.icon;
25 import qt.helpers;
26 import qt.widgets.abstractitemdelegate;
27 import qt.widgets.abstractitemview;
28 import qt.widgets.completer;
29 import qt.widgets.lineedit;
30 import qt.widgets.styleoption;
31 import qt.widgets.widget;
32 version(QT_NO_VALIDATOR){}else
33     import qt.gui.validator;
34 
35 /+ QT_REQUIRE_CONFIG(combobox); +/
36 
37 
38 extern(C++, class) struct QComboBoxPrivate;
39 
40 /// Binding for C++ class [QComboBox](https://doc.qt.io/qt-6/qcombobox.html).
41 class /+ Q_WIDGETS_EXPORT +/ QComboBox : QWidget
42 {
43     mixin(Q_OBJECT);
44 
45     /+ Q_PROPERTY(bool editable READ isEditable WRITE setEditable)
46     Q_PROPERTY(int count READ count)
47     Q_PROPERTY(QString currentText READ currentText WRITE setCurrentText NOTIFY currentTextChanged
48                USER true)
49     Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentIndexChanged)
50     Q_PROPERTY(QVariant currentData READ currentData)
51     Q_PROPERTY(int maxVisibleItems READ maxVisibleItems WRITE setMaxVisibleItems)
52     Q_PROPERTY(int maxCount READ maxCount WRITE setMaxCount)
53     Q_PROPERTY(InsertPolicy insertPolicy READ insertPolicy WRITE setInsertPolicy)
54     Q_PROPERTY(SizeAdjustPolicy sizeAdjustPolicy READ sizeAdjustPolicy WRITE setSizeAdjustPolicy)
55     Q_PROPERTY(int minimumContentsLength READ minimumContentsLength WRITE setMinimumContentsLength)
56     Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
57     Q_PROPERTY(QString placeholderText READ placeholderText WRITE setPlaceholderText)
58     Q_PROPERTY(bool duplicatesEnabled READ duplicatesEnabled WRITE setDuplicatesEnabled)
59     Q_PROPERTY(bool frame READ hasFrame WRITE setFrame)
60     Q_PROPERTY(int modelColumn READ modelColumn WRITE setModelColumn) +/
61 
62 public:
63     /+ explicit +/this(QWidget parent = null);
64     ~this();
65 
66     final int maxVisibleItems() const;
67     final void setMaxVisibleItems(int maxItems);
68 
69     final int count() const;
70     final void setMaxCount(int max);
71     final int maxCount() const;
72 
73     final bool duplicatesEnabled() const;
74     final void setDuplicatesEnabled(bool enable);
75 
76     final void setFrame(bool);
77     final bool hasFrame() const;
78 
79 /+    pragma(inline, true) final int findText(ref const(QString) text,
80                             /+ Qt:: +/qt.core.namespace.MatchFlags flags = static_cast!(/+ Qt:: +/qt.core.namespace.MatchFlags)(/+ Qt:: +/qt.core.namespace.MatchFlag.MatchExactly|/+ Qt:: +/qt.core.namespace.MatchFlag.MatchCaseSensitive)) const
81         { return findData(text, /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole, flags); }
82     final int findData(ref const(QVariant) data, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole,
83                      /+ Qt:: +/qt.core.namespace.MatchFlags flags = static_cast!(/+ Qt:: +/qt.core.namespace.MatchFlags)(/+ Qt:: +/qt.core.namespace.MatchFlag.MatchExactly|/+ Qt:: +/qt.core.namespace.MatchFlag.MatchCaseSensitive)) const;
84 +/
85     enum InsertPolicy {
86         NoInsert,
87         InsertAtTop,
88         InsertAtCurrent,
89         InsertAtBottom,
90         InsertAfterCurrent,
91         InsertBeforeCurrent,
92         InsertAlphabetically
93     }
94     /+ Q_ENUM(InsertPolicy) +/
95 
96     final InsertPolicy insertPolicy() const;
97     final void setInsertPolicy(InsertPolicy policy);
98 
99     enum SizeAdjustPolicy {
100         AdjustToContents,
101         AdjustToContentsOnFirstShow,
102         AdjustToMinimumContentsLengthWithIcon
103     }
104     /+ Q_ENUM(SizeAdjustPolicy) +/
105 
106     final SizeAdjustPolicy sizeAdjustPolicy() const;
107     final void setSizeAdjustPolicy(SizeAdjustPolicy policy);
108     final int minimumContentsLength() const;
109     final void setMinimumContentsLength(int characters);
110     final QSize iconSize() const;
111     final void setIconSize(ref const(QSize) size);
112 
113     final void setPlaceholderText(ref const(QString) placeholderText);
114     final QString placeholderText() const;
115 
116     final bool isEditable() const;
117     final void setEditable(bool editable);
118     final void setLineEdit(QLineEdit edit);
119     final QLineEdit lineEdit() const;
120 /+ #ifndef QT_NO_VALIDATOR +/
121     version(QT_NO_VALIDATOR){}else
122     {
123         mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
124         final void setValidator(const(QValidator) v);
125         }));
126         mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
127         final const(QValidator) validator() const;
128         }));
129     }
130 /+ #endif
131 
132 #if QT_CONFIG(completer) +/
133     final void setCompleter(QCompleter c);
134     final QCompleter completer() const;
135 /+ #endif +/
136 
137     final QAbstractItemDelegate itemDelegate() const;
138     final void setItemDelegate(QAbstractItemDelegate delegate_);
139 
140     final QAbstractItemModel model() const;
141     /+ virtual +/ void setModel(QAbstractItemModel model);
142 
143     final QModelIndex rootModelIndex() const;
144     final void setRootModelIndex(ref const(QModelIndex) index);
145 
146     final int modelColumn() const;
147     final void setModelColumn(int visibleColumn);
148 
149     final int currentIndex() const;
150     final QString currentText() const;
151     final QVariant currentData(int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole) const;
152 
153     final QString itemText(int index) const;
154     final QIcon itemIcon(int index) const;
155     final QVariant itemData(int index, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole) const;
156 
157     pragma(inline, true) final void addItem(ref const(QString) atext, ref const(QVariant) auserData = globalInitVar!QVariant)
158     { insertItem(count(), atext, auserData); }
159     pragma(inline, true) final void addItem(ref const(QIcon) aicon, ref const(QString) atext,
160                             ref const(QVariant) auserData = globalInitVar!QVariant)
161     { insertItem(count(), aicon, atext, auserData); }
162     pragma(inline, true) final void addItems(ref const(QStringList) texts)
163         { insertItems(count(), texts); }
164 
165     pragma(inline, true) final void insertItem(int aindex, ref const(QString) atext, ref const(QVariant) auserData = globalInitVar!QVariant)
166     { auto tmp = QIcon(); insertItem(aindex, tmp, atext, auserData); }
167     final void insertItem(int index, ref const(QIcon) icon, ref const(QString) text,
168                         ref const(QVariant) userData = globalInitVar!QVariant);
169     final void insertItems(int index, ref const(QStringList) texts);
170     final void insertSeparator(int index);
171 
172     final void removeItem(int index);
173 
174     final void setItemText(int index, ref const(QString) text);
175     final void setItemIcon(int index, ref const(QIcon) icon);
176     final void setItemData(int index, ref const(QVariant) value, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole);
177 
178     final QAbstractItemView view() const;
179     final void setView(QAbstractItemView itemView);
180 
181     override QSize sizeHint() const;
182     override QSize minimumSizeHint() const;
183 
184     /+ virtual +/ void showPopup();
185     /+ virtual +/ void hidePopup();
186 
187     override bool event(QEvent event);
188     override QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery) const;
189     @QInvokable final QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery query, ref const(QVariant) argument) const;
190 
191 public /+ Q_SLOTS +/:
192     @QSlot final void clear();
193     @QSlot final void clearEditText();
194     @QSlot final void setEditText(ref const(QString) text);
195     @QSlot final void setCurrentIndex(int index);
196     @QSlot final void setCurrentText(ref const(QString) text);
197 
198 /+ Q_SIGNALS +/public:
199     @QSignal final void editTextChanged(ref const(QString) );
200     @QSignal final void activated(int index);
201     @QSignal final void textActivated(ref const(QString) );
202     @QSignal final void highlighted(int index);
203     @QSignal final void textHighlighted(ref const(QString) );
204     @QSignal final void currentIndexChanged(int index);
205     @QSignal final void currentTextChanged(ref const(QString) );
206 
207 protected:
208     override void focusInEvent(QFocusEvent e);
209     override void focusOutEvent(QFocusEvent e);
210     override void changeEvent(QEvent e);
211     override void resizeEvent(QResizeEvent e);
212     override void paintEvent(QPaintEvent e);
213     override void showEvent(QShowEvent e);
214     override void hideEvent(QHideEvent e);
215     override void mousePressEvent(QMouseEvent e);
216     override void mouseReleaseEvent(QMouseEvent e);
217     override void keyPressEvent(QKeyEvent e);
218     override void keyReleaseEvent(QKeyEvent e);
219 /+ #if QT_CONFIG(wheelevent) +/
220     override void wheelEvent(QWheelEvent e);
221 /+ #endif
222 #ifndef QT_NO_CONTEXTMENU +/
223     version(QT_NO_CONTEXTMENU){}else
224     {
225         override void contextMenuEvent(QContextMenuEvent e);
226     }
227 /+ #endif +/ // QT_NO_CONTEXTMENU
228     override void inputMethodEvent(QInputMethodEvent );
229     /+ virtual +/ void initStyleOption(QStyleOptionComboBox* option) const;
230 
231 
232 protected:
233     this(ref QComboBoxPrivate , QWidget );
234 
235 private:
236     /+ Q_DECLARE_PRIVATE(QComboBox) +/
237     /+ Q_DISABLE_COPY(QComboBox) +/
238     /+ Q_PRIVATE_SLOT(d_func(), void _q_itemSelected(const QModelIndex &item))
239     Q_PRIVATE_SLOT(d_func(), void _q_emitHighlighted(const QModelIndex &))
240     Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentIndexChanged(const QModelIndex &index))
241     Q_PRIVATE_SLOT(d_func(), void _q_editingFinished())
242     Q_PRIVATE_SLOT(d_func(), void _q_returnPressed())
243     Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
244     Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &, const QModelIndex &))
245     Q_PRIVATE_SLOT(d_func(), void _q_updateIndexBeforeChange())
246     Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex & parent, int start, int end))
247     Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex & parent, int start, int end))
248     Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed())
249     Q_PRIVATE_SLOT(d_func(), void _q_modelReset())
250 #if QT_CONFIG(completer)
251     Q_PRIVATE_SLOT(d_func(), void _q_completerActivated(const QModelIndex &index))
252 #endif +/
253     mixin(CREATE_CONVENIENCE_WRAPPERS);
254 }
255