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.headerview; 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.gui.event; 25 import qt.gui.painter; 26 import qt.gui.region; 27 import qt.helpers; 28 import qt.widgets.abstractitemview; 29 import qt.widgets.styleoption; 30 import qt.widgets.widget; 31 version(QT_NO_DATASTREAM){}else 32 import qt.core.bytearray; 33 34 /+ QT_REQUIRE_CONFIG(itemviews); +/ 35 36 37 extern(C++, class) struct QHeaderViewPrivate; 38 39 /// Binding for C++ class [QHeaderView](https://doc.qt.io/qt-6/qheaderview.html). 40 class /+ Q_WIDGETS_EXPORT +/ QHeaderView : QAbstractItemView 41 { 42 mixin(Q_OBJECT); 43 /+ Q_PROPERTY(bool firstSectionMovable READ isFirstSectionMovable WRITE setFirstSectionMovable) 44 Q_PROPERTY(bool showSortIndicator READ isSortIndicatorShown WRITE setSortIndicatorShown) 45 Q_PROPERTY(bool highlightSections READ highlightSections WRITE setHighlightSections) 46 Q_PROPERTY(bool stretchLastSection READ stretchLastSection WRITE setStretchLastSection) 47 Q_PROPERTY(bool cascadingSectionResizes READ cascadingSectionResizes 48 WRITE setCascadingSectionResizes) 49 Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize 50 RESET resetDefaultSectionSize) 51 Q_PROPERTY(int minimumSectionSize READ minimumSectionSize WRITE setMinimumSectionSize) 52 Q_PROPERTY(int maximumSectionSize READ maximumSectionSize WRITE setMaximumSectionSize) 53 Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment) 54 Q_PROPERTY(bool sortIndicatorClearable READ isSortIndicatorClearable 55 WRITE setSortIndicatorClearable NOTIFY sortIndicatorClearableChanged) +/ 56 57 public: 58 59 enum ResizeMode 60 { 61 Interactive, 62 Stretch, 63 Fixed, 64 ResizeToContents, 65 Custom = ResizeMode.Fixed 66 } 67 /+ Q_ENUM(ResizeMode) +/ 68 69 /+ explicit +/this(/+ Qt:: +/qt.core.namespace.Orientation orientation, QWidget parent = null); 70 /+ virtual +/~this(); 71 72 override void setModel(QAbstractItemModel model); 73 74 final /+ Qt:: +/qt.core.namespace.Orientation orientation() const; 75 final int offset() const; 76 final int length() const; 77 override QSize sizeHint() const; 78 override void setVisible(bool v); 79 final int sectionSizeHint(int logicalIndex) const; 80 81 final int visualIndexAt(int position) const; 82 final int logicalIndexAt(int position) const; 83 84 pragma(inline, true) final int logicalIndexAt(int ax, int ay) const 85 { return orientation() == /+ Qt:: +/qt.core.namespace.Orientation.Horizontal ? logicalIndexAt(ax) : logicalIndexAt(ay); } 86 pragma(inline, true) final int logicalIndexAt(ref const(QPoint) apos) const 87 { return logicalIndexAt(apos.x(), apos.y()); } 88 89 final int sectionSize(int logicalIndex) const; 90 final int sectionPosition(int logicalIndex) const; 91 final int sectionViewportPosition(int logicalIndex) const; 92 93 final void moveSection(int from, int to); 94 final void swapSections(int first, int second); 95 final void resizeSection(int logicalIndex, int size); 96 final void resizeSections(ResizeMode mode); 97 98 final bool isSectionHidden(int logicalIndex) const; 99 final void setSectionHidden(int logicalIndex, bool hide); 100 final int hiddenSectionCount() const; 101 102 pragma(inline, true) final void hideSection(int alogicalIndex) 103 { setSectionHidden(alogicalIndex, true); } 104 pragma(inline, true) final void showSection(int alogicalIndex) 105 { setSectionHidden(alogicalIndex, false); } 106 107 final int count() const; 108 final int visualIndex(int logicalIndex) const; 109 final int logicalIndex(int visualIndex) const; 110 111 final void setSectionsMovable(bool movable); 112 final bool sectionsMovable() const; 113 final void setFirstSectionMovable(bool movable); 114 final bool isFirstSectionMovable() const; 115 116 final void setSectionsClickable(bool clickable); 117 final bool sectionsClickable() const; 118 119 final void setHighlightSections(bool highlight); 120 final bool highlightSections() const; 121 122 final ResizeMode sectionResizeMode(int logicalIndex) const; 123 final void setSectionResizeMode(ResizeMode mode); 124 final void setSectionResizeMode(int logicalIndex, ResizeMode mode); 125 126 final void setResizeContentsPrecision(int precision); 127 final int resizeContentsPrecision() const; 128 129 final int stretchSectionCount() const; 130 131 final void setSortIndicatorShown(bool show); 132 final bool isSortIndicatorShown() const; 133 134 final void setSortIndicator(int logicalIndex, /+ Qt:: +/qt.core.namespace.SortOrder order); 135 final int sortIndicatorSection() const; 136 final /+ Qt:: +/qt.core.namespace.SortOrder sortIndicatorOrder() const; 137 138 final void setSortIndicatorClearable(bool clearable); 139 final bool isSortIndicatorClearable() const; 140 141 final bool stretchLastSection() const; 142 final void setStretchLastSection(bool stretch); 143 144 final bool cascadingSectionResizes() const; 145 final void setCascadingSectionResizes(bool enable); 146 147 final int defaultSectionSize() const; 148 final void setDefaultSectionSize(int size); 149 final void resetDefaultSectionSize(); 150 151 final int minimumSectionSize() const; 152 final void setMinimumSectionSize(int size); 153 final int maximumSectionSize() const; 154 final void setMaximumSectionSize(int size); 155 156 final /+ Qt:: +/qt.core.namespace.Alignment defaultAlignment() const; 157 final void setDefaultAlignment(/+ Qt:: +/qt.core.namespace.Alignment alignment); 158 159 override void doItemsLayout(); 160 final bool sectionsMoved() const; 161 final bool sectionsHidden() const; 162 163 version(QT_NO_DATASTREAM){}else 164 { 165 final QByteArray saveState() const; 166 final bool restoreState(ref const(QByteArray) state); 167 } 168 169 override void reset(); 170 171 public /+ Q_SLOTS +/: 172 @QSlot final void setOffset(int offset); 173 @QSlot final void setOffsetToSectionPosition(int visualIndex); 174 @QSlot final void setOffsetToLastSection(); 175 @QSlot final void headerDataChanged(/+ Qt:: +/qt.core.namespace.Orientation orientation, int logicalFirst, int logicalLast); 176 177 /+ Q_SIGNALS +/public: 178 @QSignal final void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex); 179 @QSignal final void sectionResized(int logicalIndex, int oldSize, int newSize); 180 @QSignal final void sectionPressed(int logicalIndex); 181 @QSignal final void sectionClicked(int logicalIndex); 182 @QSignal final void sectionEntered(int logicalIndex); 183 @QSignal final void sectionDoubleClicked(int logicalIndex); 184 @QSignal final void sectionCountChanged(int oldCount, int newCount); 185 @QSignal final void sectionHandleDoubleClicked(int logicalIndex); 186 @QSignal final void geometriesChanged(); 187 @QSignal final void sortIndicatorChanged(int logicalIndex, /+ Qt:: +/qt.core.namespace.SortOrder order); 188 @QSignal final void sortIndicatorClearableChanged(bool clearable); 189 190 protected /+ Q_SLOTS +/: 191 @QSlot final void updateSection(int logicalIndex); 192 @QSlot final void resizeSections(); 193 @QSlot final void sectionsInserted(ref const(QModelIndex) parent, int logicalFirst, int logicalLast); 194 @QSlot final void sectionsAboutToBeRemoved(ref const(QModelIndex) parent, int logicalFirst, int logicalLast); 195 196 protected: 197 this(ref QHeaderViewPrivate dd, /+ Qt:: +/qt.core.namespace.Orientation orientation, QWidget parent = null); 198 final void initialize(); 199 200 final void initializeSections(); 201 final void initializeSections(int start, int end); 202 override void currentChanged(ref const(QModelIndex) current, ref const(QModelIndex) old); 203 204 override bool event(QEvent e); 205 override void paintEvent(QPaintEvent e); 206 override void mousePressEvent(QMouseEvent e); 207 override void mouseMoveEvent(QMouseEvent e); 208 override void mouseReleaseEvent(QMouseEvent e); 209 override void mouseDoubleClickEvent(QMouseEvent e); 210 override bool viewportEvent(QEvent e); 211 212 /+ virtual +/ void paintSection(QPainter* painter, ref const(QRect) rect, int logicalIndex) const; 213 /+ virtual +/ QSize sectionSizeFromContents(int logicalIndex) const; 214 215 override int horizontalOffset() const; 216 override int verticalOffset() const; 217 override void updateGeometries(); 218 override void scrollContentsBy(int dx, int dy); 219 220 override void dataChanged(ref const(QModelIndex) topLeft, ref const(QModelIndex) bottomRight, 221 ref const(QList!(int)) roles = globalInitVar!(QList!(int))); 222 override void rowsInserted(ref const(QModelIndex) parent, int start, int end); 223 224 override QRect visualRect(ref const(QModelIndex) index) const; 225 override void scrollTo(ref const(QModelIndex) index, ScrollHint hint); 226 227 override QModelIndex indexAt(ref const(QPoint) p) const; 228 override bool isIndexHidden(ref const(QModelIndex) index) const; 229 230 override QModelIndex moveCursor(CursorAction, /+ Qt:: +/qt.core.namespace.KeyboardModifiers); 231 override void setSelection(ref const(QRect) rect, QItemSelectionModel.SelectionFlags flags); 232 override QRegion visualRegionForSelection(ref const(QItemSelection) selection) const; 233 /+ virtual +/ void initStyleOptionForIndex(QStyleOptionHeader* option, int logicalIndex) const; 234 /+ virtual +/ void initStyleOption(QStyleOptionHeader* option) const; 235 236 /+ friend class QTableView; +/ 237 /+ friend class QTreeView; +/ 238 239 private: 240 mixin(changeWindowsMangling(q{mangleChangeAccess("private")}, q{ 241 protected override void initStyleOption(QStyleOptionFrame* option) const; 242 })); 243 244 // ### Qt6: make them protected slots in QHeaderViewPrivate 245 /+ Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)) 246 Q_PRIVATE_SLOT(d_func(), void _q_sectionsAboutToBeMoved(const QModelIndex &sourceParent, int logicalStart, int logicalEnd, const QModelIndex &destinationParent, int logicalDestination)) 247 Q_PRIVATE_SLOT(d_func(), void _q_sectionsMoved(const QModelIndex &sourceParent, int logicalStart, int logicalEnd, const QModelIndex &destinationParent, int logicalDestination)) 248 Q_PRIVATE_SLOT(d_func(), void _q_sectionsAboutToBeChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), 249 QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)) 250 Q_PRIVATE_SLOT(d_func(), void _q_sectionsChanged(const QList<QPersistentModelIndex> &parents = QList<QPersistentModelIndex>(), 251 QAbstractItemModel::LayoutChangeHint hint = QAbstractItemModel::NoLayoutChangeHint)) 252 Q_DECLARE_PRIVATE(QHeaderView) +/ 253 /+ Q_DISABLE_COPY(QHeaderView) +/ 254 mixin(CREATE_CONVENIENCE_WRAPPERS); 255 } 256