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