Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-05-10 08:50:59

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QHEADERVIEW_H
0006 #define QHEADERVIEW_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qabstractitemview.h>
0010 #include <QtCore/qlist.h>
0011 
0012 QT_REQUIRE_CONFIG(itemviews);
0013 
0014 class tst_QHeaderView;
0015 
0016 QT_BEGIN_NAMESPACE
0017 
0018 class QHeaderViewPrivate;
0019 class QStyleOptionHeader;
0020 
0021 class Q_WIDGETS_EXPORT QHeaderView : public QAbstractItemView
0022 {
0023     Q_OBJECT
0024     Q_PROPERTY(bool firstSectionMovable READ isFirstSectionMovable WRITE setFirstSectionMovable)
0025     Q_PROPERTY(bool showSortIndicator READ isSortIndicatorShown WRITE setSortIndicatorShown)
0026     Q_PROPERTY(bool sectionsMovable READ sectionsMovable WRITE setSectionsMovable)
0027     Q_PROPERTY(bool sectionsClickable READ sectionsClickable WRITE setSectionsClickable)
0028     Q_PROPERTY(bool highlightSections READ highlightSections WRITE setHighlightSections)
0029     Q_PROPERTY(bool stretchLastSection READ stretchLastSection WRITE setStretchLastSection)
0030     Q_PROPERTY(bool cascadingSectionResizes READ cascadingSectionResizes
0031                WRITE setCascadingSectionResizes)
0032     Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize
0033                RESET resetDefaultSectionSize)
0034     Q_PROPERTY(int minimumSectionSize READ minimumSectionSize WRITE setMinimumSectionSize)
0035     Q_PROPERTY(int maximumSectionSize READ maximumSectionSize WRITE setMaximumSectionSize)
0036     Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment)
0037     Q_PROPERTY(bool sortIndicatorClearable READ isSortIndicatorClearable
0038                WRITE setSortIndicatorClearable NOTIFY sortIndicatorClearableChanged)
0039 
0040 public:
0041 
0042     enum ResizeMode
0043     {
0044         Interactive,
0045         Stretch,
0046         Fixed,
0047         ResizeToContents,
0048         Custom = Fixed
0049     };
0050     Q_ENUM(ResizeMode)
0051 
0052     explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr);
0053     virtual ~QHeaderView();
0054 
0055     void setModel(QAbstractItemModel *model) override;
0056 
0057     Qt::Orientation orientation() const;
0058     int offset() const;
0059     int length() const;
0060     QSize sizeHint() const override;
0061     void setVisible(bool v) override;
0062     int sectionSizeHint(int logicalIndex) const;
0063 
0064     int visualIndexAt(int position) const;
0065     int logicalIndexAt(int position) const;
0066 
0067     inline int logicalIndexAt(int x, int y) const;
0068     inline int logicalIndexAt(const QPoint &pos) const;
0069 
0070     int sectionSize(int logicalIndex) const;
0071     int sectionPosition(int logicalIndex) const;
0072     int sectionViewportPosition(int logicalIndex) const;
0073 
0074     void moveSection(int from, int to);
0075     void swapSections(int first, int second);
0076     void resizeSection(int logicalIndex, int size);
0077     void resizeSections(QHeaderView::ResizeMode mode);
0078 
0079     bool isSectionHidden(int logicalIndex) const;
0080     void setSectionHidden(int logicalIndex, bool hide);
0081     int hiddenSectionCount() const;
0082 
0083     inline void hideSection(int logicalIndex);
0084     inline void showSection(int logicalIndex);
0085 
0086     int count() const;
0087     int visualIndex(int logicalIndex) const;
0088     int logicalIndex(int visualIndex) const;
0089 
0090     void setSectionsMovable(bool movable);
0091     bool sectionsMovable() const;
0092     void setFirstSectionMovable(bool movable);
0093     bool isFirstSectionMovable() const;
0094 
0095     void setSectionsClickable(bool clickable);
0096     bool sectionsClickable() const;
0097 
0098     void setHighlightSections(bool highlight);
0099     bool highlightSections() const;
0100 
0101     ResizeMode sectionResizeMode(int logicalIndex) const;
0102     void setSectionResizeMode(ResizeMode mode);
0103     void setSectionResizeMode(int logicalIndex, ResizeMode mode);
0104 
0105     void setResizeContentsPrecision(int precision);
0106     int  resizeContentsPrecision() const;
0107 
0108     int stretchSectionCount() const;
0109 
0110     void setSortIndicatorShown(bool show);
0111     bool isSortIndicatorShown() const;
0112 
0113     void setSortIndicator(int logicalIndex, Qt::SortOrder order);
0114     int sortIndicatorSection() const;
0115     Qt::SortOrder sortIndicatorOrder() const;
0116 
0117     void setSortIndicatorClearable(bool clearable);
0118     bool isSortIndicatorClearable() const;
0119 
0120     bool stretchLastSection() const;
0121     void setStretchLastSection(bool stretch);
0122 
0123     bool cascadingSectionResizes() const;
0124     void setCascadingSectionResizes(bool enable);
0125 
0126     int defaultSectionSize() const;
0127     void setDefaultSectionSize(int size);
0128     void resetDefaultSectionSize();
0129 
0130     int minimumSectionSize() const;
0131     void setMinimumSectionSize(int size);
0132     int maximumSectionSize() const;
0133     void setMaximumSectionSize(int size);
0134 
0135     Qt::Alignment defaultAlignment() const;
0136     void setDefaultAlignment(Qt::Alignment alignment);
0137 
0138     void doItemsLayout() override;
0139     bool sectionsMoved() const;
0140     bool sectionsHidden() const;
0141 
0142 #ifndef QT_NO_DATASTREAM
0143     QByteArray saveState() const;
0144     bool restoreState(const QByteArray &state);
0145 #endif
0146 
0147     void reset() override;
0148 
0149 public Q_SLOTS:
0150     void setOffset(int offset);
0151     void setOffsetToSectionPosition(int visualIndex);
0152     void setOffsetToLastSection();
0153     void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast);
0154 
0155 Q_SIGNALS:
0156     void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex);
0157     void sectionResized(int logicalIndex, int oldSize, int newSize);
0158     void sectionPressed(int logicalIndex);
0159     void sectionClicked(int logicalIndex);
0160     void sectionEntered(int logicalIndex);
0161     void sectionDoubleClicked(int logicalIndex);
0162     void sectionCountChanged(int oldCount, int newCount);
0163     void sectionHandleDoubleClicked(int logicalIndex);
0164     void geometriesChanged();
0165     void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order);
0166     void sortIndicatorClearableChanged(bool clearable);
0167 
0168 protected Q_SLOTS:
0169     void updateSection(int logicalIndex);
0170     void resizeSections();
0171     void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast);
0172     void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast);
0173 
0174 protected:
0175     QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = nullptr);
0176     void initialize();
0177 
0178     void initializeSections();
0179     void initializeSections(int start, int end);
0180     void currentChanged(const QModelIndex &current, const QModelIndex &old) override;
0181 
0182     bool event(QEvent *e) override;
0183     void paintEvent(QPaintEvent *e) override;
0184     void mousePressEvent(QMouseEvent *e) override;
0185     void mouseMoveEvent(QMouseEvent *e) override;
0186     void mouseReleaseEvent(QMouseEvent *e) override;
0187     void mouseDoubleClickEvent(QMouseEvent *e) override;
0188     bool viewportEvent(QEvent *e) override;
0189 
0190     virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
0191     virtual QSize sectionSizeFromContents(int logicalIndex) const;
0192 
0193     int horizontalOffset() const override;
0194     int verticalOffset() const override;
0195     void updateGeometries() override;
0196     void scrollContentsBy(int dx, int dy) override;
0197 
0198     void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
0199                      const QList<int> &roles = QList<int>()) override;
0200     void rowsInserted(const QModelIndex &parent, int start, int end) override;
0201 
0202     QRect visualRect(const QModelIndex &index) const override;
0203     void scrollTo(const QModelIndex &index, ScrollHint hint) override;
0204 
0205     QModelIndex indexAt(const QPoint &p) const override;
0206     bool isIndexHidden(const QModelIndex &index) const override;
0207 
0208     QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) override;
0209     void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags) override;
0210     QRegion visualRegionForSelection(const QItemSelection &selection) const override;
0211     virtual void initStyleOptionForIndex(QStyleOptionHeader *option, int logicalIndex) const;
0212     virtual void initStyleOption(QStyleOptionHeader *option) const;
0213 
0214     friend class QTableView;
0215     friend class QTreeView;
0216     friend class ::tst_QHeaderView;
0217 
0218 private:
0219     void initStyleOption(QStyleOptionFrame *option) const override;
0220 
0221     Q_DECLARE_PRIVATE(QHeaderView)
0222     Q_DISABLE_COPY(QHeaderView)
0223 };
0224 
0225 inline int QHeaderView::logicalIndexAt(int ax, int ay) const
0226 { return orientation() == Qt::Horizontal ? logicalIndexAt(ax) : logicalIndexAt(ay); }
0227 inline int QHeaderView::logicalIndexAt(const QPoint &apos) const
0228 { return logicalIndexAt(apos.x(), apos.y()); }
0229 inline void QHeaderView::hideSection(int alogicalIndex)
0230 { setSectionHidden(alogicalIndex, true); }
0231 inline void QHeaderView::showSection(int alogicalIndex)
0232 { setSectionHidden(alogicalIndex, false); }
0233 
0234 QT_END_NAMESPACE
0235 
0236 #endif // QHEADERVIEW_H