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.gui.standarditemmodel;
13 extern(C++):
14 
15 import qt.config;
16 import qt.core.abstractitemmodel;
17 import qt.core.bytearray;
18 import qt.core.hash;
19 import qt.core.list;
20 import qt.core.map;
21 import qt.core.mimedata;
22 import qt.core.namespace;
23 import qt.core.object;
24 import qt.core.property;
25 import qt.core.scopedpointer;
26 import qt.core.size;
27 import qt.core.string;
28 import qt.core.stringlist;
29 import qt.core.variant;
30 import qt.gui.brush;
31 import qt.gui.font;
32 import qt.gui.icon;
33 import qt.helpers;
34 version(QT_NO_DATASTREAM){}else
35     import qt.core.datastream;
36 
37 /+ #ifndef QT_NO_DATASTREAM
38 #endif
39 
40 QT_REQUIRE_CONFIG(standarditemmodel); +/
41 
42 
43 
44 extern(C++, class) struct QStandardItemPrivate;
45 /// Binding for C++ class [QStandardItem](https://doc.qt.io/qt-6/qstandarditem.html).
46 class /+ Q_GUI_EXPORT +/ QStandardItem
47 {
48 public:
49     this();
50     /+ explicit +/this(ref const(QString) text);
51     this(ref const(QIcon) icon, ref const(QString) text);
52     /+ explicit +/this(int rows, int columns = 1);
53     /+ virtual +/~this();
54 
55     /+ virtual +/ QVariant data(int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 1) const;
56     /+ virtual +/ void multiData(QModelRoleDataSpan roleDataSpan) const;
57     /+ virtual +/ void setData(ref const(QVariant) value, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 1);
58     /+ virtual +/ void setData(T)(T value, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.UserRole + 1)
59     {
60         static if(is(const(T) == const(QVariant)))
61             QVariant v = value;
62         else
63             QVariant v = QVariant.fromValue(value);
64         setData(v, role);
65     }
66     final void clearData();
67 
68     pragma(inline, true) final QString text() const {
69         return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole));
70     }
71     pragma(inline, true) final void setText(ref const(QString) atext)
72     { setData(atext, /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole); }
73 
74     pragma(inline, true) final QIcon icon() const {
75         return qvariant_cast!(QIcon)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole));
76     }
77     pragma(inline, true) final void setIcon(ref const(QIcon) aicon)
78     { setData(aicon, /+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole); }
79 
80     pragma(inline, true) final QString toolTip() const {
81         return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole));
82     }
83     pragma(inline, true) final void setToolTip(ref const(QString) atoolTip)
84     { setData(atoolTip, /+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole); }
85 
86 /+ #ifndef QT_NO_STATUSTIP +/
87     version(QT_NO_STATUSTIP){}else
88     {
89         pragma(inline, true) final QString statusTip() const {
90             return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole));
91         }
92         pragma(inline, true) final void setStatusTip(ref const(QString) astatusTip)
93         { setData(astatusTip, /+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole); }
94     }
95 /+ #endif
96 
97 #if QT_CONFIG(whatsthis) +/
98     pragma(inline, true) final QString whatsThis() const {
99         return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole));
100     }
101     pragma(inline, true) final void setWhatsThis(ref const(QString) awhatsThis)
102     { setData(awhatsThis, /+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole); }
103 /+ #endif +/
104 
105     pragma(inline, true) final QSize sizeHint() const {
106         return qvariant_cast!(QSize)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole));
107     }
108     pragma(inline, true) final void setSizeHint(ref const(QSize) asizeHint)
109     { setData(asizeHint, /+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole); }
110 
111     pragma(inline, true) final QFont font() const {
112         return qvariant_cast!(QFont)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole));
113     }
114     pragma(inline, true) final void setFont(ref const(QFont) afont)
115     { setData(afont, /+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole); }
116 
117 /+    pragma(inline, true) final /+ Qt:: +/qt.core.namespace.Alignment textAlignment() const {
118         return /+ Qt:: +/qt.core.namespace.Alignment(qvariant_cast!(int)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole)));
119     }
120     pragma(inline, true) final void setTextAlignment(/+ Qt:: +/qt.core.namespace.Alignment atextAlignment)
121     { auto tmp = const(QVariant)(cast(int)(atextAlignment)); setData(tmp, /+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole); }+/
122 
123     pragma(inline, true) final QBrush background() const {
124         return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole));
125     }
126     pragma(inline, true) final void setBackground(ref const(QBrush) abrush)
127     { setData(abrush, /+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole); }
128 
129     pragma(inline, true) final QBrush foreground() const {
130         return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole));
131     }
132     pragma(inline, true) final void setForeground(ref const(QBrush) abrush)
133     { setData(abrush, /+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole); }
134 
135 /+    pragma(inline, true) final /+ Qt:: +/qt.core.namespace.CheckState checkState() const {
136         return /+ Qt:: +/qt.core.namespace.CheckState(qvariant_cast!(int)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole)));
137     }
138     pragma(inline, true) final void setCheckState(/+ Qt:: +/qt.core.namespace.CheckState acheckState)
139     { setData(acheckState, /+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole); }+/
140 
141     pragma(inline, true) final QString accessibleText() const {
142         return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.AccessibleTextRole));
143     }
144     pragma(inline, true) final void setAccessibleText(ref const(QString) aaccessibleText)
145     { setData(aaccessibleText, /+ Qt:: +/qt.core.namespace.ItemDataRole.AccessibleTextRole); }
146 
147     pragma(inline, true) final QString accessibleDescription() const {
148         return qvariant_cast!(QString)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.AccessibleDescriptionRole));
149     }
150     pragma(inline, true) final void setAccessibleDescription(ref const(QString) aaccessibleDescription)
151     { setData(aaccessibleDescription, /+ Qt:: +/qt.core.namespace.ItemDataRole.AccessibleDescriptionRole); }
152 
153     final /+ Qt:: +/qt.core.namespace.ItemFlags flags() const;
154     final void setFlags(/+ Qt:: +/qt.core.namespace.ItemFlags flags);
155 
156 /+    pragma(inline, true) final bool isEnabled() const {
157         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsEnabled) != 0;
158     }
159     final void setEnabled(bool enabled);
160 
161     pragma(inline, true) final bool isEditable() const {
162         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsEditable) != 0;
163     }
164     final void setEditable(bool editable);
165 
166     pragma(inline, true) final bool isSelectable() const {
167         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsSelectable) != 0;
168     }
169     final void setSelectable(bool selectable);
170 
171     pragma(inline, true) final bool isCheckable() const {
172         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsUserCheckable) != 0;
173     }
174     final void setCheckable(bool checkable);
175 
176     pragma(inline, true) final bool isAutoTristate() const {
177         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsAutoTristate) != 0;
178     }
179     final void setAutoTristate(bool tristate);
180 
181     pragma(inline, true) final bool isUserTristate() const {
182         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsUserTristate) != 0;
183     }
184     final void setUserTristate(bool tristate);
185 
186 /+ #if QT_CONFIG(draganddrop) +/
187     pragma(inline, true) final bool isDragEnabled() const {
188         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsDragEnabled) != 0;
189     }
190     final void setDragEnabled(bool dragEnabled);
191 
192     pragma(inline, true) final bool isDropEnabled() const {
193         return (flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsDropEnabled) != 0;
194     }
195     final void setDropEnabled(bool dropEnabled);+/
196 /+ #endif +/ // QT_CONFIG(draganddrop)
197 
198     final QStandardItem parent() const;
199     final int row() const;
200     final int column() const;
201     final QModelIndex index() const;
202     final QStandardItemModel model() const;
203 
204     final int rowCount() const;
205     final void setRowCount(int rows);
206     final int columnCount() const;
207     final void setColumnCount(int columns);
208 
209     final bool hasChildren() const;
210     final QStandardItem child(int row, int column = 0) const;
211     final void setChild(int row, int column, QStandardItem item);
212     pragma(inline, true) final void setChild(int arow, QStandardItem aitem)
213     { setChild(arow, 0, aitem); }
214 
215     final void insertRow(int row, ref const(QList!(QStandardItem)) items);
216     final void insertColumn(int column, ref const(QList!(QStandardItem)) items);
217     final void insertRows(int row, ref const(QList!(QStandardItem)) items);
218     final void insertRows(int row, int count);
219     final void insertColumns(int column, int count);
220 
221     final void removeRow(int row);
222     final void removeColumn(int column);
223     final void removeRows(int row, int count);
224     final void removeColumns(int column, int count);
225 
226     pragma(inline, true) final void appendRow(ref const(QList!(QStandardItem)) aitems)
227     { insertRow(rowCount(), aitems); }
228     pragma(inline, true) final void appendRows(ref const(QList!(QStandardItem)) aitems)
229     { insertRows(rowCount(), aitems); }
230     pragma(inline, true) final void appendColumn(ref const(QList!(QStandardItem)) aitems)
231     { insertColumn(columnCount(), aitems); }
232 /+    pragma(inline, true) final void insertRow(int arow, QStandardItem aitem)
233     { insertRow(arow, cast(QStandardItem)(QList!(QStandardItem)() << aitem)); }
234     pragma(inline, true) final void appendRow(QStandardItem aitem)
235     { insertRow(rowCount(), aitem); }
236 +/
237 
238     final QStandardItem takeChild(int row, int column = 0);
239     final QList!(QStandardItem) takeRow(int row);
240     final QList!(QStandardItem) takeColumn(int column);
241 
242     final void sortChildren(int column, /+ Qt:: +/qt.core.namespace.SortOrder order = /+ Qt:: +/qt.core.namespace.SortOrder.AscendingOrder);
243 
244     /+ virtual +/ QStandardItem clone() const;
245 
246     enum ItemType { Type = 0, UserType = 1000 }
247     /+ virtual +/ int type() const;
248 
249     version(QT_NO_DATASTREAM){}else
250     {
251         /+ virtual +/ void read(ref QDataStream in_);
252         /+ virtual +/ void write(ref QDataStream out_) const;
253     }
254     pragma(mangle, mangleOpLess("QStandardItem"))
255     bool opLess(const QStandardItem other) const;
256 
257 protected:
258     /+ QStandardItem(const QStandardItem &other); +/
259     this(ref QStandardItemPrivate dd);
260     /+ QStandardItem &operator=(const QStandardItem &other); +/
261     QScopedPointer!(QStandardItemPrivate) d_ptr;
262 
263     final void emitDataChanged();
264 
265 private:
266     /+ Q_DECLARE_PRIVATE(QStandardItem) +/
267     /+ friend class QStandardItemModelPrivate; +/
268     /+ friend class QStandardItemModel; +/
269     mixin(CREATE_CONVENIENCE_WRAPPERS);
270 }
271 
272 /+ #ifndef QT_NO_STATUSTIP
273 #endif
274 
275 #if QT_CONFIG(whatsthis)
276 #endif +/
277 
278 extern(C++, class) struct QStandardItemModelPrivate;
279 
280 /// Binding for C++ class [QStandardItemModel](https://doc.qt.io/qt-6/qstandarditemmodel.html).
281 class /+ Q_GUI_EXPORT +/ QStandardItemModel : QAbstractItemModel
282 {
283     mixin(Q_OBJECT);
284     /+ Q_PROPERTY(int sortRole READ sortRole WRITE setSortRole BINDABLE bindableSortRole) +/
285 
286 public:
287     /+ explicit +/this(QObject parent = null);
288     this(int rows, int columns, QObject parent = null);
289     ~this();
290 
291     final void setItemRoleNames(ref const(QHash!(int,QByteArray)) roleNames);
292     override QHash!(int, QByteArray) roleNames() const;
293 
294     override QModelIndex index(int row, int column, ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
295     override QModelIndex parent(ref const(QModelIndex) child) const;
296 
297     override int rowCount(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
298     override int columnCount(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
299     override bool hasChildren(ref const(QModelIndex) parent = globalInitVar!QModelIndex) const;
300 
301     override QVariant data(ref const(QModelIndex) index, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole) const;
302     override void multiData(ref const(QModelIndex) index, QModelRoleDataSpan roleDataSpan) const;
303     override bool setData(ref const(QModelIndex) index, ref const(QVariant) value, int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.EditRole);
304     override bool clearItemData(ref const(QModelIndex) index);
305 
306     override QVariant headerData(int section, /+ Qt:: +/qt.core.namespace.Orientation orientation,
307                             int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole) const;
308     override bool setHeaderData(int section, /+ Qt:: +/qt.core.namespace.Orientation orientation, ref const(QVariant) value,
309                            int role = /+ Qt:: +/qt.core.namespace.ItemDataRole.EditRole);
310 
311     override bool insertRows(int row, int count, ref const(QModelIndex) parent = globalInitVar!QModelIndex);
312     override bool insertColumns(int column, int count, ref const(QModelIndex) parent = globalInitVar!QModelIndex);
313     override bool removeRows(int row, int count, ref const(QModelIndex) parent = globalInitVar!QModelIndex);
314     override bool removeColumns(int column, int count, ref const(QModelIndex) parent = globalInitVar!QModelIndex);
315 
316     override /+ Qt:: +/qt.core.namespace.ItemFlags flags(ref const(QModelIndex) index) const;
317     override /+ Qt:: +/qt.core.namespace.DropActions supportedDropActions() const;
318 
319     override QMap!(int, QVariant) itemData(ref const(QModelIndex) index) const;
320     override bool setItemData(ref const(QModelIndex) index, ref const(QMap!(int, QVariant)) roles);
321 
322     final void clear();
323 
324     /+ using QObject::parent; +/
325 
326     override void sort(int column, /+ Qt:: +/qt.core.namespace.SortOrder order = /+ Qt:: +/qt.core.namespace.SortOrder.AscendingOrder);
327 
328     final QStandardItem itemFromIndex(ref const(QModelIndex) index) const;
329     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
330     final QModelIndex indexFromItem(const(QStandardItem) item) const;
331     }));
332 
333     final QStandardItem item(int row, int column = 0) const;
334     final void setItem(int row, int column, QStandardItem item);
335     pragma(inline, true) final void setItem(int arow, QStandardItem aitem)
336     { setItem(arow, 0, aitem); }
337     final QStandardItem invisibleRootItem() const;
338 
339     final QStandardItem horizontalHeaderItem(int column) const;
340     final void setHorizontalHeaderItem(int column, QStandardItem item);
341     final QStandardItem verticalHeaderItem(int row) const;
342     final void setVerticalHeaderItem(int row, QStandardItem item);
343 
344     final void setHorizontalHeaderLabels(ref const(QStringList) labels);
345     final void setVerticalHeaderLabels(ref const(QStringList) labels);
346 
347     final void setRowCount(int rows);
348     final void setColumnCount(int columns);
349 
350     final void appendRow(ref const(QList!(QStandardItem)) items);
351     final void appendColumn(ref const(QList!(QStandardItem)) items);
352 /+    pragma(inline, true) final void appendRow(QStandardItem aitem)
353     { appendRow(cast(QStandardItem)(QList!(QStandardItem)() << aitem)); }
354 +/
355 
356     final void insertRow(int row, ref const(QList!(QStandardItem)) items);
357     final void insertColumn(int column, ref const(QList!(QStandardItem)) items);
358 /+    pragma(inline, true) final void insertRow(int arow, QStandardItem aitem)
359     { insertRow(arow, cast(QStandardItem)(QList!(QStandardItem)() << aitem)); }
360 +/
361 
362 /+    pragma(inline, true) final bool insertRow(int arow, ref const(QModelIndex) aparent = globalInitVar!QModelIndex)
363     { return QAbstractItemModel.insertRow(arow, aparent); }
364     pragma(inline, true) final bool insertColumn(int acolumn, ref const(QModelIndex) aparent = globalInitVar!QModelIndex)
365     { return QAbstractItemModel.insertColumn(acolumn, aparent); }+/
366 
367     final QStandardItem takeItem(int row, int column = 0);
368     final QList!(QStandardItem) takeRow(int row);
369     final QList!(QStandardItem) takeColumn(int column);
370 
371     final QStandardItem takeHorizontalHeaderItem(int column);
372     final QStandardItem takeVerticalHeaderItem(int row);
373 
374     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
375     final const(QStandardItem) itemPrototype() const;
376     }));
377     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
378     final void setItemPrototype(const(QStandardItem) item);
379     }));
380 
381     final QList!(QStandardItem) findItems(ref const(QString) text,
382                                         /+ Qt:: +/qt.core.namespace.MatchFlags flags = /+ Qt:: +/qt.core.namespace.MatchFlag.MatchExactly,
383                                         int column = 0) const;
384 
385     final int sortRole() const;
386     final void setSortRole(int role);
387     final QBindable!(int) bindableSortRole();
388 
389     override QStringList mimeTypes() const;
390     override QMimeData mimeData(ref const(QModelIndexList) indexes) const;
391     mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{
392     override bool dropMimeData (const(QMimeData) data, /+ Qt:: +/qt.core.namespace.DropAction action, int row, int column, ref const(QModelIndex) parent);
393     }));
394 
395 /+ Q_SIGNALS +/public:
396     @QSignal final void itemChanged(QStandardItem item);
397 
398 protected:
399     this(ref QStandardItemModelPrivate dd, QObject parent = null);
400 
401 private:
402     /+ friend class QStandardItemPrivate; +/
403     /+ friend class QStandardItem; +/
404     /+ Q_DISABLE_COPY(QStandardItemModel) +/
405     /+ Q_DECLARE_PRIVATE(QStandardItemModel) +/
406 
407     /+ Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &topLeft,
408                                                      const QModelIndex &bottomRight)) +/
409     mixin(CREATE_CONVENIENCE_WRAPPERS);
410 }
411 
412 /+ #ifndef QT_NO_DATASTREAM
413 Q_GUI_EXPORT QDataStream &operator>>(QDataStream &in, QStandardItem &item);
414 Q_GUI_EXPORT QDataStream &operator<<(QDataStream &out, const QStandardItem &item);
415 #endif +/
416