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.tablewidget; 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.tableview; 35 import qt.widgets.widget; 36 import qt.widgets.widgetitemdata; 37 version(QT_NO_DATASTREAM){}else 38 import qt.core.datastream; 39 40 /+ QT_REQUIRE_CONFIG(tablewidget); +/ 41 42 43 /// Binding for C++ class [QTableWidgetSelectionRange](https://doc.qt.io/qt-6/qtablewidgetselectionrange.html). 44 extern(C++, class) struct QTableWidgetSelectionRange 45 { 46 public: 47 /+ QTableWidgetSelectionRange() = default; +/ 48 this(int top, int left, int bottom, int right) 49 { 50 this.m_top = top; 51 this.m_left = left; 52 this.m_bottom = bottom; 53 this.m_right = right; 54 } 55 56 pragma(inline, true) int topRow() const { return m_top; } 57 pragma(inline, true) int bottomRow() const { return m_bottom; } 58 pragma(inline, true) int leftColumn() const { return m_left; } 59 pragma(inline, true) int rightColumn() const { return m_right; } 60 pragma(inline, true) int rowCount() const { return m_bottom - m_top + 1; } 61 pragma(inline, true) int columnCount() const { return m_right - m_left + 1; } 62 private: 63 int m_top = -1; int m_left = -1; int m_bottom = -2; int m_right = -2; 64 mixin(CREATE_CONVENIENCE_WRAPPERS); 65 } 66 67 extern(C++, class) struct QTableModel; 68 extern(C++, class) struct QTableWidgetItemPrivate; 69 70 /// Binding for C++ class [QTableWidgetItem](https://doc.qt.io/qt-6/qtablewidgetitem.html). 71 class /+ Q_WIDGETS_EXPORT +/ QTableWidgetItem 72 { 73 private: 74 /+ friend class QTableWidget; +/ 75 /+ friend class QTableModel; +/ 76 public: 77 enum ItemType { Type = 0, UserType = 1000 } 78 /+ explicit +/this(int type = ItemType.Type); 79 /+ explicit +/this(ref const(QString) text, int type = ItemType.Type); 80 /+ explicit +/this(ref const(QIcon) icon, ref const(QString) text, int type = ItemType.Type); 81 /+ QTableWidgetItem(const QTableWidgetItem &other); +/ 82 /+ virtual +/~this(); 83 84 /+ virtual +/ QTableWidgetItem clone() const; 85 86 pragma(inline, true) final QTableWidget tableWidget() const { return cast(QTableWidget)view; } 87 88 pragma(inline, true) final int row() const 89 { return (view ? view.row(this) : -1); } 90 pragma(inline, true) final int column() const 91 { return (view ? view.column(this) : -1); } 92 93 final void setSelected(bool select); 94 final bool isSelected() const; 95 96 pragma(inline, true) final /+ Qt:: +/qt.core.namespace.ItemFlags flags() const { return itemFlags; } 97 final void setFlags(/+ Qt:: +/qt.core.namespace.ItemFlags flags); 98 99 pragma(inline, true) final QString text() const 100 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole).toString(); } 101 pragma(inline, true) final void setText(ref const(QString) atext) 102 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.DisplayRole, atext); } 103 104 pragma(inline, true) final QIcon icon() const 105 { return qvariant_cast!(QIcon)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole)); } 106 pragma(inline, true) final void setIcon(ref const(QIcon) aicon) 107 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.DecorationRole, aicon); } 108 109 pragma(inline, true) final QString statusTip() const 110 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole).toString(); } 111 pragma(inline, true) final void setStatusTip(ref const(QString) astatusTip) 112 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.StatusTipRole, astatusTip); } 113 114 /+ #if QT_CONFIG(tooltip) +/ 115 pragma(inline, true) final QString toolTip() const 116 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole).toString(); } 117 pragma(inline, true) final void setToolTip(ref const(QString) atoolTip) 118 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.ToolTipRole, atoolTip); } 119 /+ #endif 120 121 #if QT_CONFIG(whatsthis) +/ 122 pragma(inline, true) final QString whatsThis() const 123 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole).toString(); } 124 pragma(inline, true) final void setWhatsThis(ref const(QString) awhatsThis) 125 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.WhatsThisRole, awhatsThis); } 126 /+ #endif +/ 127 128 pragma(inline, true) final QFont font() const 129 { return qvariant_cast!(QFont)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole)); } 130 pragma(inline, true) final void setFont(ref const(QFont) afont) 131 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.FontRole, afont); } 132 133 pragma(inline, true) final int textAlignment() const 134 { return data(/+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole).toInt(); } 135 pragma(inline, true) final void setTextAlignment(int alignment) 136 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.TextAlignmentRole, alignment); } 137 138 pragma(inline, true) final QBrush background() const 139 { return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole)); } 140 pragma(inline, true) final void setBackground(ref const(QBrush) brush) 141 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.BackgroundRole, brush.style() != /+ Qt:: +/qt.core.namespace.BrushStyle.NoBrush ? QVariant.fromValue(brush) : QVariant()); } 142 143 pragma(inline, true) final QBrush foreground() const 144 { return qvariant_cast!(QBrush)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.ForegroundRole)); } 145 pragma(inline, true) final void setForeground(ref const(QBrush) brush) 146 { setData(/+ 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() const 149 { return static_cast!(/+ Qt:: +/qt.core.namespace.CheckState)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole).toInt()); } 150 pragma(inline, true) final void setCheckState(/+ Qt:: +/qt.core.namespace.CheckState state) 151 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.CheckStateRole, cast(int)state); } 152 153 pragma(inline, true) final QSize sizeHint() const 154 { return qvariant_cast!(QSize)(data(/+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole)); } 155 pragma(inline, true) final void setSizeHint(ref const(QSize) size) 156 { setData(/+ Qt:: +/qt.core.namespace.ItemDataRole.SizeHintRole, size.isValid() ? QVariant(size) : QVariant()); } 157 158 /+ virtual +/ QVariant data(int role) const; 159 /+ virtual +/ void setData(int role, ref const(QVariant) value); 160 final void setData(T)(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(role, v); 167 } 168 169 pragma(mangle, mangleOpLess("QTableWidgetItem")) 170 bool opLess(const QTableWidgetItem 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 /+ QTableWidgetItem &operator=(const QTableWidgetItem &other); +/ 178 179 pragma(inline, true) final int type() const { return rtti; } 180 181 private: 182 final QTableModel* tableModel() const; 183 184 private: 185 int rtti; 186 QList!(QWidgetItemData) values; 187 QTableWidget view; 188 QTableWidgetItemPrivate* d; 189 /+ Qt:: +/qt.core.namespace.ItemFlags itemFlags; 190 mixin(CREATE_CONVENIENCE_WRAPPERS); 191 } 192 193 /+ #if QT_CONFIG(tooltip) 194 #endif 195 196 #if QT_CONFIG(whatsthis) 197 #endif 198 199 #ifndef QT_NO_DATASTREAM 200 Q_WIDGETS_EXPORT QDataStream &operator>>(QDataStream &in, QTableWidgetItem &item); 201 Q_WIDGETS_EXPORT QDataStream &operator<<(QDataStream &out, const QTableWidgetItem &item); 202 #endif +/ 203 204 extern(C++, class) struct QTableWidgetPrivate; 205 206 /// Binding for C++ class [QTableWidget](https://doc.qt.io/qt-6/qtablewidget.html). 207 class /+ Q_WIDGETS_EXPORT +/ QTableWidget : QTableView 208 { 209 mixin(Q_OBJECT); 210 /+ Q_PROPERTY(int rowCount READ rowCount WRITE setRowCount) 211 Q_PROPERTY(int columnCount READ columnCount WRITE setColumnCount) +/ 212 213 /+ friend class QTableModel; +/ 214 public: 215 /+ explicit +/this(QWidget parent = null); 216 this(int rows, int columns, QWidget parent = null); 217 ~this(); 218 219 final void setRowCount(int rows); 220 final int rowCount() const; 221 222 final void setColumnCount(int columns); 223 final int columnCount() const; 224 225 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 226 final int row(const(QTableWidgetItem) item) const; 227 })); 228 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 229 final int column(const(QTableWidgetItem) item) const; 230 })); 231 232 final QTableWidgetItem item(int row, int column) const; 233 final void setItem(int row, int column, QTableWidgetItem item); 234 final QTableWidgetItem takeItem(int row, int column); 235 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 236 final QList!(QTableWidgetItem) items(const(QMimeData) data) const; 237 })); 238 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 239 final QModelIndex indexFromItem(const(QTableWidgetItem) item) const; 240 })); 241 final QTableWidgetItem itemFromIndex(ref const(QModelIndex) index) const; 242 243 final QTableWidgetItem verticalHeaderItem(int row) const; 244 final void setVerticalHeaderItem(int row, QTableWidgetItem item); 245 final QTableWidgetItem takeVerticalHeaderItem(int row); 246 247 final QTableWidgetItem horizontalHeaderItem(int column) const; 248 final void setHorizontalHeaderItem(int column, QTableWidgetItem item); 249 final QTableWidgetItem takeHorizontalHeaderItem(int column); 250 final void setVerticalHeaderLabels(ref const(QStringList) labels); 251 final void setHorizontalHeaderLabels(ref const(QStringList) labels); 252 253 final int currentRow() const; 254 final int currentColumn() const; 255 final QTableWidgetItem currentItem() const; 256 final void setCurrentItem(QTableWidgetItem item); 257 final void setCurrentItem(QTableWidgetItem item, QItemSelectionModel.SelectionFlags command); 258 final void setCurrentCell(int row, int column); 259 final void setCurrentCell(int row, int column, QItemSelectionModel.SelectionFlags command); 260 261 final void sortItems(int column, /+ Qt:: +/qt.core.namespace.SortOrder order = /+ Qt:: +/qt.core.namespace.SortOrder.AscendingOrder); 262 // final void setSortingEnabled(bool enable); 263 // final bool isSortingEnabled() const; 264 265 final void editItem(QTableWidgetItem item); 266 final void openPersistentEditor(QTableWidgetItem item); 267 final void closePersistentEditor(QTableWidgetItem item); 268 /+ using QAbstractItemView::isPersistentEditorOpen; +/ 269 final bool isPersistentEditorOpen(QTableWidgetItem item) const; 270 271 final QWidget cellWidget(int row, int column) const; 272 final void setCellWidget(int row, int column, QWidget widget); 273 pragma(inline, true) final void removeCellWidget(int arow, int acolumn) 274 { setCellWidget(arow, acolumn, null); } 275 276 final void setRangeSelected(ref const(QTableWidgetSelectionRange) range, bool select); 277 278 final QList!(QTableWidgetSelectionRange) selectedRanges() const; 279 final QList!(QTableWidgetItem) selectedItems() const; 280 final QList!(QTableWidgetItem) findItems(ref const(QString) text, /+ Qt:: +/qt.core.namespace.MatchFlags flags) const; 281 282 final int visualRow(int logicalRow) const; 283 final int visualColumn(int logicalColumn) const; 284 285 final QTableWidgetItem itemAt(ref const(QPoint) p) const; 286 pragma(inline, true) final QTableWidgetItem itemAt(int ax, int ay) const 287 { auto tmp = QPoint(ax, ay); return itemAt(tmp); } 288 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 289 final QRect visualItemRect(const(QTableWidgetItem) item) const; 290 })); 291 292 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 293 final const(QTableWidgetItem) itemPrototype() const; 294 })); 295 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 296 final void setItemPrototype(const(QTableWidgetItem) item); 297 })); 298 299 public /+ Q_SLOTS +/: 300 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 301 @QSlot final void scrollToItem(const(QTableWidgetItem) item, QAbstractItemView.ScrollHint hint = ScrollHint.EnsureVisible); 302 })); 303 @QSlot final void insertRow(int row); 304 @QSlot final void insertColumn(int column); 305 @QSlot final void removeRow(int row); 306 @QSlot final void removeColumn(int column); 307 @QSlot final void clear(); 308 @QSlot final void clearContents(); 309 310 /+ Q_SIGNALS +/public: 311 @QSignal final void itemPressed(QTableWidgetItem item); 312 @QSignal final void itemClicked(QTableWidgetItem item); 313 @QSignal final void itemDoubleClicked(QTableWidgetItem item); 314 315 @QSignal final void itemActivated(QTableWidgetItem item); 316 @QSignal final void itemEntered(QTableWidgetItem item); 317 @QSignal final void itemChanged(QTableWidgetItem item); 318 319 @QSignal final void currentItemChanged(QTableWidgetItem current, QTableWidgetItem previous); 320 @QSignal final void itemSelectionChanged(); 321 322 @QSignal final void cellPressed(int row, int column); 323 @QSignal final void cellClicked(int row, int column); 324 @QSignal final void cellDoubleClicked(int row, int column); 325 326 @QSignal final void cellActivated(int row, int column); 327 @QSignal final void cellEntered(int row, int column); 328 @QSignal final void cellChanged(int row, int column); 329 330 @QSignal final void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn); 331 332 protected: 333 override bool event(QEvent e); 334 /+ virtual +/ QStringList mimeTypes() const; 335 /+ virtual +/ QMimeData mimeData(ref const(QList!(QTableWidgetItem)) items) const; 336 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 337 /+ virtual +/ bool dropMimeData(int row, int column, const(QMimeData) data, qt.core.namespace.DropAction action); 338 })); 339 /+ virtual +/ /+ Qt:: +/qt.core.namespace.DropActions supportedDropActions() const; 340 341 protected: 342 /+ #if QT_CONFIG(draganddrop) +/ 343 override void dropEvent(QDropEvent event); 344 /+ #endif +/ 345 private: 346 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 347 protected override void setModel(QAbstractItemModel model); 348 })); 349 350 /+ Q_DECLARE_PRIVATE(QTableWidget) +/ 351 /+ Q_DISABLE_COPY(QTableWidget) +/ 352 353 /+ Q_PRIVATE_SLOT(d_func(), void _q_emitItemPressed(const QModelIndex &index)) 354 Q_PRIVATE_SLOT(d_func(), void _q_emitItemClicked(const QModelIndex &index)) 355 Q_PRIVATE_SLOT(d_func(), void _q_emitItemDoubleClicked(const QModelIndex &index)) 356 Q_PRIVATE_SLOT(d_func(), void _q_emitItemActivated(const QModelIndex &index)) 357 Q_PRIVATE_SLOT(d_func(), void _q_emitItemEntered(const QModelIndex &index)) 358 Q_PRIVATE_SLOT(d_func(), void _q_emitItemChanged(const QModelIndex &index)) 359 Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentItemChanged(const QModelIndex &previous, const QModelIndex ¤t)) 360 Q_PRIVATE_SLOT(d_func(), void _q_sort()) 361 Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)) +/ 362 mixin(CREATE_CONVENIENCE_WRAPPERS); 363 } 364