qvpiemodelmapper.cpp
270 lines
| 7.8 KiB
| text/x-c
|
CppLexer
Titta Heikkala
|
r2845 | /****************************************************************************** | ||
Marek Rosa
|
r1309 | ** | ||
Titta Heikkala
|
r2845 | ** Copyright (C) 2015 The Qt Company Ltd. | ||
** Contact: http://www.qt.io/licensing/ | ||||
Marek Rosa
|
r1309 | ** | ||
Titta Heikkala
|
r2740 | ** This file is part of the Qt Charts module. | ||
Marek Rosa
|
r1309 | ** | ||
Titta Heikkala
|
r2845 | ** $QT_BEGIN_LICENSE:COMM$ | ||
Marek Rosa
|
r1309 | ** | ||
Titta Heikkala
|
r2845 | ** Commercial License Usage | ||
** Licensees holding valid commercial Qt licenses may use this file in | ||||
** accordance with the commercial license agreement provided with the | ||||
** Software or, alternatively, in accordance with the terms contained in | ||||
** a written agreement between you and The Qt Company. For licensing terms | ||||
** and conditions see http://www.qt.io/terms-conditions. For further | ||||
** information use the contact form at http://www.qt.io/contact-us. | ||||
Marek Rosa
|
r1309 | ** | ||
Titta Heikkala
|
r2845 | ** $QT_END_LICENSE$ | ||
** | ||||
******************************************************************************/ | ||||
Marek Rosa
|
r1309 | |||
Titta Heikkala
|
r2714 | #include <QtCharts/QVPieModelMapper> | ||
Marek Rosa
|
r1237 | |||
Titta Heikkala
|
r2712 | QT_CHARTS_BEGIN_NAMESPACE | ||
Marek Rosa
|
r1237 | |||
Marek Rosa
|
r1331 | /*! | ||
\class QVPieModelMapper | ||||
Titta Heikkala
|
r2639 | \inmodule Qt Charts | ||
Titta Heikkala
|
r2712 | \brief Vertical model mapper for pie series. | ||
Marek Rosa
|
r1331 | |||
Marek Rosa
|
r1397 | Model mappers allow you to use QAbstractItemModel derived models as a data source for a chart series. | ||
Marek Rosa
|
r1378 | Vertical model mapper is used to create a connection between QPieSeries and QAbstractItemModel derived model object that keeps the consecutive pie slices data in columns. | ||
Marek Rosa
|
r1340 | It is possible to use both QAbstractItemModel and QPieSeries model API. QVPieModelMapper 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 | /*! | ||
Titta Heikkala
|
r2639 | \qmltype VPieModelMapper | ||
\instantiates QVPieModelMapper | ||||
Titta Heikkala
|
r2712 | \inqmlmodule QtCharts | ||
\brief Vertical model mapper for pie series. | ||||
VPieModelMapper allows you to use your own QAbstractItemModel derived model with data in columns | ||||
as a data source for a pie series. It is possible to use both QAbstractItemModel and PieSeries | ||||
data API to manipulate data. VPieModelMapper 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 rows). Each slice would contain a label from column 1 and a value from column 2. | ||||
\code | ||||
VPieModelMapper { | ||||
series: pieSeries | ||||
model: customModel | ||||
labelsColumn: 1 | ||||
valuesColumn: 2 | ||||
firstRow: 1 | ||||
rowCount: 4 | ||||
} | ||||
\endcode | ||||
Tero Ahola
|
r1516 | */ | ||
Marek Rosa
|
r1340 | |||
Marek Rosa
|
r1508 | /*! | ||
\property QVPieModelMapper::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 VPieModelMapper::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 QVPieModelMapper::model | ||||
\brief Defines the model that is used by the mapper. | ||||
*/ | ||||
Tero Ahola
|
r1516 | /*! | ||
\qmlproperty SomeModel VPieModelMapper::model | ||||
Titta Heikkala
|
r2618 | The QAbstractItemModel based model that is used by the mapper. You need to implement the model | ||
and expose it to QML. Note: the model has to support adding/removing rows/columns and modifying | ||||
the data of the cells. | ||||
Tero Ahola
|
r1516 | */ | ||
Marek Rosa
|
r1508 | |||
Marek Rosa
|
r1340 | /*! | ||
\property QVPieModelMapper::valuesColumn | ||||
Miikka Heikkinen
|
r2520 | \brief Defines which column 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 VPieModelMapper::valuesColumn | ||||
Defines which column 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 QVPieModelMapper::labelsColumn | ||||
Miikka Heikkinen
|
r2520 | \brief Defines which column 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 | */ | ||
Tero Ahola
|
r1516 | /*! | ||
\qmlproperty int VPieModelMapper::labelsColumn | ||||
Defines which column of the model is kept in sync with the labels of the pie's slices. Default value is -1 (invalid | ||||
mapping). | ||||
*/ | ||||
Marek Rosa
|
r1331 | |||
Marek Rosa
|
r1499 | /*! | ||
\property QVPieModelMapper::firstRow | ||||
\brief Defines which row 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 VPieModelMapper::firstRow | ||
Marek Rosa
|
r1499 | Defines which row of the model contains the first slice value. | ||
The default value is 0. | ||||
*/ | ||||
/*! | ||||
\property QVPieModelMapper::rowCount | ||||
Miikka Heikkinen
|
r2520 | \brief Defines the number of rows 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 rows in the model) | ||
*/ | ||||
/*! | ||||
Tero Ahola
|
r1516 | \qmlproperty int VPieModelMapper::columnCount | ||
Marek Rosa
|
r1499 | Defines the number of rows of the model that are mapped as the data for QPieSeries. The default value is | ||
-1 (count limited by the number of rows in the model) | ||||
*/ | ||||
Marek Rosa
|
r1508 | /*! | ||
\fn void QVPieModelMapper::seriesReplaced() | ||||
Emitted when the series to which mapper is connected to has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QVPieModelMapper::modelReplaced() | ||||
Emitted when the model to which mapper is connected to has changed. | ||||
*/ | ||||
Marek Rosa
|
r1476 | /*! | ||
\fn void QVPieModelMapper::valuesColumnChanged() | ||||
Emitted when the valuesColumn has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QVPieModelMapper::labelsColumnChanged() | ||||
Emitted when the labelsColumn has changed. | ||||
*/ | ||||
Marek Rosa
|
r1499 | /*! | ||
\fn void QVPieModelMapper::firstRowChanged() | ||||
Emitted when the firstRow has changed. | ||||
*/ | ||||
/*! | ||||
\fn void QVPieModelMapper::rowCountChanged() | ||||
Emitted when the rowCount has changed. | ||||
*/ | ||||
Marek Rosa
|
r1347 | /*! | ||
Constructs a mapper object which is a child of \a parent. | ||||
*/ | ||||
Marek Rosa
|
r1237 | QVPieModelMapper::QVPieModelMapper(QObject *parent) : | ||
QPieModelMapper(parent) | ||||
{ | ||||
QPieModelMapper::setOrientation(Qt::Vertical); | ||||
} | ||||
Jani Honkonen
|
r2104 | QAbstractItemModel *QVPieModelMapper::model() const | ||
Marek Rosa
|
r1508 | { | ||
return QPieModelMapper::model(); | ||||
} | ||||
void QVPieModelMapper::setModel(QAbstractItemModel *model) | ||||
{ | ||||
if (model != QPieModelMapper::model()) { | ||||
QPieModelMapper::setModel(model); | ||||
emit modelReplaced(); | ||||
} | ||||
} | ||||
Jani Honkonen
|
r2104 | QPieSeries *QVPieModelMapper::series() const | ||
Marek Rosa
|
r1508 | { | ||
return QPieModelMapper::series(); | ||||
} | ||||
void QVPieModelMapper::setSeries(QPieSeries *series) | ||||
{ | ||||
if (series != QPieModelMapper::series()) { | ||||
QPieModelMapper::setSeries(series); | ||||
emit seriesReplaced(); | ||||
} | ||||
} | ||||
Marek Rosa
|
r1340 | /*! | ||
Returns which column of the model is kept in sync with the values of the pie's slices | ||||
*/ | ||||
Marek Rosa
|
r1237 | int QVPieModelMapper::valuesColumn() const | ||
{ | ||||
Marek Rosa
|
r1320 | return QPieModelMapper::valuesSection(); | ||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Sets the model column that is kept in sync with the pie slices values. | ||||
Parameter \a valuesColumn specifies the row of the model. | ||||
*/ | ||||
Marek Rosa
|
r1237 | void QVPieModelMapper::setValuesColumn(int valuesColumn) | ||
{ | ||||
Marek Rosa
|
r1474 | if (valuesColumn != valuesSection()) { | ||
QPieModelMapper::setValuesSection(valuesColumn); | ||||
emit valuesColumnChanged(); | ||||
} | ||||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Returns which column of the model is kept in sync with the labels of the pie's slices | ||||
*/ | ||||
Marek Rosa
|
r1237 | int QVPieModelMapper::labelsColumn() const | ||
{ | ||||
Marek Rosa
|
r1320 | return QPieModelMapper::labelsSection(); | ||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1340 | /*! | ||
Sets the model column that is kept in sync with the pie's slices labels. | ||||
Parameter \a labelsColumn specifies the row of the model. | ||||
*/ | ||||
Marek Rosa
|
r1237 | void QVPieModelMapper::setLabelsColumn(int labelsColumn) | ||
{ | ||||
Marek Rosa
|
r1474 | if (labelsColumn != labelsSection()) { | ||
QPieModelMapper::setLabelsSection(labelsColumn); | ||||
emit labelsColumnChanged(); | ||||
} | ||||
Marek Rosa
|
r1237 | } | ||
Marek Rosa
|
r1499 | int QVPieModelMapper::firstRow() const | ||
{ | ||||
return first(); | ||||
} | ||||
void QVPieModelMapper::setFirstRow(int firstRow) | ||||
{ | ||||
if (firstRow != first()) { | ||||
setFirst(firstRow); | ||||
emit firstRowChanged(); | ||||
} | ||||
} | ||||
int QVPieModelMapper::rowCount() const | ||||
{ | ||||
return count(); | ||||
} | ||||
void QVPieModelMapper::setRowCount(int rowCount) | ||||
{ | ||||
if (rowCount != count()) { | ||||
setCount(rowCount); | ||||
Marek Rosa
|
r1923 | emit rowCountChanged(); | ||
Marek Rosa
|
r1499 | } | ||
} | ||||
Marek Rosa
|
r1237 | #include "moc_qvpiemodelmapper.cpp" | ||
Titta Heikkala
|
r2712 | QT_CHARTS_END_NAMESPACE | ||