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.treewidget; 13 extern(C++): 14 15 import qt.config; 16 import qt.core.abstractitemmodel; 17 import qt.core.coreevent; 18 import qt.core.itemselectionmodel; 19 import qt.core.list; 20 import qt.core.mimedata; 21 import qt.core.namespace; 22 import qt.core.point; 23 import qt.core.rect; 24 import qt.core.size; 25 import qt.core.string; 26 import qt.core.stringlist; 27 import qt.core.variant; 28 import qt.gui.brush; 29 import qt.gui.color; 30 import qt.gui.event; 31 import qt.gui.font; 32 import qt.gui.icon; 33 import qt.helpers; 34 import qt.widgets.abstractitemview; 35 import qt.widgets.treeview; 36 import qt.widgets.treewidgetitemiterator; 37 import qt.widgets.widget; 38 import qt.widgets.widgetitemdata; 39 version(QT_NO_DATASTREAM){}else 40 import qt.core.datastream; 41 42 /+ QT_REQUIRE_CONFIG(treewidget); +/ 43 44 45 extern(C++, class) struct QTreeWidgetItemPrivate; 46 47 /// Binding for C++ class [QTreeWidgetItem](https://doc.qt.io/qt-6/qtreewidgetitem.html). 48 class /+ Q_WIDGETS_EXPORT +/ QTreeWidgetItem 49 { 50 private: 51 /+ friend class QTreeModel; +/ 52 /+ friend class QTreeWidget; +/ 53 /+ friend class QTreeWidgetPrivate; +/ 54 /+ friend class QTreeWidgetItemIterator; +/ 55 /+ friend class QTreeWidgetItemPrivate; +/ 56 public: 57 enum ItemType { Type = 0, UserType = 1000 } 58 /+ explicit +/this(int type = ItemType.Type); 59 /+ explicit +/this(ref const(QStringList) strings, int type = ItemType.Type); 60 /+ explicit +/this(QTreeWidget treeview, int type = ItemType.Type); 61 this(QTreeWidget treeview, ref const(QStringList) strings, int type = ItemType.Type); 62 this(QTreeWidget treeview, QTreeWidgetItem after, int type = ItemType.Type); 63 /+ explicit +/this(QTreeWidgetItem parent, int type = ItemType.Type); 64 this(QTreeWidgetItem parent, ref const(QStringList) strings, int type = ItemType.Type); 65 this(QTreeWidgetItem parent, QTreeWidgetItem after, int type = ItemType.Type); 66 /+ QTreeWidgetItem(const QTreeWidgetItem &other); +/ 67 /+ virtual +/~this(); 68 69 /+ virtual +/ QTreeWidgetItem clone() const; 70 71 pragma(inline, true) final QTreeWidget treeWidget() const { return cast(QTreeWidget)view; } 72 73 final void setSelected(bool select); 74 final bool isSelected() const; 75 76 final void setHidden(bool hide); 77 final bool isHidden() const; 78 79 final void setExpanded(bool expand); 80 final bool isExpanded() const; 81 82 final void setFirstColumnSpanned(bool span); 83 final bool isFirstColumnSpanned() const; 84 85 pragma(inline, true) final void setDisabled(bool disabled) 86 { setFlags(disabled ? (flags() & ~/+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsEnabled) : flags() | /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsEnabled); } 87 pragma(inline, true) final bool isDisabled() const 88 { return !(flags() & /+ Qt:: +/qt.core.namespace.ItemFlag.ItemIsEnabled); } 89 90 enum ChildIndicatorPolicy { ShowIndicator, DontShowIndicator, DontShowIndicatorWhenChildless } 91 final void setChildIndicatorPolicy(ChildIndicatorPolicy policy); 92 final ChildIndicatorPolicy childIndicatorPolicy() const; 93 94 final /+ Qt:: +/qt.core.namespace.ItemFlags flags() const; 95 final void setFlags(/+ Qt:: +/qt.core.namespace.ItemFlags flags); 96 97 pragma(inline, true) final QString text(int column) const 98 { return data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole).toString(); } 99 pragma(inline, true) final void setText(int column, ref const(QString) atext) 100 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole, atext); } 101 102 pragma(inline, true) final QIcon icon(int column) const 103 { return qvariant_cast!(QIcon)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole)); } 104 pragma(inline, true) final void setIcon(int column, ref const(QIcon) aicon) 105 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole, aicon); } 106 107 pragma(inline, true) final QString statusTip(int column) const 108 { return data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole).toString(); } 109 pragma(inline, true) final void setStatusTip(int column, ref const(QString) astatusTip) 110 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole, astatusTip); } 111 112 /+ #if QT_CONFIG(tooltip) +/ 113 pragma(inline, true) final QString toolTip(int column) const 114 { return data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole).toString(); } 115 pragma(inline, true) final void setToolTip(int column, ref const(QString) atoolTip) 116 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole, atoolTip); } 117 /+ #endif 118 119 #if QT_CONFIG(whatsthis) +/ 120 pragma(inline, true) final QString whatsThis(int column) const 121 { return data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole).toString(); } 122 pragma(inline, true) final void setWhatsThis(int column, ref const(QString) awhatsThis) 123 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole, awhatsThis); } 124 /+ #endif +/ 125 126 pragma(inline, true) final QFont font(int column) const 127 { return qvariant_cast!(QFont)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole)); } 128 pragma(inline, true) final void setFont(int column, ref const(QFont) afont) 129 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole, afont); } 130 131 pragma(inline, true) final int textAlignment(int column) const 132 { return data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole).toInt(); } 133 pragma(inline, true) final void setTextAlignment(int column, int alignment) 134 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole, alignment); } 135 136 pragma(inline, true) final QBrush background(int column) const 137 { return qvariant_cast!(QBrush)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole)); } 138 pragma(inline, true) final void setBackground(int column, ref const(QBrush) brush) 139 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole, brush.style() != /+ Qt:: +/qt.core.namespace.BrushStyle.NoBrush ? QVariant.fromValue(brush) : QVariant()); } 140 pragma(inline, true) final void setBackground(int column, const(QColor) color) 141 { setBackground(column, QBrush(color)); } 142 143 pragma(inline, true) final QBrush foreground(int column) const 144 { return qvariant_cast!(QBrush)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole)); } 145 pragma(inline, true) final void setForeground(int column, ref const(QBrush) brush) 146 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole, brush.style() != /+ Qt:: +/qt.core.namespace.BrushStyle.NoBrush ? QVariant.fromValue(brush) : QVariant()); } 147 148 pragma(inline, true) final /+ Qt:: +/qt.core.namespace.CheckState checkState(int column) const 149 { return static_cast!(/+ Qt:: +/qt.core.namespace.CheckState)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole).toInt()); } 150 pragma(inline, true) final void setCheckState(int column, /+ Qt:: +/qt.core.namespace.CheckState state) 151 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole, cast(int)state); } 152 153 pragma(inline, true) final QSize sizeHint(int column) const 154 { return qvariant_cast!(QSize)(data(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole)); } 155 pragma(inline, true) final void setSizeHint(int column, ref const(QSize) size) 156 { setData(column, /+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); } 157 158 /+ virtual +/ QVariant data(int column, int role) const; 159 /+ virtual +/ void setData(int column, int role, ref const(QVariant) value); 160 final void setData(T)(int column, int role, T value) 161 { 162 static if(is(const(T) == const(QVariant))) 163 QVariant v = value; 164 else 165 QVariant v = QVariant.fromValue(value); 166 setData(column, role, v); 167 } 168 169 pragma(mangle, mangleOpLess("QTreeWidgetItem")) 170 bool opLess(const(QTreeWidgetItem) other) const; 171 172 version(QT_NO_DATASTREAM){}else 173 { 174 /+ virtual +/ void read(ref QDataStream in_); 175 /+ virtual +/ void write(ref QDataStream out_) const; 176 } 177 /+ QTreeWidgetItem &operator=(const QTreeWidgetItem &other); +/ 178 179 pragma(inline, true) final QTreeWidgetItem parent() const { return cast(QTreeWidgetItem)par; } 180 pragma(inline, true) final QTreeWidgetItem child(int index) const { 181 if (index < 0 || index >= children.size()) 182 return null; 183 executePendingSort(); 184 return cast(QTreeWidgetItem)children.at(index); 185 } 186 pragma(inline, true) final int childCount() const { return cast(int)children.count(); } 187 pragma(inline, true) final int columnCount() const { return cast(int)values.count(); } 188 pragma(inline, true) final int indexOfChild(QTreeWidgetItem achild) const 189 { executePendingSort(); return cast(int)children.indexOf(achild); } 190 191 final void addChild(QTreeWidgetItem child); 192 final void insertChild(int index, QTreeWidgetItem child); 193 final void removeChild(QTreeWidgetItem child); 194 final QTreeWidgetItem takeChild(int index); 195 196 final void addChildren(ref const(QList!(QTreeWidgetItem)) children); 197 final void insertChildren(int index, ref const(QList!(QTreeWidgetItem)) children); 198 final QList!(QTreeWidgetItem) takeChildren(); 199 200 pragma(inline, true) final int type() const { return rtti; } 201 pragma(inline, true) final void sortChildren(int column, /+ Qt:: +/qt.core.namespace.SortOrder order) 202 { sortChildren(column, order, false); } 203 204 protected: 205 final void emitDataChanged(); 206 207 private: 208 final void sortChildren(int column, /+ Qt:: +/qt.core.namespace.SortOrder order, bool climb); 209 final QVariant childrenCheckState(int column) const; 210 final void itemChanged(); 211 final void executePendingSort() const; 212 final QTreeModel* treeModel(QTreeWidget v = null) const; 213 214 int rtti; 215 // One item has a vector of column entries. Each column has a vector of (role, value) pairs. 216 QList!(QList!(QWidgetItemData)) values; 217 QTreeWidget view; 218 QTreeWidgetItemPrivate* d; 219 QTreeWidgetItem par; 220 QList!(QTreeWidgetItem) children; 221 /+ Qt:: +/qt.core.namespace.ItemFlags itemFlags; 222 mixin(CREATE_CONVENIENCE_WRAPPERS); 223 } 224 225 /+ #if QT_CONFIG(statustip) 226 #endif 227 228 #if QT_CONFIG(tooltip) 229 #endif 230 231 #if QT_CONFIG(whatsthis) 232 #endif 233 234 #ifndef QT_NO_DATASTREAM 235 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTreeWidgetItem &item); 236 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTreeWidgetItem &item); 237 #endif +/ 238 239 extern(C++, class) struct QTreeWidgetPrivate; 240 241 /// Binding for C++ class [QTreeWidget](https://doc.qt.io/qt-6/qtreewidget.html). 242 class /+ Q_WIDGETS_EXPORT +/ QTreeWidget : QTreeView 243 { 244 mixin(Q_OBJECT); 245 /+ Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount) 246 Q_PROPERTY(int topLevelItemCount READ topLevelItemCount) +/ 247 248 /+ friend class QTreeModel; +/ 249 /+ friend class QTreeWidgetItem; +/ 250 public: 251 /+ explicit +/this(QWidget parent = null); 252 ~this(); 253 254 final int columnCount() const; 255 final void setColumnCount(int columns); 256 257 final QTreeWidgetItem invisibleRootItem() const; 258 final QTreeWidgetItem topLevelItem(int index) const; 259 final int topLevelItemCount() const; 260 final void insertTopLevelItem(int index, QTreeWidgetItem item); 261 final void addTopLevelItem(QTreeWidgetItem item); 262 final QTreeWidgetItem takeTopLevelItem(int index); 263 final int indexOfTopLevelItem(QTreeWidgetItem item) const; 264 265 final void insertTopLevelItems(int index, ref const(QList!(QTreeWidgetItem)) items); 266 final void addTopLevelItems(ref const(QList!(QTreeWidgetItem)) items); 267 268 final QTreeWidgetItem headerItem() const; 269 final void setHeaderItem(QTreeWidgetItem item); 270 final void setHeaderLabels(ref const(QStringList) labels); 271 /+ pragma(inline, true) final void setHeaderLabel(ref const(QString) alabel) 272 { auto tmp = QStringList(alabel); setHeaderLabels(tmp); }+/ 273 274 final QTreeWidgetItem currentItem() const; 275 final int currentColumn() const; 276 final void setCurrentItem(QTreeWidgetItem item); 277 final void setCurrentItem(QTreeWidgetItem item, int column); 278 final void setCurrentItem(QTreeWidgetItem item, int column, QItemSelectionModel.SelectionFlags command); 279 280 final QTreeWidgetItem itemAt(ref const(QPoint) p) const; 281 pragma(inline, true) final QTreeWidgetItem itemAt(int ax, int ay) const 282 { auto tmp = QPoint(ax, ay); return itemAt(tmp); } 283 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 284 final QRect visualItemRect(const(QTreeWidgetItem) item) const; 285 })); 286 287 final int sortColumn() const; 288 final void sortItems(int column, /+ Qt:: +/qt.core.namespace.SortOrder order); 289 290 final void editItem(QTreeWidgetItem item, int column = 0); 291 final void openPersistentEditor(QTreeWidgetItem item, int column = 0); 292 final void closePersistentEditor(QTreeWidgetItem item, int column = 0); 293 /+ using QAbstractItemView::isPersistentEditorOpen; +/ 294 final bool isPersistentEditorOpen(QTreeWidgetItem item, int column = 0) const; 295 296 final QWidget itemWidget(QTreeWidgetItem item, int column) const; 297 final void setItemWidget(QTreeWidgetItem item, int column, QWidget widget); 298 pragma(inline, true) final void removeItemWidget(QTreeWidgetItem item, int column) 299 { setItemWidget(item, column, null); } 300 301 final QList!(QTreeWidgetItem) selectedItems() const; 302 final QList!(QTreeWidgetItem) findItems(ref const(QString) text, /+ Qt:: +/qt.core.namespace.MatchFlags flags, 303 int column = 0) const; 304 305 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 306 final QTreeWidgetItem itemAbove(const(QTreeWidgetItem) item) const; 307 })); 308 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 309 final QTreeWidgetItem itemBelow(const(QTreeWidgetItem) item) const; 310 })); 311 312 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 313 final QModelIndex indexFromItem(const(QTreeWidgetItem) item, int column = 0) const; 314 })); 315 final QTreeWidgetItem itemFromIndex(ref const(QModelIndex) index) const; 316 317 override void setSelectionModel(QItemSelectionModel selectionModel); 318 319 public /+ Q_SLOTS +/: 320 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 321 @QSlot final void scrollToItem(const(QTreeWidgetItem) item, 322 QAbstractItemView.ScrollHint hint = ScrollHint.EnsureVisible); 323 })); 324 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 325 @QSlot final void expandItem(const(QTreeWidgetItem) item); 326 })); 327 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 328 @QSlot final void collapseItem(const(QTreeWidgetItem) item); 329 })); 330 @QSlot final void clear(); 331 332 /+ Q_SIGNALS +/public: 333 @QSignal final void itemPressed(QTreeWidgetItem item, int column); 334 @QSignal final void itemClicked(QTreeWidgetItem item, int column); 335 @QSignal final void itemDoubleClicked(QTreeWidgetItem item, int column); 336 @QSignal final void itemActivated(QTreeWidgetItem item, int column); 337 @QSignal final void itemEntered(QTreeWidgetItem item, int column); 338 @QSignal final void itemChanged(QTreeWidgetItem item, int column); 339 @QSignal final void itemExpanded(QTreeWidgetItem item); 340 @QSignal final void itemCollapsed(QTreeWidgetItem item); 341 @QSignal final void currentItemChanged(QTreeWidgetItem current, QTreeWidgetItem previous); 342 @QSignal final void itemSelectionChanged(); 343 344 protected: 345 override bool event(QEvent e); 346 /+ virtual +/ QStringList mimeTypes() const; 347 /+ virtual +/ QMimeData mimeData(ref const(QList!(QTreeWidgetItem)) items) const; 348 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 349 /+ virtual +/ bool dropMimeData(QTreeWidgetItem parent, int index, 350 const(QMimeData) data, /+ Qt:: +/qt.core.namespace.DropAction action); 351 })); 352 /+ virtual +/ /+ Qt:: +/qt.core.namespace.DropActions supportedDropActions() const; 353 354 /+ #if QT_CONFIG(draganddrop) +/ 355 override void dropEvent(QDropEvent event); 356 /+ #endif +/ 357 private: 358 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 359 protected override void setModel(QAbstractItemModel model); 360 })); 361 362 /+ Q_DECLARE_PRIVATE(QTreeWidget) +/ 363 /+ Q_DISABLE_COPY(QTreeWidget) +/ 364 365 /+ Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) 366 Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index)) 367 Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index)) 368 Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index)) 369 Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index)) 370 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index)) 371 Q_PRIVATE_SLOT(d_func(), void _q_emitItemExpanded(const QModelIndex &index)) 372 Q_PRIVATE_SLOT(d_func(), void _q_emitItemCollapsed(const QModelIndex &index)) 373 Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex ¤t)) 374 Q_PRIVATE_SLOT(d_func(), void _q_sort()) 375 Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)) 376 Q_PRIVATE_SLOT(d_func(), void _q_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected)) +/ 377 mixin(CREATE_CONVENIENCE_WRAPPERS); 378 } 379