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.listwidget; 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.event; 30 import qt.gui.font; 31 import qt.gui.icon; 32 import qt.helpers; 33 import qt.widgets.abstractitemview; 34 import qt.widgets.listview; 35 import qt.widgets.widget; 36 version(QT_NO_DATASTREAM){}else 37 import qt.core.datastream; 38 39 /+ QT_REQUIRE_CONFIG(listwidget); +/ 40 41 42 extern(C++, class) struct QListModel; 43 extern(C++, class) struct QListWidgetItemPrivate; 44 45 /// Binding for C++ class [QListWidgetItem](https://doc.qt.io/qt-6/qlistwidgetitem.html). 46 class /+ Q_WIDGETS_EXPORT +/ QListWidgetItem 47 { 48 private: 49 /+ friend class QListModel; +/ 50 /+ friend class QListWidget; +/ 51 public: 52 enum ItemType { Type = 0, UserType = 1000 } 53 /+ explicit +/this(QListWidget listview = null, int type = ItemType.Type); 54 /+ explicit +/this(ref const(QString) text, QListWidget listview = null, int type = ItemType.Type); 55 /+ explicit +/this(ref const(QIcon) icon, ref const(QString) text, 56 QListWidget listview = null, int type = ItemType.Type); 57 /+ QListWidgetItem(const QListWidgetItem &other); +/ 58 /+ virtual +/~this(); 59 60 /+ virtual +/ QListWidgetItem clone() const; 61 62 pragma(inline, true) final QListWidget listWidget() const { return cast(QListWidget)view; } 63 64 final void setSelected(bool select); 65 final bool isSelected() const; 66 67 pragma(inline, true) final void setHidden(bool ahide) 68 { if (view) view.setRowHidden(view.row(this), ahide); } 69 pragma(inline, true) final bool isHidden() const 70 { return (view ? view.isRowHidden(view.row(this)) : false); } 71 72 pragma(inline, true) final /+ Qt:: +/qt.core.namespace.ItemFlags flags() const { return itemFlags; } 73 final void setFlags(/+ Qt:: +/qt.core.namespace.ItemFlags flags); 74 75 pragma(inline, true) final QString text() const 76 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole).toString(); } 77 pragma(inline, true) final void setText(ref const(QString) atext) 78 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole, atext); } 79 80 /+ pragma(inline, true) final QIcon icon() const 81 { return qvariant_cast!(QIcon)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole)); } 82 pragma(inline, true) final void setIcon(ref const(QIcon) aicon) 83 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole, aicon); }+/ 84 85 pragma(inline, true) final QString statusTip() const 86 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole).toString(); } 87 pragma(inline, true) final void setStatusTip(ref const(QString) astatusTip) 88 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole, astatusTip); } 89 90 /+ #if QT_CONFIG(tooltip) +/ 91 pragma(inline, true) final QString toolTip() const 92 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole).toString(); } 93 pragma(inline, true) final void setToolTip(ref const(QString) atoolTip) 94 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole, atoolTip); } 95 /+ #endif 96 97 #if QT_CONFIG(whatsthis) +/ 98 pragma(inline, true) final QString whatsThis() const 99 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole).toString(); } 100 pragma(inline, true) final void setWhatsThis(ref const(QString) awhatsThis) 101 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole, awhatsThis); } 102 /+ #endif +/ 103 104 pragma(inline, true) final QFont font() const 105 { return qvariant_cast!(QFont)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole)); } 106 pragma(inline, true) final void setFont(ref const(QFont) afont) 107 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole, afont); } 108 109 pragma(inline, true) final int textAlignment() const 110 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole).toInt(); } 111 pragma(inline, true) final void setTextAlignment(int alignment) 112 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole, alignment); } 113 114 pragma(inline, true) final QBrush background() const 115 { return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole)); } 116 pragma(inline, true) final void setBackground(ref const(QBrush) brush) 117 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole, brush.style() != /+ Qt:: +/qt.core.namespace.BrushStyle.NoBrush ? QVariant.fromValue(brush) : QVariant()); } 118 119 pragma(inline, true) final QBrush foreground() const 120 { return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole)); } 121 pragma(inline, true) final void setForeground(ref const(QBrush) brush) 122 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole, brush.style() != /+ Qt:: +/qt.core.namespace.BrushStyle.NoBrush ? QVariant.fromValue(brush) : QVariant()); } 123 124 pragma(inline, true) final /+ Qt:: +/qt.core.namespace.CheckState checkState() const 125 { return static_cast!(/+ Qt:: +/qt.core.namespace.CheckState)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole).toInt()); } 126 pragma(inline, true) final void setCheckState(/+ Qt:: +/qt.core.namespace.CheckState state) 127 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole, static_cast!(int)(state)); } 128 129 pragma(inline, true) final QSize sizeHint() const 130 { return qvariant_cast!(QSize)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole)); } 131 pragma(inline, true) final void setSizeHint(ref const(QSize) size) 132 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole, size.isValid() ? QVariant.fromValue(size) : QVariant()); } 133 134 /+ virtual +/ QVariant data(int role) const; 135 /+ virtual +/ void setData(int role, ref const(QVariant) value); 136 final void setData(T)(int role, T value) 137 { 138 static if(is(const(T) == const(QVariant))) 139 QVariant v = value; 140 else 141 QVariant v = QVariant.fromValue(value); 142 setData(role, v); 143 } 144 145 pragma(mangle, mangleOpLess("QListWidgetItem")) 146 bool opLess(const QListWidgetItem other) const; 147 148 version(QT_NO_DATASTREAM){}else 149 { 150 /+ virtual +/ void read(ref QDataStream in_); 151 /+ virtual +/ void write(ref QDataStream out_) const; 152 } 153 /+ QListWidgetItem &operator=(const QListWidgetItem &other); +/ 154 155 pragma(inline, true) final int type() const { return rtti; } 156 157 private: 158 final QListModel* listModel() const; 159 int rtti; 160 QListWidget view; 161 QListWidgetItemPrivate* d; 162 /+ Qt:: +/qt.core.namespace.ItemFlags itemFlags; 163 mixin(CREATE_CONVENIENCE_WRAPPERS); 164 } 165 166 /+ #if QT_CONFIG(tooltip) 167 #endif 168 169 #if QT_CONFIG(whatsthis) 170 #endif 171 172 #ifndef QT_NO_DATASTREAM 173 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QListWidgetItem &item); 174 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QListWidgetItem &item); 175 #endif +/ 176 177 extern(C++, class) struct QListWidgetPrivate; 178 179 /// Binding for C++ class [QListWidget](https://doc.qt.io/qt-6/qlistwidget.html). 180 class /+ Q_WIDGETS_EXPORT +/ QListWidget : QListView 181 { 182 mixin(Q_OBJECT); 183 /+ Q_PROPERTY(int count READ count) 184 Q_PROPERTY(int currentRow READ currentRow WRITE setCurrentRow NOTIFY currentRowChanged 185 USER true) 186 Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled) +/ 187 188 /+ friend class QListWidgetItem; +/ 189 /+ friend class QListModel; +/ 190 public: 191 /+ explicit +/this(QWidget parent = null); 192 ~this(); 193 194 override void setSelectionModel(QItemSelectionModel selectionModel); 195 196 final QListWidgetItem item(int row) const; 197 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 198 final int row(const(QListWidgetItem) item) const; 199 })); 200 final void insertItem(int row, QListWidgetItem item); 201 final void insertItem(int row, ref const(QString) label); 202 final void insertItems(int row, ref const(QStringList) labels); 203 pragma(inline, true) final void addItem(ref const(QString) label) { insertItem(count(), label); } 204 pragma(inline, true) final void addItem(QListWidgetItem aitem) 205 { insertItem(count(), aitem); } 206 pragma(inline, true) final void addItems(ref const(QStringList) labels) { insertItems(count(), labels); } 207 final QListWidgetItem takeItem(int row); 208 final int count() const; 209 210 final QListWidgetItem currentItem() const; 211 final void setCurrentItem(QListWidgetItem item); 212 final void setCurrentItem(QListWidgetItem item, QItemSelectionModel.SelectionFlags command); 213 214 final int currentRow() const; 215 final void setCurrentRow(int row); 216 final void setCurrentRow(int row, QItemSelectionModel.SelectionFlags command); 217 218 final QListWidgetItem itemAt(ref const(QPoint) p) const; 219 pragma(inline, true) final QListWidgetItem itemAt(int ax, int ay) const 220 { auto tmp = QPoint(ax, ay); return itemAt(tmp); } 221 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 222 final QRect visualItemRect(const(QListWidgetItem) item) const; 223 })); 224 225 final void sortItems(/+ Qt:: +/qt.core.namespace.SortOrder order = /+ Qt:: +/qt.core.namespace.SortOrder.AscendingOrder); 226 final void setSortingEnabled(bool enable); 227 final bool isSortingEnabled() const; 228 229 final void editItem(QListWidgetItem item); 230 final void openPersistentEditor(QListWidgetItem item); 231 final void closePersistentEditor(QListWidgetItem item); 232 /+ using QAbstractItemView::isPersistentEditorOpen; +/ 233 final bool isPersistentEditorOpen(QListWidgetItem item) const; 234 235 final QWidget itemWidget(QListWidgetItem item) const; 236 final void setItemWidget(QListWidgetItem item, QWidget widget); 237 pragma(inline, true) final void removeItemWidget(QListWidgetItem aItem) 238 { setItemWidget(aItem, null); } 239 240 final QList!(QListWidgetItem) selectedItems() const; 241 final QList!(QListWidgetItem) findItems(ref const(QString) text, /+ Qt:: +/qt.core.namespace.MatchFlags flags) const; 242 243 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 244 final QList!(QListWidgetItem) items(const(QMimeData) data) const; 245 })); 246 247 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 248 final QModelIndex indexFromItem(const(QListWidgetItem) item) const; 249 })); 250 final QListWidgetItem itemFromIndex(ref const(QModelIndex) index) const; 251 252 protected: 253 /+ #if QT_CONFIG(draganddrop) +/ 254 override void dropEvent(QDropEvent event); 255 /+ #endif +/ 256 public /+ Q_SLOTS +/: 257 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 258 @QSlot final void scrollToItem(const(QListWidgetItem) item, QAbstractItemView.ScrollHint hint = ScrollHint.EnsureVisible); 259 })); 260 @QSlot final void clear(); 261 262 /+ Q_SIGNALS +/public: 263 @QSignal final void itemPressed(QListWidgetItem item); 264 @QSignal final void itemClicked(QListWidgetItem item); 265 @QSignal final void itemDoubleClicked(QListWidgetItem item); 266 @QSignal final void itemActivated(QListWidgetItem item); 267 @QSignal final void itemEntered(QListWidgetItem item); 268 @QSignal final void itemChanged(QListWidgetItem item); 269 270 @QSignal final void currentItemChanged(QListWidgetItem current, QListWidgetItem previous); 271 @QSignal final void currentTextChanged(ref const(QString) currentText); 272 @QSignal final void currentRowChanged(int currentRow); 273 274 @QSignal final void itemSelectionChanged(); 275 276 protected: 277 override bool event(QEvent e); 278 /+ virtual +/ QStringList mimeTypes() const; 279 /+ virtual +/ QMimeData mimeData(ref const(QList!(QListWidgetItem)) items) const; 280 /+ #if QT_CONFIG(draganddrop) +/ 281 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 282 /+ virtual +/ bool dropMimeData(int index, const(QMimeData) data, /+ Qt:: +/qt.core.namespace.DropAction action); 283 })); 284 /+ virtual +/ /+ Qt:: +/qt.core.namespace.DropActions supportedDropActions() const; 285 /+ #endif +/ 286 287 private: 288 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 289 protected override void setModel(QAbstractItemModel model); 290 })); 291 final /+ Qt:: +/qt.core.namespace.SortOrder sortOrder() const; 292 293 /+ Q_DECLARE_PRIVATE(QListWidget) +/ 294 /+ Q_DISABLE_COPY(QListWidget) +/ 295 296 /+ Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) 297 Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index)) 298 Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index)) 299 Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index)) 300 Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index)) 301 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index)) 302 Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex ¤t)) 303 Q_PRIVATE_SLOT(d_func(), void _q_sort()) 304 Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)) +/ 305 mixin(CREATE_CONVENIENCE_WRAPPERS); 306 } 307