From e52d5440d6182031175335b947c7da8921ad55f9 2012-03-15 10:30:09 From: Marek Rosa Date: 2012-03-15 10:30:09 Subject: [PATCH] Added insert pie slice function to QPieSeries --- diff --git a/examples/tablemodelchart/customtablemodel.cpp b/examples/tablemodelchart/customtablemodel.cpp index df8788f..bd21116 100644 --- a/examples/tablemodelchart/customtablemodel.cpp +++ b/examples/tablemodelchart/customtablemodel.cpp @@ -120,8 +120,8 @@ bool CustomTableModel::insertRows ( int row, int count, const QModelIndex & pare beginInsertRows(QModelIndex(), row /*dataTable.count()*/, row + count - 1); for (int i = row; i < row + count; i++) { - m_points.insert(row, QPointF()); - m_labels.insert(row,("")); + m_points.insert(row, QPointF(10,20)); + m_labels.insert(row,("a")); } endInsertRows(); return true; diff --git a/src/piechart/qpieseries.cpp b/src/piechart/qpieseries.cpp index 2611568..63665c7 100644 --- a/src/piechart/qpieseries.cpp +++ b/src/piechart/qpieseries.cpp @@ -195,6 +195,22 @@ QPieSlice* QPieSeries::add(qreal value, QString name) return slice; } +void QPieSeries::insert(int i, QPieSlice* slice) +{ + Q_ASSERT(i <= m_slices.count()); + slice->setParent(this); + m_slices.insert(i, slice); + + updateDerivativeData(); + + connect(slice, SIGNAL(changed()), this, SLOT(sliceChanged())); + connect(slice, SIGNAL(clicked()), this, SLOT(sliceClicked())); + connect(slice, SIGNAL(hoverEnter()), this, SLOT(sliceHoverEnter())); + connect(slice, SIGNAL(hoverLeave()), this, SLOT(sliceHoverLeave())); + + emit changed(); +} + /*! Removes a single \a slice from the series and deletes the slice. @@ -573,22 +589,39 @@ void QPieSeries::setModelMapping(int modelValuesLine, int modelLabelsLine, Qt::O void QPieSeries::modelUpdated(QModelIndex topLeft, QModelIndex bottomRight) { if (m_mapOrientation == Qt::Vertical) + { // slices().at(topLeft.row())->setValue(m_model->data(m_model->index(topLeft.row(), topLeft.column()), Qt::DisplayRole).toDouble()); if (topLeft.column() == m_mapValues) slices().at(topLeft.row())->setValue(m_model->data(topLeft, Qt::DisplayRole).toDouble()); else if (topLeft.column() == m_mapLabels) slices().at(topLeft.row())->setLabel(m_model->data(topLeft, Qt::DisplayRole).toString()); - else - // slices().at(topLeft.column())->setValue(m_model->data(m_model->index(topLeft.row(), topLeft.column()), Qt::DisplayRole).toDouble()); - if (topLeft.column() == m_mapValues) - slices().at(topLeft.column())->setValue(m_model->data(topLeft, Qt::DisplayRole).toDouble()); - else if (topLeft.column() == m_mapLabels) - slices().at(topLeft.column())->setLabel(m_model->data(topLeft, Qt::DisplayRole).toString()); + } + else + { + // slices().at(topLeft.column())->setValue(m_model->data(m_model->index(topLeft.row(), topLeft.column()), Qt::DisplayRole).toDouble()); + if (topLeft.column() == m_mapValues) + slices().at(topLeft.column())->setValue(m_model->data(topLeft, Qt::DisplayRole).toDouble()); + else if (topLeft.column() == m_mapLabels) + slices().at(topLeft.column())->setLabel(m_model->data(topLeft, Qt::DisplayRole).toString()); + } } void QPieSeries::modelDataAdded(QModelIndex parent, int start, int end) { - // + QPieSlice* newSlice = new QPieSlice; + newSlice->setLabelVisible(true); + if (m_mapOrientation == Qt::Vertical) + { + newSlice->setValue(m_model->data(m_model->index(start, m_mapValues), Qt::DisplayRole).toDouble()); + newSlice->setLabel(m_model->data(m_model->index(start, m_mapLabels), Qt::DisplayRole).toString()); + } + else + { + newSlice->setValue(m_model->data(m_model->index(m_mapValues, start), Qt::DisplayRole).toDouble()); + newSlice->setLabel(m_model->data(m_model->index(m_mapLabels, start), Qt::DisplayRole).toString()); + } + + insert(start, newSlice); } void QPieSeries::modelDataRemoved(QModelIndex parent, int start, int end) diff --git a/src/piechart/qpieseries.h b/src/piechart/qpieseries.h index be6ef1a..bd4e34c 100644 --- a/src/piechart/qpieseries.h +++ b/src/piechart/qpieseries.h @@ -55,6 +55,7 @@ public: // slice setters void add(QPieSlice* slice); void add(QList slices); + void insert(int i, QPieSlice* slice); void replace(QList slices); void remove(QPieSlice* slice); void clear();