1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2020 The Qt Company Ltd. 4 ** Contact: http://www.qt.io/licensing/ 5 ** 6 ** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL3$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and The Qt Company. For licensing terms 14 ** and conditions see http://www.qt.io/terms-conditions. For further 15 ** information use the contact form at http://www.qt.io/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 3 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPLv3 included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 3 requirements 23 ** will be met: https://www.gnu.org/licenses/lgpl.html. 24 ** 25 ** GNU General Public License Usage 26 ** Alternatively, this file may be used under the terms of the GNU 27 ** General Public License version 2.0 or later as published by the Free 28 ** Software Foundation and appearing in the file LICENSE.GPL included in 29 ** the packaging of this file. Please review the following information to 30 ** ensure the GNU General Public License version 2.0 requirements will be 31 ** met: http://www.gnu.org/licenses/gpl-2.0.html. 32 ** 33 ** $QT_END_LICENSE$ 34 ** 35 ****************************************************************************/ 36 37 #ifndef QQUICKHEADERVIEW_P_P_H 38 #define QQUICKHEADERVIEW_P_P_H 39 40 // 41 // W A R N I N G 42 // ------------- 43 // 44 // This file is not part of the Qt API. It exists purely as an 45 // implementation detail. This header file may change from version to 46 // version without notice, or even be removed. 47 // 48 // We mean it. 49 // 50 51 #include <QtCore/QAbstractItemModel> 52 #include <QtCore/QPointer> 53 #include <QtCore/QTransposeProxyModel> 54 #include <QtQuick/private/qquicktableview_p_p.h> 55 #include <private/qquickheaderview_p.h> 56 57 QT_BEGIN_NAMESPACE 58 59 class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QHeaderDataProxyModel : public QAbstractItemModel 60 { 61 Q_OBJECT 62 Q_DISABLE_COPY(QHeaderDataProxyModel) 63 Q_PROPERTY(QAbstractItemModel *sourceModel READ sourceModel) 64 public: 65 explicit QHeaderDataProxyModel(QObject *parent = nullptr); 66 ~QHeaderDataProxyModel(); 67 68 void setSourceModel(QAbstractItemModel *newSourceModel); 69 QPointer<QAbstractItemModel> sourceModel() const; 70 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; 71 QModelIndex parent(const QModelIndex &child) const override; 72 QModelIndex sibling(int row, int column, const QModelIndex &idx) const override; 73 int rowCount(const QModelIndex &parent = QModelIndex()) const override; 74 int columnCount(const QModelIndex &parent = QModelIndex()) const override; 75 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; 76 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 77 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override; 78 79 inline QVariant variantValue() const; 80 inline Qt::Orientation orientation() const; 81 inline void setOrientation(Qt::Orientation o); 82 83 private: 84 inline void connectToModel(); 85 inline void disconnectFromModel(); 86 QPointer<QAbstractItemModel> m_model = nullptr; 87 Qt::Orientation m_orientation = Qt::Horizontal; 88 }; 89 90 class QQuickHeaderViewBasePrivate : public QQuickTableViewPrivate 91 { 92 Q_DECLARE_PUBLIC(QQuickHeaderViewBase) 93 public: 94 QQuickHeaderViewBasePrivate(); 95 ~QQuickHeaderViewBasePrivate(); 96 97 Qt::Orientation orientation() const; 98 void setOrientation(Qt::Orientation orientation); 99 const QPointer<QQuickItem> delegateItemAt(int row, int col) const; 100 QVariant modelImpl() const override; 101 void setModelImpl(const QVariant &newModel) override; 102 void syncModel() override; 103 void syncSyncView() override; 104 105 protected: 106 QHeaderDataProxyModel m_headerDataProxyModel; 107 QTransposeProxyModel m_transposeProxyModel; 108 struct SectionSize 109 { 110 int section; 111 qreal previousSize; 112 }; 113 QStack<SectionSize> m_hiddenSectionSizes; 114 bool m_modelExplicitlySetByUser = false; 115 QString m_textRole; 116 }; 117 118 class QQuickHorizontalHeaderViewPrivate : public QQuickHeaderViewBasePrivate 119 { 120 Q_DECLARE_PUBLIC(QQuickHorizontalHeaderView) 121 public: 122 QQuickHorizontalHeaderViewPrivate(); 123 ~QQuickHorizontalHeaderViewPrivate(); 124 }; 125 126 class QQuickVerticalHeaderViewPrivate : public QQuickHeaderViewBasePrivate 127 { 128 Q_DECLARE_PUBLIC(QQuickVerticalHeaderView) 129 public: 130 QQuickVerticalHeaderViewPrivate(); 131 ~QQuickVerticalHeaderViewPrivate(); 132 }; 133 134 QT_END_NAMESPACE 135 136 #endif // QQUICKHEADERVIEW_P_P_H 137