Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-09-17 09:11:51

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