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.treeview;
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.namespace;
21 import qt.core.point;
22 import qt.core.rect;
23 import qt.core.size;
24 import qt.core.string;
25 import qt.gui.event;
26 import qt.gui.painter;
27 import qt.gui.region;
28 import qt.helpers;
29 import qt.widgets.abstractitemview;
30 import qt.widgets.headerview;
31 import qt.widgets.styleoption;
32 import qt.widgets.widget;
33 
34 
35 /+ QT_REQUIRE_CONFIG(treeview); +/
36 
37 
38 extern(C++, class) struct QTreeViewPrivate;
39 
40 /// Binding for C++ class [QTreeView](https://doc.qt.io/qt-6/qtreeview.html).
41 class /+ Q_WIDGETS_EXPORT +/ QTreeView : QAbstractItemView
42 {
43     mixin(Q_OBJECT);
44     /+ Q_PROPERTY(int autoExpandDelay READ autoExpandDelay WRITE setAutoExpandDelay)
45     Q_PROPERTY(int indentation READ indentation WRITE setIndentation RESET resetIndentation)
46     Q_PROPERTY(bool rootIsDecorated READ rootIsDecorated WRITE setRootIsDecorated)
47     Q_PROPERTY(bool uniformRowHeights READ uniformRowHeights WRITE setUniformRowHeights)
48     Q_PROPERTY(bool itemsExpandable READ itemsExpandable WRITE setItemsExpandable)
49     Q_PROPERTY(bool sortingEnabled READ isSortingEnabled WRITE setSortingEnabled)
50     Q_PROPERTY(bool animated READ isAnimated WRITE setAnimated)
51     Q_PROPERTY(bool allColumnsShowFocus READ allColumnsShowFocus WRITE setAllColumnsShowFocus)
52     Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
53     Q_PROPERTY(bool headerHidden READ isHeaderHidden WRITE setHeaderHidden)
54     Q_PROPERTY(bool expandsOnDoubleClick READ expandsOnDoubleClick WRITE setExpandsOnDoubleClick) +/
55 
56 public:
57     /+ explicit +/this(QWidget parent = null);
58     ~this();
59 
60     override void setModel(QAbstractItemModel model);
61     override void setRootIndex(ref const(QModelIndex) index);
62     override void setSelectionModel(QItemSelectionModel selectionModel);
63 
64     final QHeaderView header() const;
65     final void setHeader(QHeaderView header);
66 
67     final int autoExpandDelay() const;
68     final void setAutoExpandDelay(int delay);
69 
70     final int indentation() const;
71     final void setIndentation(int i);
72     final void resetIndentation();
73 
74     final bool rootIsDecorated() const;
75     final void setRootIsDecorated(bool show);
76 
77     final bool uniformRowHeights() const;
78     final void setUniformRowHeights(bool uniform);
79 
80     final bool itemsExpandable() const;
81     final void setItemsExpandable(bool enable);
82 
83     final bool expandsOnDoubleClick() const;
84     final void setExpandsOnDoubleClick(bool enable);
85 
86     final int columnViewportPosition(int column) const;
87     final int columnWidth(int column) const;
88     final void setColumnWidth(int column, int width);
89     final int columnAt(int x) const;
90 
91     final bool isColumnHidden(int column) const;
92     final void setColumnHidden(int column, bool hide);
93 
94     final bool isHeaderHidden() const;
95     final void setHeaderHidden(bool hide);
96 
97     final bool isRowHidden(int row, ref const(QModelIndex) parent) const;
98     final void setRowHidden(int row, ref const(QModelIndex) parent, bool hide);
99 
100     final bool isFirstColumnSpanned(int row, ref const(QModelIndex) parent) const;
101     final void setFirstColumnSpanned(int row, ref const(QModelIndex) parent, bool span);
102 
103     final bool isExpanded(ref const(QModelIndex) index) const;
104     final void setExpanded(ref const(QModelIndex) index, bool expand);
105 
106     final void setSortingEnabled(bool enable);
107     final bool isSortingEnabled() const;
108 
109     final void setAnimated(bool enable);
110     final bool isAnimated() const;
111 
112     final void setAllColumnsShowFocus(bool enable);
113     final bool allColumnsShowFocus() const;
114 
115     final void setWordWrap(bool on);
116     final bool wordWrap() const;
117 
118     final void setTreePosition(int logicalIndex);
119     final int treePosition() const;
120 
121     override void keyboardSearch(ref const(QString) search);
122 
123     override QRect visualRect(ref const(QModelIndex) index) const;
124     override void scrollTo(ref const(QModelIndex) index, ScrollHint hint = ScrollHint.EnsureVisible);
125     override QModelIndex indexAt(ref const(QPoint) p) const;
126     final QModelIndex indexAbove(ref const(QModelIndex) index) const;
127     final QModelIndex indexBelow(ref const(QModelIndex) index) const;
128 
129     override void doItemsLayout();
130     override void reset();
131 
132     override void dataChanged(ref const(QModelIndex) topLeft, ref const(QModelIndex) bottomRight,
133                          ref const(QList!(int)) roles = globalInitVar!(QList!(int)));
134     override void selectAll();
135 
136 /+ Q_SIGNALS +/public:
137     @QSignal final void expanded(ref const(QModelIndex) index);
138     @QSignal final void collapsed(ref const(QModelIndex) index);
139 
140 public /+ Q_SLOTS +/:
141     @QSlot final void hideColumn(int column);
142     @QSlot final void showColumn(int column);
143     @QSlot final void expand(ref const(QModelIndex) index);
144     @QSlot final void collapse(ref const(QModelIndex) index);
145     @QSlot final void resizeColumnToContents(int column);
146     @QSlot final void sortByColumn(int column, /+ Qt:: +/qt.core.namespace.SortOrder order);
147     @QSlot final void expandAll();
148     @QSlot final void expandRecursively(ref const(QModelIndex) index, int depth = -1);
149     @QSlot final void collapseAll();
150     @QSlot final void expandToDepth(int depth);
151 
152 protected /+ Q_SLOTS +/:
153     @QSlot final void columnResized(int column, int oldSize, int newSize);
154     @QSlot final void columnCountChanged(int oldCount, int newCount);
155     @QSlot final void columnMoved();
156     @QSlot final void reexpand();
157     @QSlot final void rowsRemoved(ref const(QModelIndex) parent, int first, int last);
158     @QSlot override void verticalScrollbarValueChanged(int value);
159 
160 protected:
161     this(ref QTreeViewPrivate dd, QWidget parent = null);
162     override void scrollContentsBy(int dx, int dy);
163     override void rowsInserted(ref const(QModelIndex) parent, int start, int end);
164     override void rowsAboutToBeRemoved(ref const(QModelIndex) parent, int start, int end);
165 
166     override QModelIndex moveCursor(CursorAction cursorAction, /+ Qt:: +/qt.core.namespace.KeyboardModifiers modifiers);
167     override int horizontalOffset() const;
168     override int verticalOffset() const;
169 
170     override void setSelection(ref const(QRect) rect, QItemSelectionModel.SelectionFlags command);
171     override QRegion visualRegionForSelection(ref const(QItemSelection) selection) const;
172     override QModelIndexList selectedIndexes() const;
173 
174     override void changeEvent(QEvent event);
175     override void timerEvent(QTimerEvent event);
176     override void paintEvent(QPaintEvent event);
177 
178     final void drawTree(QPainter* painter, ref const(QRegion) region) const;
179     /+ virtual +/ void drawRow(QPainter* painter,
180                              ref const(QStyleOptionViewItem) options,
181                              ref const(QModelIndex) index) const;
182     /+ virtual +/ void drawBranches(QPainter* painter,
183                                   ref const(QRect) rect,
184                                   ref const(QModelIndex) index) const;
185 
186     override void mousePressEvent(QMouseEvent event);
187     override void mouseReleaseEvent(QMouseEvent event);
188     override void mouseDoubleClickEvent(QMouseEvent event);
189     override void mouseMoveEvent(QMouseEvent event);
190     override void keyPressEvent(QKeyEvent event);
191 /+ #if QT_CONFIG(draganddrop) +/
192     override void dragMoveEvent(QDragMoveEvent event);
193 /+ #endif +/
194     override bool viewportEvent(QEvent event);
195 
196     override void updateGeometries();
197 
198     override QSize viewportSizeHint() const;
199 
200     override int sizeHintForColumn(int column) const;
201     final int indexRowSizeHint(ref const(QModelIndex) index) const;
202     final int rowHeight(ref const(QModelIndex) index) const;
203 
204     override void horizontalScrollbarAction(int action);
205 
206     override bool isIndexHidden(ref const(QModelIndex) index) const;
207     override void selectionChanged(ref const(QItemSelection) selected,
208                               ref const(QItemSelection) deselected);
209     override void currentChanged(ref const(QModelIndex) current, ref const(QModelIndex) previous);
210 
211 private:
212     /+ friend class ::tst_QTreeView; +/
213     /+ friend class QAccessibleTable; +/
214     /+ friend class QAccessibleTree; +/
215     /+ friend class QAccessibleTableCell; +/
216     final int visualIndex(ref const(QModelIndex) index) const;
217 
218     /+ Q_DECLARE_PRIVATE(QTreeView) +/
219     /+ Q_DISABLE_COPY(QTreeView) +/
220 /+ #if QT_CONFIG(animation)
221     Q_PRIVATE_SLOT(d_func(), void _q_endAnimatedOperation())
222 #endif // animation
223     Q_PRIVATE_SLOT(d_func(), void _q_modelAboutToBeReset())
224     Q_PRIVATE_SLOT(d_func(), void _q_sortIndicatorChanged(int column, Qt::SortOrder order)) +/
225     mixin(CREATE_CONVENIENCE_WRAPPERS);
226 }
227