1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#ifndef QTGRAPHS_QITEMMODELBARDATAPROXY_H
5#define QTGRAPHS_QITEMMODELBARDATAPROXY_H
6
7#include <QtCore/qabstractitemmodel.h>
8#include <QtCore/qregularexpression.h>
9#include <QtGraphs/qbardataproxy.h>
10
11QT_BEGIN_NAMESPACE
12
13class QItemModelBarDataProxyPrivate;
14
15class Q_GRAPHS_EXPORT QItemModelBarDataProxy : public QBarDataProxy
16{
17 Q_OBJECT
18 Q_DECLARE_PRIVATE(QItemModelBarDataProxy)
19 Q_CLASSINFO("RegisterEnumClassesUnscoped", "false")
20 Q_PROPERTY(QAbstractItemModel *itemModel READ itemModel WRITE setItemModel NOTIFY
21 itemModelChanged FINAL)
22 Q_PROPERTY(QString rowRole READ rowRole WRITE setRowRole NOTIFY rowRoleChanged FINAL)
23 Q_PROPERTY(QString columnRole READ columnRole WRITE setColumnRole NOTIFY columnRoleChanged FINAL)
24 Q_PROPERTY(QString valueRole READ valueRole WRITE setValueRole NOTIFY valueRoleChanged FINAL)
25 Q_PROPERTY(QString rotationRole READ rotationRole WRITE setRotationRole NOTIFY
26 rotationRoleChanged FINAL)
27 Q_PROPERTY(QStringList rowCategories READ rowCategories WRITE setRowCategories NOTIFY
28 rowCategoriesChanged FINAL)
29 Q_PROPERTY(QStringList columnCategories READ columnCategories WRITE setColumnCategories NOTIFY
30 columnCategoriesChanged FINAL)
31 Q_PROPERTY(bool useModelCategories READ useModelCategories WRITE setUseModelCategories NOTIFY
32 useModelCategoriesChanged FINAL)
33 Q_PROPERTY(bool autoRowCategories READ autoRowCategories WRITE setAutoRowCategories NOTIFY
34 autoRowCategoriesChanged FINAL)
35 Q_PROPERTY(bool autoColumnCategories READ autoColumnCategories WRITE setAutoColumnCategories
36 NOTIFY autoColumnCategoriesChanged FINAL)
37 Q_PROPERTY(QRegularExpression rowRolePattern READ rowRolePattern WRITE setRowRolePattern NOTIFY
38 rowRolePatternChanged FINAL)
39 Q_PROPERTY(QRegularExpression columnRolePattern READ columnRolePattern WRITE
40 setColumnRolePattern NOTIFY columnRolePatternChanged FINAL)
41 Q_PROPERTY(QRegularExpression valueRolePattern READ valueRolePattern WRITE setValueRolePattern
42 NOTIFY valueRolePatternChanged FINAL)
43 Q_PROPERTY(QRegularExpression rotationRolePattern READ rotationRolePattern WRITE
44 setRotationRolePattern NOTIFY rotationRolePatternChanged FINAL)
45 Q_PROPERTY(QString rowRoleReplace READ rowRoleReplace WRITE setRowRoleReplace NOTIFY
46 rowRoleReplaceChanged FINAL)
47 Q_PROPERTY(QString columnRoleReplace READ columnRoleReplace WRITE setColumnRoleReplace NOTIFY
48 columnRoleReplaceChanged FINAL)
49 Q_PROPERTY(QString valueRoleReplace READ valueRoleReplace WRITE setValueRoleReplace NOTIFY
50 valueRoleReplaceChanged FINAL)
51 Q_PROPERTY(QString rotationRoleReplace READ rotationRoleReplace WRITE setRotationRoleReplace
52 NOTIFY rotationRoleReplaceChanged FINAL)
53 Q_PROPERTY(QItemModelBarDataProxy::MultiMatchBehavior multiMatchBehavior READ multiMatchBehavior
54 WRITE setMultiMatchBehavior NOTIFY multiMatchBehaviorChanged FINAL)
55 QML_NAMED_ELEMENT(ItemModelBarDataProxy)
56
57public:
58 enum class MultiMatchBehavior {
59 First,
60 Last,
61 Average,
62 Cumulative,
63 };
64 Q_ENUM(MultiMatchBehavior)
65
66 explicit QItemModelBarDataProxy(QObject *parent = nullptr);
67 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel, QObject *parent = nullptr);
68 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel,
69 const QString &valueRole,
70 QObject *parent = nullptr);
71 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel,
72 const QString &rowRole,
73 const QString &columnRole,
74 const QString &valueRole,
75 QObject *parent = nullptr);
76 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel,
77 const QString &rowRole,
78 const QString &columnRole,
79 const QString &valueRole,
80 const QString &rotationRole,
81 QObject *parent = nullptr);
82 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel,
83 const QString &rowRole,
84 const QString &columnRole,
85 const QString &valueRole,
86 const QStringList &rowCategories,
87 const QStringList &columnCategories,
88 QObject *parent = nullptr);
89 explicit QItemModelBarDataProxy(QAbstractItemModel *itemModel,
90 const QString &rowRole,
91 const QString &columnRole,
92 const QString &valueRole,
93 const QString &rotationRole,
94 const QStringList &rowCategories,
95 const QStringList &columnCategories,
96 QObject *parent = nullptr);
97 ~QItemModelBarDataProxy() override;
98
99 void setItemModel(QAbstractItemModel *itemModel);
100 QAbstractItemModel *itemModel() const;
101
102 void setRowRole(const QString &role);
103 QString rowRole() const;
104 void setColumnRole(const QString &role);
105 QString columnRole() const;
106 void setValueRole(const QString &role);
107 QString valueRole() const;
108 void setRotationRole(const QString &role);
109 QString rotationRole() const;
110
111 void setRowCategories(const QStringList &categories);
112 QStringList rowCategories() const;
113 void setColumnCategories(const QStringList &categories);
114 QStringList columnCategories() const;
115
116 void setUseModelCategories(bool enable);
117 bool useModelCategories() const;
118 void setAutoRowCategories(bool enable);
119 bool autoRowCategories() const;
120 void setAutoColumnCategories(bool enable);
121 bool autoColumnCategories() const;
122
123 void remap(const QString &rowRole,
124 const QString &columnRole,
125 const QString &valueRole,
126 const QString &rotationRole,
127 const QStringList &rowCategories,
128 const QStringList &columnCategories);
129
130 Q_INVOKABLE qsizetype rowCategoryIndex(const QString &category);
131 Q_INVOKABLE qsizetype columnCategoryIndex(const QString &category);
132
133 void setRowRolePattern(const QRegularExpression &pattern);
134 QRegularExpression rowRolePattern() const;
135 void setColumnRolePattern(const QRegularExpression &pattern);
136 QRegularExpression columnRolePattern() const;
137 void setValueRolePattern(const QRegularExpression &pattern);
138 QRegularExpression valueRolePattern() const;
139 void setRotationRolePattern(const QRegularExpression &pattern);
140 QRegularExpression rotationRolePattern() const;
141
142 void setRowRoleReplace(const QString &replace);
143 QString rowRoleReplace() const;
144 void setColumnRoleReplace(const QString &replace);
145 QString columnRoleReplace() const;
146 void setValueRoleReplace(const QString &replace);
147 QString valueRoleReplace() const;
148 void setRotationRoleReplace(const QString &replace);
149 QString rotationRoleReplace() const;
150
151 void setMultiMatchBehavior(QItemModelBarDataProxy::MultiMatchBehavior behavior);
152 QItemModelBarDataProxy::MultiMatchBehavior multiMatchBehavior() const;
153
154Q_SIGNALS:
155 void itemModelChanged(const QAbstractItemModel *itemModel);
156 void rowRoleChanged(const QString &role);
157 void columnRoleChanged(const QString &role);
158 void valueRoleChanged(const QString &role);
159 void rotationRoleChanged(const QString &role);
160 void rowCategoriesChanged();
161 void columnCategoriesChanged();
162 void useModelCategoriesChanged(bool enable);
163 void autoRowCategoriesChanged(bool enable);
164 void autoColumnCategoriesChanged(bool enable);
165 void rowRolePatternChanged(const QRegularExpression &pattern);
166 void columnRolePatternChanged(const QRegularExpression &pattern);
167 void valueRolePatternChanged(const QRegularExpression &pattern);
168 void rotationRolePatternChanged(const QRegularExpression &pattern);
169 void rowRoleReplaceChanged(const QString &replace);
170 void columnRoleReplaceChanged(const QString &replace);
171 void valueRoleReplaceChanged(const QString &replace);
172 void rotationRoleReplaceChanged(const QString &replace);
173 void multiMatchBehaviorChanged(QItemModelBarDataProxy::MultiMatchBehavior behavior);
174
175private:
176 Q_DISABLE_COPY(QItemModelBarDataProxy)
177
178 friend class BarItemModelHandler;
179};
180
181QT_END_NAMESPACE
182
183#endif
184

source code of qtgraphs/src/graphs3d/data/qitemmodelbardataproxy.h