1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQUICKHEADERVIEW_P_P_H
5#define QQUICKHEADERVIEW_P_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtCore/QAbstractItemModel>
19#include <QtCore/QPointer>
20#include <QtQuick/private/qquicktableview_p_p.h>
21#include <private/qquickheaderview_p.h>
22
23QT_BEGIN_NAMESPACE
24
25class Q_QUICKTEMPLATES2_EXPORT QHeaderDataProxyModel : public QAbstractItemModel
26{
27 Q_OBJECT
28 Q_DISABLE_COPY(QHeaderDataProxyModel)
29 Q_PROPERTY(QAbstractItemModel *sourceModel READ sourceModel)
30public:
31 explicit QHeaderDataProxyModel(QObject *parent = nullptr);
32 ~QHeaderDataProxyModel();
33
34 void setSourceModel(QAbstractItemModel *newSourceModel);
35 QPointer<QAbstractItemModel> sourceModel() const;
36 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
37 QModelIndex parent(const QModelIndex &child) const override;
38 QModelIndex sibling(int row, int column, const QModelIndex &idx) const override;
39 int rowCount(const QModelIndex &parent = QModelIndex()) const override;
40 int columnCount(const QModelIndex &parent = QModelIndex()) const override;
41 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
42 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override;
43 bool hasChildren(const QModelIndex &parent = QModelIndex()) const override;
44 QHash<int, QByteArray> roleNames() const override;
45
46 inline QVariant variantValue() const;
47 inline Qt::Orientation orientation() const;
48 inline void setOrientation(Qt::Orientation o);
49
50 QQuickHeaderViewBase *m_headerView = nullptr;
51
52private:
53 inline void connectToModel();
54 inline void disconnectFromModel();
55 QPointer<QAbstractItemModel> m_model = nullptr;
56 Qt::Orientation m_orientation = Qt::Horizontal;
57};
58
59class QQuickHeaderViewBasePrivate : public QQuickTableViewPrivate
60{
61 Q_DECLARE_PUBLIC(QQuickHeaderViewBase)
62public:
63 QQuickHeaderViewBasePrivate();
64 ~QQuickHeaderViewBasePrivate();
65
66 static inline QQuickHeaderViewBasePrivate *get(QQuickHeaderViewBase *q) { return q->d_func(); }
67
68 void init();
69 Qt::Orientation orientation() const;
70 void setOrientation(Qt::Orientation orientation);
71 const QPointer<QQuickItem> delegateItemAt(int row, int col) const;
72 QVariant modelImpl() const override;
73 void setModelImpl(const QVariant &newModel) override;
74 void syncModel() override;
75 void syncSyncView() override;
76 QAbstractItemModel *selectionSourceModel() override;
77
78 // QQuickTableViewPrivate interface
79 virtual void initItemCallback(int modelIndex, QObject *item) override;
80
81protected:
82 QHeaderDataProxyModel m_headerDataProxyModel;
83 struct SectionSize
84 {
85 int section;
86 qreal previousSize;
87 };
88 QStack<SectionSize> m_hiddenSectionSizes;
89 bool m_modelExplicitlySet = false;
90 QString m_textRole;
91
92 int logicalRowIndex(const int visualIndex) const final;
93 int logicalColumnIndex(const int visualIndex) const final;
94 int visualRowIndex(const int logicalIndex) const final;
95 int visualColumnIndex(const int logicalIndex) const final;
96};
97
98class QQuickHorizontalHeaderViewPrivate : public QQuickHeaderViewBasePrivate
99{
100 Q_DECLARE_PUBLIC(QQuickHorizontalHeaderView)
101public:
102 QQuickHorizontalHeaderViewPrivate();
103 ~QQuickHorizontalHeaderViewPrivate();
104
105 bool m_movableColumns = false;
106};
107
108class QQuickVerticalHeaderViewPrivate : public QQuickHeaderViewBasePrivate
109{
110 Q_DECLARE_PUBLIC(QQuickVerticalHeaderView)
111public:
112 QQuickVerticalHeaderViewPrivate();
113 ~QQuickVerticalHeaderViewPrivate();
114
115 bool m_movableRows = false;
116};
117
118QT_END_NAMESPACE
119
120#endif // QQUICKHEADERVIEW_P_P_H
121

source code of qtdeclarative/src/quicktemplates/qquickheaderview_p_p.h