1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
3
4#include <QtCharts/QHPieModelMapper>
5
6QT_BEGIN_NAMESPACE
7
8/*!
9 \class QHPieModelMapper
10 \inmodule QtCharts
11 \brief The QHPieModelMapper is a horizontal model mapper for pie series.
12
13 Model mappers enable using a data model derived from the QAbstractItemModel class
14 as a data source for a chart. A horizontal model mapper is used to create a connection
15 between a data model and QPieSeries, so that each column in the data model defines a
16 pie slice and each row maps to the label or the value of the pie slice.
17
18 Both model and pie series properties can be used to manipulate the data. The model
19 mapper keeps the pie series and the data model in sync.
20*/
21/*!
22 \qmltype HPieModelMapper
23 \instantiates QHPieModelMapper
24 \inqmlmodule QtCharts
25
26 \brief Horizontal model mapper for pie series.
27
28 Model mappers enable using a data model derived from the QAbstractItemModel class
29 as a data source for a chart. A horizontal model mapper is used to create a connection
30 between a data model and PieSeries, so that each column in the data model defines a
31 pie slice and each row maps to the label or the value of the pie slice.
32
33 Both model and pie series properties can be used to manipulate the data. The model
34 mapper keeps the pie series and the data model in sync.
35
36 The following QML example creates a pie series with four slices (assuming the model has
37 at least five columns). Each slice gets a label from row 1 and a value from row 2.
38 \code
39 HPieModelMapper {
40 series: pieSeries
41 model: customModel
42 labelsRow: 1
43 valuesRow: 2
44 firstColumn: 1
45 columnCount: 4
46 }
47 \endcode
48*/
49
50/*!
51 \property QHPieModelMapper::series
52 \brief The pie series that is used by the mapper.
53
54 All the data in the series is discarded when it is set to the mapper.
55 When a new series is specified, the old series is disconnected (but it preserves its data).
56*/
57/*!
58 \qmlproperty PieSeries HPieModelMapper::series
59 The PieSeries object that is used by the mapper. If you define the mapper element as a child for a
60 PieSeries, leave this property undefined. All the data in the series is discarded when it is set to the mapper.
61 When a new series is specified, the old series is disconnected (but it preserves its data).
62*/
63
64/*!
65 \property QHPieModelMapper::model
66 \brief The model that is used by the mapper.
67*/
68/*!
69 \qmlproperty SomeModel HPieModelMapper::model
70 The QAbstractItemModel based model that is used by the mapper. You need to implement the model
71 and expose it to QML.
72
73 \note The model has to support adding and removing rows or columns and modifying
74 the data in the cells.
75*/
76
77/*!
78 \property QHPieModelMapper::valuesRow
79 \brief The row of the model that is kept in sync with the values of the pie's slices.
80
81 The default value is -1 (invalid mapping).
82*/
83/*!
84 \qmlproperty int HPieModelMapper::valuesRow
85 The row of the model that is kept in sync with the values of the pie's slices.
86 The default value is -1 (invalid mapping).
87*/
88
89/*!
90 \property QHPieModelMapper::labelsRow
91 \brief The row of the model that is kept in sync with the labels of the pie's slices.
92
93 The default value is -1 (invalid mapping).
94*/
95/*!
96 \qmlproperty int HPieModelMapper::labelsRow
97 The row of the model that is kept in sync with the labels of the pie's slices.
98 The default value is -1 (invalid mapping).
99*/
100
101/*!
102 \property QHPieModelMapper::firstColumn
103 \brief The column of the model that contains the first slice value.
104
105 The minimum and default value is 0.
106*/
107/*!
108 \qmlproperty int HPieModelMapper::firstColumn
109 The column of the model that contains the first slice value.
110 The default value is 0.
111*/
112
113/*!
114 \property QHPieModelMapper::columnCount
115 \brief The number of columns of the model that are mapped as the data for the pie series.
116
117 The minimum and default value is -1 (number limited to the number of columns in the model).
118*/
119/*!
120 \qmlproperty int HPieModelMapper::columnCount
121 The number of columns of the model that are mapped as the data for the pie series.
122 The default value is -1 (number limited by the number of columns in the model).
123*/
124
125/*!
126 \fn void QHPieModelMapper::seriesReplaced()
127 This signal is emitted when the series that the mapper is connected to changes.
128*/
129
130/*!
131 \fn void QHPieModelMapper::modelReplaced()
132 This signal is emitted when the model that the mapper is connected to changes.
133*/
134
135/*!
136 \fn void QHPieModelMapper::valuesRowChanged()
137 This signal is emitted when the values row changes.
138*/
139
140/*!
141 \fn void QHPieModelMapper::labelsRowChanged()
142 This signal is emitted when the labels row changes.
143*/
144
145/*!
146 \fn void QHPieModelMapper::firstColumnChanged()
147 This signal is emitted when the first column changes.
148*/
149
150/*!
151 \fn void QHPieModelMapper::columnCountChanged()
152 This signal is emitted when the number of columns changes.
153*/
154
155/*!
156 Constructs a mapper object that is a child of \a parent.
157*/
158QHPieModelMapper::QHPieModelMapper(QObject *parent) :
159 QPieModelMapper(parent)
160{
161 setOrientation(Qt::Horizontal);
162}
163
164QAbstractItemModel *QHPieModelMapper::model() const
165{
166 return QPieModelMapper::model();
167}
168
169void QHPieModelMapper::setModel(QAbstractItemModel *model)
170{
171 if (model != QPieModelMapper::model()) {
172 QPieModelMapper::setModel(model);
173 emit modelReplaced();
174 }
175}
176
177QPieSeries *QHPieModelMapper::series() const
178{
179 return QPieModelMapper::series();
180}
181
182void QHPieModelMapper::setSeries(QPieSeries *series)
183{
184 if (series != QPieModelMapper::series()) {
185 QPieModelMapper::setSeries(series);
186 emit seriesReplaced();
187 }
188}
189
190/*!
191 Returns the row of the model that is kept in sync with the values of the pie's slices.
192*/
193int QHPieModelMapper::valuesRow() const
194{
195 return valuesSection();
196}
197
198/*!
199 Sets the model row that is kept in sync with the pie slices' values to \a valuesRow.
200*/
201void QHPieModelMapper::setValuesRow(int valuesRow)
202{
203 if (valuesRow != valuesSection()) {
204 setValuesSection(valuesRow);
205 emit valuesRowChanged();
206 }
207}
208
209/*!
210 Returns the row of the model that is kept in sync with the labels of the pie's slices.
211*/
212int QHPieModelMapper::labelsRow() const
213{
214 return labelsSection();
215}
216
217/*!
218 Sets the model row that is kept in sync with the pie slices' labels to \a labelsRow.
219*/
220void QHPieModelMapper::setLabelsRow(int labelsRow)
221{
222 if (labelsRow != labelsSection()) {
223 setLabelsSection(labelsRow);
224 emit labelsRowChanged();
225 }
226}
227
228int QHPieModelMapper::firstColumn() const
229{
230 return first();
231}
232
233void QHPieModelMapper::setFirstColumn(int firstColumn)
234{
235 if (firstColumn != first()) {
236 setFirst(firstColumn);
237 emit firstColumnChanged();
238 }
239}
240
241int QHPieModelMapper::columnCount() const
242{
243 return count();
244}
245
246void QHPieModelMapper::setColumnCount(int columnCount)
247{
248 if (columnCount != count()) {
249 setCount(columnCount);
250 emit columnCountChanged();
251 }
252}
253
254QT_END_NAMESPACE
255
256#include "moc_qhpiemodelmapper.cpp"
257

source code of qtcharts/src/charts/piechart/qhpiemodelmapper.cpp