diff --git a/src/piechart/qpiemodelmapper.cpp b/src/piechart/qpiemodelmapper.cpp index bcf5caa..6ec9eda 100644 --- a/src/piechart/qpiemodelmapper.cpp +++ b/src/piechart/qpiemodelmapper.cpp @@ -198,6 +198,26 @@ QModelIndex QPieModelMapperPrivate::labelModelIndex(int slicePos) return m_model->index(m_labelsIndex, slicePos + m_first); } +bool QPieModelMapperPrivate::isLabelIndex(QModelIndex index) const +{ + if (m_orientation == Qt::Vertical && index.column() == m_labelsIndex) + return true; + else if (m_orientation == Qt::Horizontal && index.row() == m_labelsIndex) + return true; + + return false; +} + +bool QPieModelMapperPrivate::isValueIndex(QModelIndex index) const +{ + if (m_orientation == Qt::Vertical && index.column() == m_valuesIndex) + return true; + else if (m_orientation == Qt::Horizontal && index.row() == m_valuesIndex) + return true; + + return false; +} + void QPieModelMapperPrivate::slicesAdded(QList slices) { if (m_seriesSignalsBlock) @@ -293,8 +313,10 @@ void QPieModelMapperPrivate::modelUpdated(QModelIndex topLeft, QModelIndex botto index = topLeft.sibling(row, column); slice = pieSlice(index); if (slice) { - slice->setValue(m_model->data(index, Qt::DisplayRole).toReal()); - slice->setLabel(m_model->data(index, Qt::DisplayRole).toString()); + if (isValueIndex(index)) + slice->setValue(m_model->data(index, Qt::DisplayRole).toReal()); + if (isLabelIndex(index)) + slice->setLabel(m_model->data(index, Qt::DisplayRole).toString()); } } } @@ -360,6 +382,9 @@ void QPieModelMapperPrivate::modelColumnsRemoved(QModelIndex parent, int start, void QPieModelMapperPrivate::insertData(int start, int end) { + if (m_model == 0 || m_series == 0) + return; + if (m_count != -1 && start >= m_first + m_count) { return; } else { @@ -390,6 +415,9 @@ void QPieModelMapperPrivate::insertData(int start, int end) void QPieModelMapperPrivate::removeData(int start, int end) { + if (m_model == 0 || m_series == 0) + return; + int removedCount = end - start + 1; if (m_count != -1 && start >= m_first + m_count) { return; @@ -450,7 +478,7 @@ void QPieModelMapperPrivate::initializePieFromModel() connect(slice, SIGNAL(valueChanged()), this, SLOT(sliceValueChanged())); m_series->append(slice); m_slices.append(slice); -// m_series->append(m_model->data(labelIndex, Qt::DisplayRole).toString(), m_model->data(valueIndex, Qt::DisplayRole).toDouble()); + // m_series->append(m_model->data(labelIndex, Qt::DisplayRole).toString(), m_model->data(valueIndex, Qt::DisplayRole).toDouble()); slicePos++; valueIndex = valueModelIndex(slicePos); labelIndex = labelModelIndex(slicePos); diff --git a/src/piechart/qpiemodelmapper_p.h b/src/piechart/qpiemodelmapper_p.h index dce5323..fb4b22d 100644 --- a/src/piechart/qpiemodelmapper_p.h +++ b/src/piechart/qpiemodelmapper_p.h @@ -38,6 +38,8 @@ public Q_SLOTS: private: QPieSlice* pieSlice(QModelIndex index) const; + bool isLabelIndex(QModelIndex index) const; + bool isValueIndex(QModelIndex index) const; QModelIndex valueModelIndex(int slicePos); QModelIndex labelModelIndex(int slicePos); void insertData(int start, int end); diff --git a/tests/auto/qpiemodelmapper/tst_qpiemodelmapper.cpp b/tests/auto/qpiemodelmapper/tst_qpiemodelmapper.cpp index 87d0988..bb49b03 100644 --- a/tests/auto/qpiemodelmapper/tst_qpiemodelmapper.cpp +++ b/tests/auto/qpiemodelmapper/tst_qpiemodelmapper.cpp @@ -30,6 +30,7 @@ class tst_piemodelmapper : public QObject void horizontalMapper(); void horizontalMapperCustomMapping_data(); void horizontalMapperCustomMapping(); + void seriesUpdated(); private: @@ -149,7 +150,7 @@ void tst_piemodelmapper::verticalMapperCustomMapping() QCOMPARE(m_series->count(), expectedCount); - // change values column mappings to invalid + // change values column mapping to invalid mapper->setValuesColumn(-1); mapper->setLabelsColumn(1); @@ -226,7 +227,7 @@ void tst_piemodelmapper::horizontalMapperCustomMapping() QCOMPARE(m_series->count(), expectedCount); - // change values column mappings to invalid + // change values row mapping to invalid mapper->setValuesRow(-1); mapper->setLabelsRow(1); @@ -236,6 +237,34 @@ void tst_piemodelmapper::horizontalMapperCustomMapping() mapper = 0; } +void tst_piemodelmapper::seriesUpdated() +{ + QStandardItemModel *otherModel = new QStandardItemModel; + for (int row = 0; row < m_modelRowCount; ++row) { + for (int column = 0; column < m_modelColumnCount; column++) { + QStandardItem *item = new QStandardItem(row * column); + otherModel->setItem(row, column, item); + } + } + + QVPieModelMapper *mapper = new QVPieModelMapper; + mapper->setValuesColumn(0); + mapper->setLabelsColumn(1); + mapper->setModel(otherModel); + mapper->setSeries(m_series); + QCOMPARE(m_series->count(), m_modelRowCount); + + m_series->append("1000", 1000); + QCOMPARE(m_series->count(), m_modelRowCount + 1); + + m_series->remove(m_series->slices().last()); + QCOMPARE(m_series->count(), m_modelRowCount); + + otherModel->clear(); + delete otherModel; + otherModel = 0; +} + QTEST_MAIN(tst_piemodelmapper) #include "tst_qpiemodelmapper.moc" diff --git a/tests/tablemodelchart/tablewidget.cpp b/tests/tablemodelchart/tablewidget.cpp index 64e123d..fc0cc23 100644 --- a/tests/tablemodelchart/tablewidget.cpp +++ b/tests/tablemodelchart/tablewidget.cpp @@ -81,13 +81,13 @@ TableWidget::TableWidget(QWidget *parent) QPushButton* removeColumnButton = new QPushButton("Remove column"); connect(removeColumnButton, SIGNAL(clicked()), this, SLOT(removeColumn())); - QPushButton* specialPieButton = new QPushButton("Add slices from series"); + QPushButton* specialPieButton = new QPushButton("Add slices using series API"); connect(specialPieButton, SIGNAL(clicked()), this, SLOT(testPie())); - QPushButton* specialPieButton2 = new QPushButton("Remove slices from series"); + QPushButton* specialPieButton2 = new QPushButton("Remove slices using series API"); connect(specialPieButton2, SIGNAL(clicked()), this, SLOT(testPie2())); - QPushButton* specialPieButton3 = new QPushButton("Remove slices from series"); + QPushButton* specialPieButton3 = new QPushButton("Modify slices using series API"); connect(specialPieButton3, SIGNAL(clicked()), this, SLOT(testPie3())); @@ -355,35 +355,39 @@ void TableWidget::updateChartType(bool toggle) m_pieMapper->setSeries(m_pieSeries); m_pieMapper->setModel(m_model); m_pieMapper->setFirst(2); -// m_pieMapper->setCount(5); + // m_pieMapper->setCount(5); // pieSeries->setModelMapper(mapper); m_pieSeries->setLabelsVisible(true); - m_pieSeries->setPieSize(0.75); - // pieSeries->setHorizontalPosition(0.2); - // pieSeries->setVerticalPosition(0.3); + m_pieSeries->setPieSize(0.35); + m_pieSeries->setHorizontalPosition(0.25); + m_pieSeries->setVerticalPosition(0.35); m_chart->addSeries(m_pieSeries); seriesColorHex = "#" + QString::number(m_pieSeries->slices().at(m_pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper(); - m_model->addMapping(seriesColorHex, QRect(0, 2, 2, 5)); + m_model->addMapping(seriesColorHex, QRect(1, 2, 1, 50)); // pieSeries->slices().at(0)->setValue(400); // pieSeries->slices().at(0)->setLabel(QString("36")); - // // pie 2 - // pieSeries = new QPieSeries; - // pieSeries->setModel(m_model); + // pie 2 + m_pieSeries2 = new QPieSeries; - // pieSeries->setModelMapping(1,1, Qt::Vertical); - // pieSeries->setModelMappingRange(2, -1); - // pieSeries->setLabelsVisible(true); - // pieSeries->setPieSize(0.35); - // pieSeries->setHorizontalPosition(0.8); - // pieSeries->setVerticalPosition(0.3); - // m_chart->addSeries(pieSeries); - // seriesColorHex = "#" + QString::number(pieSeries->slices().at(pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper(); - // m_model->addMapping(seriesColorHex, QRect(1, 2, 1, 1000)); + m_pieMapper = new QVPieModelMapper; + m_pieMapper->setValuesColumn(0); + m_pieMapper->setLabelsColumn(7); + m_pieMapper->setSeries(m_pieSeries2); + m_pieMapper->setModel(m_model); + m_pieMapper->setFirst(2); + + m_pieSeries2->setLabelsVisible(true); + m_pieSeries2->setPieSize(0.35); + m_pieSeries2->setHorizontalPosition(0.75); + m_pieSeries2->setVerticalPosition(0.65); + m_chart->addSeries(m_pieSeries2); + seriesColorHex = "#" + QString::number(m_pieSeries2->slices().at(m_pieSeries2->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper(); + m_model->addMapping(seriesColorHex, QRect(0, 2, 1, 1000)); // // pie 3 // pieSeries = new QPieSeries; diff --git a/tests/tablemodelchart/tablewidget.h b/tests/tablemodelchart/tablewidget.h index 73b96a4..4329cea 100644 --- a/tests/tablemodelchart/tablewidget.h +++ b/tests/tablemodelchart/tablewidget.h @@ -70,6 +70,8 @@ public: QSpinBox* m_linesCountSpinBox; QVPieModelMapper *m_pieMapper; QPieSeries* m_pieSeries; + QVPieModelMapper *m_pieMapper2; + QPieSeries* m_pieSeries2; // QPieSeries* specialPie; };