qhpiemodelmapper.cpp
261 lines
| 7.5 KiB
| text/x-c
|
CppLexer
Marek Rosa
|
r1309 | /**************************************************************************** | ||
** | ||||
Miikka Heikkinen
|
r2432 | ** Copyright (C) 2013 Digia Plc | ||
Marek Rosa
|
r1309 | ** All rights reserved. | ||
** For any questions to Digia, please use contact form at http://qt.digia.com | ||||
** | ||||
** This file is part of the Qt Commercial Charts Add-on. | ||||
** | ||||
** $QT_BEGIN_LICENSE$ | ||||
** Licensees holding valid Qt Commercial licenses may use this file in | ||||
** accordance with the Qt Commercial License Agreement provided with the | ||||
** Software or, alternatively, in accordance with the terms contained in | ||||
** a written agreement between you and Digia. | ||||
** | ||||
** If you have questions regarding the use of this file, please use | ||||
** contact form at http://qt.digia.com | ||||
** $QT_END_LICENSE$ | ||||
** | ||||
****************************************************************************/ | ||||
Marek Rosa
|
r1237 | #include "qhpiemodelmapper.h" | ||
QTCOMMERCIALCHART_BEGIN_NAMESPACE | ||||
Marek Rosa
|
r1331 | /*! | ||
\class QHPieModelMapper | ||||
\mainclass | ||||
Marek Rosa
|
r1397 | Model mappers allow you to use QAbstractItemModel derived models as a data source for a chart series. | ||
Marek Rosa
|
r1378 | Horizontal model mapper is used to create a connection between QPieSeries and QAbstractItemModel derived model object that keeps the consecutive pie slices data in rows. | ||
Marek Rosa
|
r1340 | It is possible to use both QAbstractItemModel and QPieSeries model API. QHPieModelMapper makes sure that Pie and the model are kept in sync. | ||
Miikka Heikkinen
|
r2494 | \note Used model has to support adding/removing rows/columns and modifying the data of the cells. | ||
Marek Rosa
|
r1340 | */ | ||
Tero Ahola
|
r1516 | /*! | ||
\qmlclass HPieModelMapper QHPieModelMapper | ||||
HPieModelMapper allows you to use your own QAbstractItemModel derived model with data in rows as a data source | ||||
for a pie series. It is possible to use both QAbstractItemModel and PieSeries data API to manipulate data. | ||||
HPieModelMapper keeps the Pie and the model in sync. | ||||
The following QML example would create a pie series with four slices (assuming the model has | ||||
at least five columns). Each slice would contain a label from row 1 and a value from row 2. | ||||
\code | ||||
HPieModelMapper { | ||||
series: pieSeries | ||||
model: customModel | ||||
labelsRow: 1 | ||||
valuesRow: 2 | ||||
firstColumn: 1 | ||||
columnCount: 4 | ||||
} | ||||
\endcode | ||||
*/ | ||||
Marek Rosa
|
r1340 | |||
Marek Rosa
|
r1508 | /*! | ||
\property QHPieModelMapper::series | ||||
\brief Defines the QPieSeries object that is used by the mapper. | ||||
All the data in the series is discarded when it is set to the mapper. | ||||
When new series is specified the old series is disconnected (it preserves its data) | ||||
*/ | ||||
Tero Ahola
|
r1516 | /*! | ||
\qmlproperty PieSeries HPieModelMapper::series | ||||
Defines the PieSeries object that is used by the mapper. If you define the mapper element as a child for a | ||||
PieSeries, leave this property undefined. All the data in the series is discarded when it is set to the mapper. | ||||
When new series is specified the old series is disconnected (it preserves its data). | ||||
*/ | ||||
Marek Rosa
|
r1508 | |||
/*! | ||||
\property QHPieModelMapper::model | ||||
\brief Defines the model that is used by the mapper. | ||||
*/ | ||||
Tero Ahola
|
r1516 | /*! | ||
\qmlproperty SomeModel HPieModelMapper::model | ||||
The QAbstractItemModel based model that is used by the mapper. You need to implement the model and expose it to | ||||
Marek Rosa
|
r2396 | QML as shown in \l {QML Custom Model} demo application. Note: the model has to support adding/removing rows/columns | ||
Tero Ahola
|
r1516 | and modifying the data of the cells. | ||
*/ | ||||
Marek Rosa
|
r1508 | |||
Marek Rosa
|
r1340 | /*! | ||
\property QHPieModelMapper::valuesRow | ||||
Miikka Heikkinen
|
r2520 | \brief Defines which row of the model is kept in sync with the values of the pie's slices. | ||
Marek Rosa
|
r1340 | Default value is: -1 (invalid mapping) | ||
*/ | ||||
Tero Ahola
|
r1516 | /*! | ||
\qmlproperty int HPieModelMapper::valuesRow | ||||
Defines which row of the model is kept in sync with the values of the pie's slices. Default value is: -1 (invalid | ||||
mapping). | ||||
*/ | ||||
Marek Rosa
|
r1340 | |||
/*! | ||||
\property QHPieModelMapper::labelsRow | ||||
Miikka Heikkinen
|
r2520 | \brief Defines which row of the model is kept in sync with the labels of the pie's slices. | ||
Tero Ahola
|
r1516 | Default value is: -1 (invalid mapping) | ||
*/ | ||||
/*! | ||||
\qmlproperty int HPieModelMapper::labelsRow | ||||
Defines which row of the model is kept in sync with the labels of the pie's slices | ||||
Marek Rosa
|
r1340 | Default value is: -1 (invalid mapping) | ||
Marek Rosa
|
r1331 | */ | ||
Marek Rosa
|
r1499 | /*! | ||
\property QHPieModelMapper::firstColumn | ||||
\brief Defines which column of the model contains the first slice value. | ||||
Miikka Heikkinen
|
r2520 | |||
Marek Rosa
|
r1499 | Minimal and default value is: 0 | ||
*/ | ||||
/*! | ||||
Tero Ahola
|
r1516 | \qmlproperty int HPieModelMapper::firstColumn | ||
Marek Rosa
|
r1499 | Defines which column of the model contains the first slice value. | ||
The default value is 0. | ||||
*/ | ||||
/*! | ||||
\property QHPieModelMapper::columnCount | ||||
Miikka Heikkinen
|
r2520 | \brief Defines the number of columns of the model that are mapped as the data for QPieSeries. | ||
Marek Rosa
|
r1499 | Minimal and default value is: -1 (count limited by the number of columns in the model) | ||
*/ | ||||
/*! | ||||
Tero Ahola
|
r1516 | \qmlproperty int HPieModelMapper::columnCount | ||
Marek Rosa
|
r1499 | Defines the number of columns of the model that are mapped as the data for QPieSeries. The default value is | ||
-1 (count limited by the number of columns in the model) | ||||
*/ | ||||
Marek Rosa
|
r1508 | /*! | ||
\fn void QHPieModelMapper::seriesReplaced() | ||||
Emitted when the series to which mapper is connected to has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QHPieModelMapper::modelReplaced() | ||||
Emitted when the model to which mapper is connected to has changed. | ||||
*/ | ||||
Marek Rosa
|
r1476 | /*! | ||
\fn void QHPieModelMapper::valuesRowChanged() | ||||
Emitted when the valuesRow has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QHPieModelMapper::labelsRowChanged() | ||||
Emitted when the labelsRow has changed. | ||||
*/ | ||||
Marek Rosa
|
r1499 | /*! | ||
\fn void QHPieModelMapper::firstColumnChanged() | ||||
Emitted when the firstColumn has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QHPieModelMapper::columnCountChanged() | ||||
Emitted when the columnCount has changed. | ||||
*/ | ||||
Marek Rosa
|
r1347 | /*! | ||
Constructs a mapper object which is a child of \a parent. | ||||
*/ | ||||
Marek Rosa
|
r1237 | QHPieModelMapper::QHPieModelMapper(QObject *parent) : | ||
QPieModelMapper(parent) | ||||
{ | ||||
Marek Rosa
|
r1499 | setOrientation(Qt::Horizontal); | ||
Marek Rosa
|
r1237 | } | ||
Jani Honkonen
|
r2104 | QAbstractItemModel *QHPieModelMapper::model() const | ||
Marek Rosa
|
r1508 | { | ||
return QPieModelMapper::model(); | ||||
} | ||||
void QHPieModelMapper::setModel(QAbstractItemModel *model) | ||||
{ | ||||
if (model != QPieModelMapper::model()) { | ||||
QPieModelMapper::setModel(model); | ||||
emit modelReplaced(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r2104 | QPieSeries *QHPieModelMapper::series() const | ||
Marek Rosa
|
r1508 | { | ||
return QPieModelMapper::series(); | ||||
} | ||||
void QHPieModelMapper::setSeries(QPieSeries *series) | ||||
{ | ||||
if (series != QPieModelMapper::series()) { | ||||
QPieModelMapper::setSeries(series); | ||||
emit seriesReplaced(); | ||||
} | ||||
} | ||||
Marek Rosa
|
r1340 | /*! | ||
Returns which row of the model is kept in sync with the values of the pie's slices | ||||
*/ | ||||
Marek Rosa
|
r1237 | int QHPieModelMapper::valuesRow() const | ||
{ | ||||
Marek Rosa
|
r1499 | return valuesSection(); | ||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Sets the model row that is kept in sync with the pie slices values. | ||||
Parameter \a valuesRow specifies the row of the model. | ||||
*/ | ||||
Marek Rosa
|
r1237 | void QHPieModelMapper::setValuesRow(int valuesRow) | ||
{ | ||||
Marek Rosa
|
r1474 | if (valuesRow != valuesSection()) { | ||
Marek Rosa
|
r1499 | setValuesSection(valuesRow); | ||
Marek Rosa
|
r1474 | emit valuesRowChanged(); | ||
} | ||||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Returns which row of the model is kept in sync with the labels of the pie's slices | ||||
*/ | ||||
Marek Rosa
|
r1237 | int QHPieModelMapper::labelsRow() const | ||
{ | ||||
Marek Rosa
|
r1499 | return labelsSection(); | ||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Sets the model row that is kept in sync with the pie's slices labels. | ||||
Parameter \a labelsRow specifies the row of the model. | ||||
*/ | ||||
Marek Rosa
|
r1237 | void QHPieModelMapper::setLabelsRow(int labelsRow) | ||
{ | ||||
Marek Rosa
|
r1474 | if (labelsRow != labelsSection()) { | ||
Marek Rosa
|
r1499 | setLabelsSection(labelsRow); | ||
Marek Rosa
|
r1474 | emit labelsRowChanged(); | ||
} | ||||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1499 | int QHPieModelMapper::firstColumn() const | ||
{ | ||||
return first(); | ||||
} | ||||
void QHPieModelMapper::setFirstColumn(int firstColumn) | ||||
{ | ||||
if (firstColumn != first()) { | ||||
setFirst(firstColumn); | ||||
emit firstColumnChanged(); | ||||
} | ||||
} | ||||
int QHPieModelMapper::columnCount() const | ||||
{ | ||||
return count(); | ||||
} | ||||
void QHPieModelMapper::setColumnCount(int columnCount) | ||||
{ | ||||
if (columnCount != count()) { | ||||
setCount(columnCount); | ||||
Marek Rosa
|
r1923 | emit columnCountChanged(); | ||
Marek Rosa
|
r1499 | } | ||
} | ||||
Marek Rosa
|
r1237 | #include "moc_qhpiemodelmapper.cpp" | ||
QTCOMMERCIALCHART_END_NAMESPACE | ||||