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.abstractitemview; 13 extern(C++): 14 15 import qt.config; 16 import qt.core.abstractitemmodel; 17 import qt.core.coreevent; 18 import qt.core.flags; 19 import qt.core.itemselectionmodel; 20 import qt.core.list; 21 import qt.core.namespace; 22 import qt.core.object; 23 import qt.core.point; 24 import qt.core.rect; 25 import qt.core.size; 26 import qt.core.string; 27 import qt.core.variant; 28 import qt.gui.event; 29 import qt.gui.region; 30 import qt.helpers; 31 import qt.widgets.abstractitemdelegate; 32 import qt.widgets.abstractscrollarea; 33 import qt.widgets.styleoption; 34 import qt.widgets.widget; 35 36 extern(C++, class) struct tst_QAbstractItemView; 37 extern(C++, class) struct tst_QTreeView; 38 39 /+ QT_REQUIRE_CONFIG(itemviews); +/ 40 41 42 extern(C++, class) struct QAbstractItemViewPrivate; 43 44 /// Binding for C++ class [QAbstractItemView](https://doc.qt.io/qt-6/qabstractitemview.html). 45 abstract class /+ Q_WIDGETS_EXPORT +/ QAbstractItemView : QAbstractScrollArea 46 { 47 mixin(Q_OBJECT); 48 /+ Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll) 49 Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin) 50 Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers) 51 Q_PROPERTY(bool tabKeyNavigation READ tabKeyNavigation WRITE setTabKeyNavigation) 52 #if QT_CONFIG(draganddrop) 53 Q_PROPERTY(bool showDropIndicator READ showDropIndicator WRITE setDropIndicatorShown) 54 Q_PROPERTY(bool dragEnabled READ dragEnabled WRITE setDragEnabled) 55 Q_PROPERTY(bool dragDropOverwriteMode READ dragDropOverwriteMode WRITE setDragDropOverwriteMode) 56 Q_PROPERTY(DragDropMode dragDropMode READ dragDropMode WRITE setDragDropMode) 57 Q_PROPERTY(Qt::DropAction defaultDropAction READ defaultDropAction WRITE setDefaultDropAction) 58 #endif 59 Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors) 60 Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) 61 Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior 62 WRITE setSelectionBehavior) 63 Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged) 64 Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode) 65 Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode 66 RESET resetVerticalScrollMode) 67 Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode 68 WRITE setHorizontalScrollMode RESET resetHorizontalScrollMode) +/ 69 70 public: 71 enum SelectionMode { 72 NoSelection, 73 SingleSelection, 74 MultiSelection, 75 ExtendedSelection, 76 ContiguousSelection 77 } 78 /+ Q_ENUM(SelectionMode) +/ 79 80 enum SelectionBehavior { 81 SelectItems, 82 SelectRows, 83 SelectColumns 84 } 85 /+ Q_ENUM(SelectionBehavior) +/ 86 87 enum ScrollHint { 88 EnsureVisible, 89 PositionAtTop, 90 PositionAtBottom, 91 PositionAtCenter 92 } 93 /+ Q_ENUM(ScrollHint) +/ 94 95 enum EditTrigger { 96 NoEditTriggers = 0, 97 CurrentChanged = 1, 98 DoubleClicked = 2, 99 SelectedClicked = 4, 100 EditKeyPressed = 8, 101 AnyKeyPressed = 16, 102 AllEditTriggers = 31 103 } 104 105 /+ Q_DECLARE_FLAGS(EditTriggers, EditTrigger) +/ 106 alias EditTriggers = QFlags!(EditTrigger); /+ Q_FLAG(EditTriggers) +/ 107 108 enum ScrollMode { 109 ScrollPerItem, 110 ScrollPerPixel 111 } 112 /+ Q_ENUM(ScrollMode) +/ 113 114 mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{ 115 /+ explicit +/this(QWidget parent = null); 116 })); 117 ~this(); 118 119 /+ virtual +/ void setModel(QAbstractItemModel model); 120 final QAbstractItemModel model() const; 121 122 /+ virtual +/ void setSelectionModel(QItemSelectionModel selectionModel); 123 final QItemSelectionModel selectionModel() const; 124 125 final void setItemDelegate(QAbstractItemDelegate delegate_); 126 final QAbstractItemDelegate itemDelegate() const; 127 128 final void setSelectionMode(SelectionMode mode); 129 final SelectionMode selectionMode() const; 130 131 final void setSelectionBehavior(SelectionBehavior behavior); 132 final SelectionBehavior selectionBehavior() const; 133 134 final QModelIndex currentIndex() const; 135 final QModelIndex rootIndex() const; 136 137 final void setEditTriggers(EditTriggers triggers); 138 final EditTriggers editTriggers() const; 139 140 final void setVerticalScrollMode(ScrollMode mode); 141 final ScrollMode verticalScrollMode() const; 142 final void resetVerticalScrollMode(); 143 144 final void setHorizontalScrollMode(ScrollMode mode); 145 final ScrollMode horizontalScrollMode() const; 146 final void resetHorizontalScrollMode(); 147 148 final void setAutoScroll(bool enable); 149 final bool hasAutoScroll() const; 150 151 final void setAutoScrollMargin(int margin); 152 final int autoScrollMargin() const; 153 154 final void setTabKeyNavigation(bool enable); 155 final bool tabKeyNavigation() const; 156 157 /+ #if QT_CONFIG(draganddrop) +/ 158 final void setDropIndicatorShown(bool enable); 159 final bool showDropIndicator() const; 160 161 final void setDragEnabled(bool enable); 162 final bool dragEnabled() const; 163 164 final void setDragDropOverwriteMode(bool overwrite); 165 final bool dragDropOverwriteMode() const; 166 167 enum DragDropMode { 168 NoDragDrop, 169 DragOnly, 170 DropOnly, 171 DragDrop, 172 InternalMove 173 } 174 /+ Q_ENUM(DragDropMode) +/ 175 176 final void setDragDropMode(DragDropMode behavior); 177 final DragDropMode dragDropMode() const; 178 179 final void setDefaultDropAction(/+ Qt:: +/qt.core.namespace.DropAction dropAction); 180 final /+ Qt:: +/qt.core.namespace.DropAction defaultDropAction() const; 181 /+ #endif +/ 182 183 final void setAlternatingRowColors(bool enable); 184 final bool alternatingRowColors() const; 185 186 final void setIconSize(ref const(QSize) size); 187 final QSize iconSize() const; 188 189 final void setTextElideMode(/+ Qt:: +/qt.core.namespace.TextElideMode mode); 190 final /+ Qt:: +/qt.core.namespace.TextElideMode textElideMode() const; 191 192 /+ virtual +/ void keyboardSearch(ref const(QString) search); 193 194 /+ virtual +/ abstract QRect visualRect(ref const(QModelIndex) index) const; 195 /+ virtual +/ abstract void scrollTo(ref const(QModelIndex) index, ScrollHint hint = ScrollHint.EnsureVisible); 196 /+ virtual +/ abstract QModelIndex indexAt(ref const(QPoint) point) const; 197 198 final QSize sizeHintForIndex(ref const(QModelIndex) index) const; 199 /+ virtual +/ int sizeHintForRow(int row) const; 200 /+ virtual +/ int sizeHintForColumn(int column) const; 201 202 final void openPersistentEditor(ref const(QModelIndex) index); 203 final void closePersistentEditor(ref const(QModelIndex) index); 204 final bool isPersistentEditorOpen(ref const(QModelIndex) index) const; 205 206 final void setIndexWidget(ref const(QModelIndex) index, QWidget widget); 207 final QWidget indexWidget(ref const(QModelIndex) index) const; 208 209 final void setItemDelegateForRow(int row, QAbstractItemDelegate delegate_); 210 final QAbstractItemDelegate itemDelegateForRow(int row) const; 211 212 final void setItemDelegateForColumn(int column, QAbstractItemDelegate delegate_); 213 final QAbstractItemDelegate itemDelegateForColumn(int column) const; 214 215 /+ #if QT_DEPRECATED_SINCE(6, 0) +/ 216 /+ QT_DEPRECATED_VERSION_X_6_0("Use itemDelegateForIndex instead") +/ 217 final QAbstractItemDelegate itemDelegate(ref const(QModelIndex) index) const 218 { return itemDelegateForIndex(index); } 219 /+ #endif +/ 220 /+ virtual +/ QAbstractItemDelegate itemDelegateForIndex(ref const(QModelIndex) index) const; 221 222 /+ virtual +/ override QVariant inputMethodQuery(/+ Qt:: +/qt.core.namespace.InputMethodQuery query) const; 223 224 /+ using QAbstractScrollArea::update; +/ 225 226 public /+ Q_SLOTS +/: 227 /+ virtual +/ @QSlot void reset(); 228 /+ virtual +/ @QSlot void setRootIndex(ref const(QModelIndex) index); 229 /+ virtual +/ @QSlot void doItemsLayout(); 230 /+ virtual +/ @QSlot void selectAll(); 231 @QSlot final void edit(ref const(QModelIndex) index); 232 @QSlot final void clearSelection(); 233 @QSlot final void setCurrentIndex(ref const(QModelIndex) index); 234 @QSlot final void scrollToTop(); 235 @QSlot final void scrollToBottom(); 236 @QSlot final void update(ref const(QModelIndex) index); 237 238 protected /+ Q_SLOTS +/: 239 /+ virtual +/ @QSlot void dataChanged(ref const(QModelIndex) topLeft, ref const(QModelIndex) bottomRight, 240 ref const(QList!(int)) roles = globalInitVar!(QList!(int))); 241 /+ virtual +/ @QSlot void rowsInserted(ref const(QModelIndex) parent, int start, int end); 242 /+ virtual +/ @QSlot void rowsAboutToBeRemoved(ref const(QModelIndex) parent, int start, int end); 243 /+ virtual +/ @QSlot void selectionChanged(ref const(QItemSelection) selected, ref const(QItemSelection) deselected); 244 /+ virtual +/ @QSlot void currentChanged(ref const(QModelIndex) current, ref const(QModelIndex) previous); 245 /+ virtual +/ @QSlot void updateEditorData(); 246 /+ virtual +/ @QSlot void updateEditorGeometries(); 247 /+ virtual +/ @QSlot void updateGeometries(); 248 /+ virtual +/ @QSlot void verticalScrollbarAction(int action); 249 /+ virtual +/ @QSlot void horizontalScrollbarAction(int action); 250 /+ virtual +/ @QSlot void verticalScrollbarValueChanged(int value); 251 /+ virtual +/ @QSlot void horizontalScrollbarValueChanged(int value); 252 /+ virtual +/ @QSlot void closeEditor(QWidget editor, QAbstractItemDelegate.EndEditHint hint); 253 /+ virtual +/ @QSlot void commitData(QWidget editor); 254 /+ virtual +/ @QSlot void editorDestroyed(QObject editor); 255 256 /+ Q_SIGNALS +/public: 257 @QSignal final void pressed(ref const(QModelIndex) index); 258 @QSignal final void clicked(ref const(QModelIndex) index); 259 @QSignal final void doubleClicked(ref const(QModelIndex) index); 260 261 @QSignal final void activated(ref const(QModelIndex) index); 262 @QSignal final void entered(ref const(QModelIndex) index); 263 @QSignal final void viewportEntered(); 264 265 @QSignal final void iconSizeChanged(ref const(QSize) size); 266 267 protected: 268 mixin(changeItaniumMangling(q{mangleConstructorBaseObject}, q{ 269 this(ref QAbstractItemViewPrivate , QWidget parent = null); 270 })); 271 272 enum CursorAction { MoveUp, MoveDown, MoveLeft, MoveRight, 273 MoveHome, MoveEnd, MovePageUp, MovePageDown, 274 MoveNext, MovePrevious } 275 /+ virtual +/ abstract QModelIndex moveCursor(CursorAction cursorAction, 276 /+ Qt:: +/qt.core.namespace.KeyboardModifiers modifiers); 277 278 /+ virtual +/ abstract int horizontalOffset() const; 279 /+ virtual +/ abstract int verticalOffset() const; 280 281 /+ virtual +/ abstract bool isIndexHidden(ref const(QModelIndex) index) const; 282 283 /+ virtual +/ abstract void setSelection(ref const(QRect) rect, QItemSelectionModel.SelectionFlags command); 284 /+ virtual +/ abstract QRegion visualRegionForSelection(ref const(QItemSelection) selection) const; 285 /+ virtual +/ QModelIndexList selectedIndexes() const; 286 287 /+ virtual +/ bool edit(ref const(QModelIndex) index, EditTrigger trigger, QEvent event); 288 289 mixin(changeWindowsMangling(q{mangleClassesTailConst}, q{ 290 /+ virtual +/ QItemSelectionModel.SelectionFlags selectionCommand(ref const(QModelIndex) index, 291 const(QEvent) event = null) const; 292 })); 293 294 /+ #if QT_CONFIG(draganddrop) +/ 295 /+ virtual +/ void startDrag(/+ Qt:: +/qt.core.namespace.DropActions supportedActions); 296 /+ #endif +/ 297 298 /+ virtual +/ void initViewItemOption(QStyleOptionViewItem* option) const; 299 300 enum State { 301 NoState, 302 DraggingState, 303 DragSelectingState, 304 EditingState, 305 ExpandingState, 306 CollapsingState, 307 AnimatingState 308 } 309 310 final State state() const; 311 final void setState(State state); 312 313 final void scheduleDelayedItemsLayout(); 314 final void executeDelayedItemsLayout(); 315 316 final void setDirtyRegion(ref const(QRegion) region); 317 final void scrollDirtyRegion(int dx, int dy); 318 final QPoint dirtyRegionOffset() const; 319 320 final void startAutoScroll(); 321 final void stopAutoScroll(); 322 final void doAutoScroll(); 323 324 override bool focusNextPrevChild(bool next); 325 override bool event(QEvent event); 326 override bool viewportEvent(QEvent event); 327 override void mousePressEvent(QMouseEvent event); 328 override void mouseMoveEvent(QMouseEvent event); 329 override void mouseReleaseEvent(QMouseEvent event); 330 override void mouseDoubleClickEvent(QMouseEvent event); 331 /+ #if QT_CONFIG(draganddrop) +/ 332 override void dragEnterEvent(QDragEnterEvent event); 333 override void dragMoveEvent(QDragMoveEvent event); 334 override void dragLeaveEvent(QDragLeaveEvent event); 335 override void dropEvent(QDropEvent event); 336 /+ #endif +/ 337 override void focusInEvent(QFocusEvent event); 338 override void focusOutEvent(QFocusEvent event); 339 override void keyPressEvent(QKeyEvent event); 340 override void resizeEvent(QResizeEvent event); 341 override void timerEvent(QTimerEvent event); 342 override void inputMethodEvent(QInputMethodEvent event); 343 override bool eventFilter(QObject object, QEvent event); 344 345 /+ #if QT_CONFIG(draganddrop) +/ 346 enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport } 347 final DropIndicatorPosition dropIndicatorPosition() const; 348 /+ #endif +/ 349 350 override QSize viewportSizeHint() const; 351 352 private: 353 /+ Q_DECLARE_PRIVATE(QAbstractItemView) +/ 354 /+ Q_DISABLE_COPY(QAbstractItemView) +/ 355 /+ Q_PRIVATE_SLOT(d_func(), void _q_columnsAboutToBeRemoved(const QModelIndex&, int, int)) 356 Q_PRIVATE_SLOT(d_func(), void _q_columnsRemoved(const QModelIndex&, int, int)) 357 Q_PRIVATE_SLOT(d_func(), void _q_columnsInserted(const QModelIndex&, int, int)) 358 Q_PRIVATE_SLOT(d_func(), void _q_rowsInserted(const QModelIndex&, int, int)) 359 Q_PRIVATE_SLOT(d_func(), void _q_rowsRemoved(const QModelIndex&, int, int)) 360 Q_PRIVATE_SLOT(d_func(), void _q_columnsMoved(const QModelIndex&, int, int, const QModelIndex&, int)) 361 Q_PRIVATE_SLOT(d_func(), void _q_rowsMoved(const QModelIndex&, int, int, const QModelIndex&, int)) 362 Q_PRIVATE_SLOT(d_func(), void _q_modelDestroyed()) 363 Q_PRIVATE_SLOT(d_func(), void _q_layoutChanged()) 364 Q_PRIVATE_SLOT(d_func(), void _q_headerDataChanged()) 365 #if QT_CONFIG(gestures) && QT_CONFIG(scroller) 366 Q_PRIVATE_SLOT(d_func(), void _q_scrollerStateChanged()) 367 #endif +/ 368 369 /+ friend class ::tst_QAbstractItemView; +/ 370 /+ friend class ::tst_QTreeView; +/ 371 /+ friend class QTreeViewPrivate; +/ // needed to compile with MSVC 372 /+ friend class QListModeViewBase; +/ 373 /+ friend class QListViewPrivate; +/ 374 /+ friend class QAbstractSlider; +/ 375 mixin(CREATE_CONVENIENCE_WRAPPERS); 376 } 377 /+pragma(inline, true) QFlags!(QAbstractItemView.EditTriggers.enum_type) operator |(QAbstractItemView.EditTriggers.enum_type f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/{return QFlags!(QAbstractItemView.EditTriggers.enum_type)(f1)|f2;}+/ 378 /+pragma(inline, true) QFlags!(QAbstractItemView.EditTriggers.enum_type) operator |(QAbstractItemView.EditTriggers.enum_type f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/{return f2|f1;}+/ 379 /+pragma(inline, true) QFlags!(QAbstractItemView.EditTriggers.enum_type) operator &(QAbstractItemView.EditTriggers.enum_type f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/{return QFlags!(QAbstractItemView.EditTriggers.enum_type)(f1)&f2;}+/ 380 /+pragma(inline, true) QFlags!(QAbstractItemView.EditTriggers.enum_type) operator &(QAbstractItemView.EditTriggers.enum_type f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/{return f2&f1;}+/ 381 /+pragma(inline, true) void operator +(QAbstractItemView.EditTriggers.enum_type f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/;+/ 382 /+pragma(inline, true) void operator +(QAbstractItemView.EditTriggers.enum_type f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/;+/ 383 /+pragma(inline, true) void operator +(int f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/;+/ 384 /+pragma(inline, true) void operator -(QAbstractItemView.EditTriggers.enum_type f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/;+/ 385 /+pragma(inline, true) void operator -(QAbstractItemView.EditTriggers.enum_type f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/;+/ 386 /+pragma(inline, true) void operator -(int f1, QFlags!(QAbstractItemView.EditTriggers.enum_type) f2)/+noexcept+/;+/ 387 /+pragma(inline, true) QIncompatibleFlag operator |(QAbstractItemView.EditTriggers.enum_type f1, int f2)/+noexcept+/{return QIncompatibleFlag(int(f1)|f2);}+/ 388 /+pragma(inline, true) void operator +(int f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/;+/ 389 /+pragma(inline, true) void operator +(QAbstractItemView.EditTriggers.enum_type f1, int f2)/+noexcept+/;+/ 390 /+pragma(inline, true) void operator -(int f1, QAbstractItemView.EditTriggers.enum_type f2)/+noexcept+/;+/ 391 /+pragma(inline, true) void operator -(QAbstractItemView.EditTriggers.enum_type f1, int f2)/+noexcept+/;+/ 392 393 /+ Q_DECLARE_OPERATORS_FOR_FLAGS(QAbstractItemView::EditTriggers) +/