1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <QtCharts/QVBoxPlotModelMapper>
5
6QT_BEGIN_NAMESPACE
7
8/*!
9 \class QVBoxPlotModelMapper
10 \inmodule QtCharts
11 \brief The QVBoxPlotModelMapper is a vertical model mapper for box plot
12 series.
13
14 Model mappers enable using a data model derived from the QAbstractItemModel class
15 as a data source for a chart. A vertical model mapper is used to create a connection
16 between a data model and a QBoxPlotSeries object, so that each column in the data model
17 defines a box-and-whiskers item and each row maps to the range and three median
18 values of the box-and-whiskers item.
19
20 Both model and series properties can be used to manipulate the data. The model mapper
21 keeps the series and the data model in sync.
22
23 The model mapper ensures that all the bar box-and-whiskers items in the box plot
24 series have equal sizes. Therefore, adding or removing a value from a box-and-whiskers
25 item causes the same change to be made in all the box-and-whiskers items in the
26 box plot series.
27
28 \sa QHBoxPlotModelMapper
29*/
30/*!
31 \qmltype VBoxPlotModelMapper
32 \instantiates QVBoxPlotModelMapper
33 \inqmlmodule QtCharts
34
35 \brief Vertical model mapper for box plot series.
36
37 The VBoxPlotModelMapper type enables using a data model derived from the QAbstractItemModel
38 class as a data source for a chart. A vertical model mapper is used to create a connection
39 between a data model and a BoxPlotSeries type, so that each column in the data model
40 defines a box-and-whiskers item and each row maps to the range and three median values of
41 the box-and-whiskers item.
42
43 Both model and series properties can be used to manipulate the data. The model mapper
44 keeps the series and the data model in sync.
45
46 The model mapper ensures that all the bar box-and-whiskers items in the box plot
47 series have equal sizes. Therefore, adding or removing a value from a box-and-whiskers
48 item causes the same change to be made in all the box-and-whiskers items in the
49 box plot series.
50
51 The following QML code snippet creates a box plot series with three box-and-whiskers items
52 (assuming the model has at least four columns). Each box-and-whiskers item contains
53 data starting from row 1. The name of an item is defined by the column header.
54 \code
55 BoxPlotSeries {
56 VBoxPlotModelMapper {
57 model: myCustomModel // QAbstractItemModel derived implementation
58 firstBoxSetColumn: 1
59 lastBoxSetColumn: 3
60 firstRow: 1
61 }
62 }
63 \endcode
64
65 \sa HBoxPlotModelMapper
66*/
67
68/*!
69 \property QVBoxPlotModelMapper::series
70 \brief The box plot series that is used by the mapper.
71
72 All the data in the series is discarded when it is set to the mapper.
73 When a new series is specified, the old series is disconnected (but it
74 preserves its data).
75*/
76/*!
77 \qmlproperty AbstractBarSeries VBoxPlotModelMapper::series
78 The box plot series that is used by the mapper.
79
80 All the data in the series is discarded when it is set to the mapper.
81 When a new series is specified, the old series is disconnected (but it
82 preserves its data).
83*/
84
85/*!
86 \property QVBoxPlotModelMapper::model
87 \brief The model that is used by the mapper.
88*/
89/*!
90 \qmlproperty SomeModel VBoxPlotModelMapper::model
91 The data model that is used by the mapper. You need to implement the model
92 and expose it to QML.
93
94 \note The model has to support adding and removing rows or columns and
95 modifying the data in the cells.
96*/
97
98/*!
99 \property QVBoxPlotModelMapper::firstBoxSetColumn
100 \brief The column of the model that is used as the data source for the first
101 box-and-whiskers item.
102
103 The default value is -1 (invalid mapping).
104*/
105/*!
106 \qmlproperty int VBoxPlotModelMapper::firstBoxSetColumn
107 The column of the model that is used as the data source for the first
108 box-and-whiskers item. The default value is -1 (invalid mapping).
109*/
110
111/*!
112 \property QVBoxPlotModelMapper::lastBoxSetColumn
113 \brief The column of the model that is used as the data source for the last
114 box-and-whiskers item.
115
116 The default value is -1 (invalid mapping).
117*/
118/*!
119 \qmlproperty int VBoxPlotModelMapper::lastBoxSetColumn
120 The column of the model that is used as the data source for the last
121 box-and-whiskers item. The default value is -1 (invalid mapping).
122*/
123
124/*!
125 \property QVBoxPlotModelMapper::firstRow
126 \brief The row of the model that contains the first values of the
127 box-and-whiskers items in the box plot series.
128
129 The minimum and default value is 0.
130*/
131/*!
132 \qmlproperty int VBoxPlotModelMapper::firstRow
133 The row of the model that contains the first values of the
134 box-and-whiskers items in the box plot series.
135
136 The default value is 0.
137*/
138
139/*!
140 \property QVBoxPlotModelMapper::rowCount
141 \brief The number of rows of the model that are mapped as the data for the
142 box plot series.
143
144 The minimum and default value is -1 (number limited to the number of
145 columns in the model).
146*/
147/*!
148 \qmlproperty int VBoxPlotModelMapper::rowCount
149 The number of rows of the model that are mapped as the data for
150 the box plot series.
151
152 The default value is -1 (number limited to the number of
153 columns in the model).
154*/
155
156/*!
157 \fn void QVBoxPlotModelMapper::seriesReplaced()
158
159 This signal is emitted when the series that the mapper is connected to
160 changes.
161*/
162
163/*!
164 \fn void QVBoxPlotModelMapper::modelReplaced()
165
166 This signal is emitted when the model that the mapper is connected to
167 changes.
168*/
169
170/*!
171 \fn void QVBoxPlotModelMapper::firstBoxSetColumnChanged()
172 This signal is emitted when the first box-and-whiskers item column changes.
173*/
174
175/*!
176 \fn void QVBoxPlotModelMapper::lastBoxSetColumnChanged()
177 This signal is emitted when the last box-and-whiskers item column changes.
178*/
179
180/*!
181 \fn void QVBoxPlotModelMapper::firstRowChanged()
182 This signal is emitted when the first row changes.
183*/
184
185/*!
186 \fn void QVBoxPlotModelMapper::rowCountChanged()
187 This signal is emitted when the number of rows changes.
188*/
189
190/*!
191 Constructs a mapper object that is a child of \a parent.
192*/
193QVBoxPlotModelMapper::QVBoxPlotModelMapper(QObject *parent) :
194 QBoxPlotModelMapper(parent)
195{
196 QBoxPlotModelMapper::setOrientation(Qt::Vertical);
197}
198
199QAbstractItemModel *QVBoxPlotModelMapper::model() const
200{
201 return QBoxPlotModelMapper::model();
202}
203
204void QVBoxPlotModelMapper::setModel(QAbstractItemModel *model)
205{
206 if (model != QBoxPlotModelMapper::model()) {
207 QBoxPlotModelMapper::setModel(model);
208 emit modelReplaced();
209 }
210}
211
212QBoxPlotSeries *QVBoxPlotModelMapper::series() const
213{
214 return QBoxPlotModelMapper::series();
215}
216
217void QVBoxPlotModelMapper::setSeries(QBoxPlotSeries *series)
218{
219 if (series != QBoxPlotModelMapper::series()) {
220 QBoxPlotModelMapper::setSeries(series);
221 emit seriesReplaced();
222 }
223}
224
225int QVBoxPlotModelMapper::firstBoxSetColumn() const
226{
227 return QBoxPlotModelMapper::firstBoxSetSection();
228}
229
230void QVBoxPlotModelMapper::setFirstBoxSetColumn(int firstBoxSetColumn)
231{
232 if (firstBoxSetColumn != firstBoxSetSection()) {
233 QBoxPlotModelMapper::setFirstBoxSetSection(firstBoxSetColumn);
234 emit firstBoxSetColumnChanged();
235 }
236}
237
238int QVBoxPlotModelMapper::lastBoxSetColumn() const
239{
240 return QBoxPlotModelMapper::lastBoxSetSection();
241}
242
243void QVBoxPlotModelMapper::setLastBoxSetColumn(int lastBoxSetColumn)
244{
245 if (lastBoxSetColumn != lastBoxSetSection()) {
246 QBoxPlotModelMapper::setLastBoxSetSection(lastBoxSetColumn);
247 emit lastBoxSetColumnChanged();
248 }
249}
250
251int QVBoxPlotModelMapper::firstRow() const
252{
253 return QBoxPlotModelMapper::first();
254}
255
256void QVBoxPlotModelMapper::setFirstRow(int firstRow)
257{
258 if (firstRow != first()) {
259 QBoxPlotModelMapper::setFirst(firstRow);
260 emit firstRowChanged();
261 }
262}
263
264int QVBoxPlotModelMapper::rowCount() const
265{
266 return QBoxPlotModelMapper::count();
267}
268
269void QVBoxPlotModelMapper::setRowCount(int rowCount)
270{
271 if (rowCount != count()) {
272 QBoxPlotModelMapper::setCount(rowCount);
273 emit rowCountChanged();
274 }
275}
276
277QT_END_NAMESPACE
278
279#include "moc_qvboxplotmodelmapper.cpp"
280

source code of qtcharts/src/charts/boxplotchart/qvboxplotmodelmapper.cpp