@@ -216,6 +216,15 void QPieModelMapperPrivate::slicesAdded(QList<QPieSlice*> slices) | |||||
216 | if (firstIndex == -1) |
|
216 | if (firstIndex == -1) | |
217 | return; |
|
217 | return; | |
218 |
|
218 | |||
|
219 | if (m_count != -1) | |||
|
220 | m_count += slices.count(); | |||
|
221 | ||||
|
222 | for (int i = firstIndex; i < firstIndex + slices.count(); i++) { | |||
|
223 | m_slices.insert(i, slices.at(i - firstIndex)); | |||
|
224 | connect(slices.at(i - firstIndex), SIGNAL(labelChanged()), this, SLOT(sliceLabelChanged())); | |||
|
225 | connect(slices.at(i - firstIndex), SIGNAL(valueChanged()), this, SLOT(sliceValueChanged())); | |||
|
226 | } | |||
|
227 | ||||
219 | blockModelSignals(); |
|
228 | blockModelSignals(); | |
220 | if (m_orientation == Qt::Vertical) |
|
229 | if (m_orientation == Qt::Vertical) | |
221 | m_model->insertRows(firstIndex + m_first, slices.count()); |
|
230 | m_model->insertRows(firstIndex + m_first, slices.count()); | |
@@ -237,10 +246,16 void QPieModelMapperPrivate::slicesRemoved(QList<QPieSlice*> slices) | |||||
237 | if (slices.count() == 0) |
|
246 | if (slices.count() == 0) | |
238 | return; |
|
247 | return; | |
239 |
|
248 | |||
240 |
int firstIndex = m_s |
|
249 | int firstIndex = m_slices.indexOf(slices.at(0)); | |
241 | if (firstIndex == -1) |
|
250 | if (firstIndex == -1) | |
242 | return; |
|
251 | return; | |
243 |
|
252 | |||
|
253 | if (m_count != -1) | |||
|
254 | m_count -= slices.count(); | |||
|
255 | ||||
|
256 | for (int i = firstIndex + slices.count() - 1; i >= firstIndex; i--) | |||
|
257 | m_slices.removeAt(i); | |||
|
258 | ||||
244 | blockModelSignals(); |
|
259 | blockModelSignals(); | |
245 | if (m_orientation == Qt::Vertical) |
|
260 | if (m_orientation == Qt::Vertical) | |
246 | m_model->removeRows(firstIndex + m_first, slices.count()); |
|
261 | m_model->removeRows(firstIndex + m_first, slices.count()); | |
@@ -249,9 +264,25 void QPieModelMapperPrivate::slicesRemoved(QList<QPieSlice*> slices) | |||||
249 | blockModelSignals(false); |
|
264 | blockModelSignals(false); | |
250 | } |
|
265 | } | |
251 |
|
266 | |||
252 | void QPieModelMapperPrivate::sliceChanged() |
|
267 | void QPieModelMapperPrivate::sliceLabelChanged() | |
253 | { |
|
268 | { | |
|
269 | if (m_seriesSignalsBlock) | |||
|
270 | return; | |||
|
271 | ||||
254 | blockModelSignals(); |
|
272 | blockModelSignals(); | |
|
273 | QPieSlice *slice = qobject_cast<QPieSlice *>(QObject::sender()); | |||
|
274 | m_model->setData(labelModelIndex(m_series->slices().indexOf(slice)), slice->label()); | |||
|
275 | blockModelSignals(false); | |||
|
276 | } | |||
|
277 | ||||
|
278 | void QPieModelMapperPrivate::sliceValueChanged() | |||
|
279 | { | |||
|
280 | if (m_seriesSignalsBlock) | |||
|
281 | return; | |||
|
282 | ||||
|
283 | blockModelSignals(); | |||
|
284 | QPieSlice *slice = qobject_cast<QPieSlice *>(QObject::sender()); | |||
|
285 | m_model->setData(valueModelIndex(m_series->slices().indexOf(slice)), slice->value()); | |||
255 | blockModelSignals(false); |
|
286 | blockModelSignals(false); | |
256 | } |
|
287 | } | |
257 |
|
288 | |||
@@ -348,13 +379,18 void QPieModelMapperPrivate::insertData(int start, int end) | |||||
348 | slice->setValue(m_model->data(valueModelIndex(i - m_first), Qt::DisplayRole).toDouble()); |
|
379 | slice->setValue(m_model->data(valueModelIndex(i - m_first), Qt::DisplayRole).toDouble()); | |
349 | slice->setLabel(m_model->data(labelModelIndex(i - m_first), Qt::DisplayRole).toString()); |
|
380 | slice->setLabel(m_model->data(labelModelIndex(i - m_first), Qt::DisplayRole).toString()); | |
350 | slice->setLabelVisible(); |
|
381 | slice->setLabelVisible(); | |
|
382 | connect(slice, SIGNAL(labelChanged()), this, SLOT(sliceLabelChanged())); | |||
|
383 | connect(slice, SIGNAL(valueChanged()), this, SLOT(sliceValueChanged())); | |||
351 | m_series->insert(i - m_first, slice); |
|
384 | m_series->insert(i - m_first, slice); | |
|
385 | m_slices.insert(i - m_first, slice); | |||
352 | } |
|
386 | } | |
353 |
|
387 | |||
354 | // remove excess of slices (abouve m_count) |
|
388 | // remove excess of slices (abouve m_count) | |
355 | if (m_count != -1 && m_series->slices().size() > m_count) |
|
389 | if (m_count != -1 && m_series->slices().size() > m_count) | |
356 | for (int i = m_series->slices().size() - 1; i >= m_count; i--) |
|
390 | for (int i = m_series->slices().size() - 1; i >= m_count; i--) { | |
357 | m_series->remove(m_series->slices().at(i)); |
|
391 | m_series->remove(m_series->slices().at(i)); | |
|
392 | m_slices.removeAt(i); | |||
|
393 | } | |||
358 | } |
|
394 | } | |
359 | } |
|
395 | } | |
360 |
|
396 | |||
@@ -367,8 +403,10 void QPieModelMapperPrivate::removeData(int start, int end) | |||||
367 | int toRemove = qMin(m_series->slices().size(), removedCount); // first find how many items can actually be removed |
|
403 | int toRemove = qMin(m_series->slices().size(), removedCount); // first find how many items can actually be removed | |
368 | int first = qMax(start, m_first); // get the index of the first item that will be removed. |
|
404 | int first = qMax(start, m_first); // get the index of the first item that will be removed. | |
369 | int last = qMin(first + toRemove - 1, m_series->slices().size() + m_first - 1); // get the index of the last item that will be removed. |
|
405 | int last = qMin(first + toRemove - 1, m_series->slices().size() + m_first - 1); // get the index of the last item that will be removed. | |
370 | for (int i = last; i >= first; i--) |
|
406 | for (int i = last; i >= first; i--) { | |
371 | m_series->remove(m_series->slices().at(i - m_first)); |
|
407 | m_series->remove(m_series->slices().at(i - m_first)); | |
|
408 | m_slices.removeAt(i - m_first); | |||
|
409 | } | |||
372 |
|
410 | |||
373 | if (m_count != -1) { |
|
411 | if (m_count != -1) { | |
374 | int itemsAvailable; // check how many are available to be added |
|
412 | int itemsAvailable; // check how many are available to be added | |
@@ -390,6 +428,7 void QPieModelMapperPrivate::removeData(int start, int end) | |||||
390 | } |
|
428 | } | |
391 | slice->setLabelVisible(); |
|
429 | slice->setLabelVisible(); | |
392 | m_series->insert(i, slice); |
|
430 | m_series->insert(i, slice); | |
|
431 | m_slices.insert(i, slice); | |||
393 | } |
|
432 | } | |
394 | } |
|
433 | } | |
395 | } |
|
434 | } | |
@@ -400,20 +439,28 void QPieModelMapperPrivate::initializePieFromModel() | |||||
400 | if (m_model == 0 || m_series == 0) |
|
439 | if (m_model == 0 || m_series == 0) | |
401 | return; |
|
440 | return; | |
402 |
|
441 | |||
403 | // clear current content |
|
|||
404 | m_series->clear(); |
|
|||
405 |
|
||||
406 | // check if mappings are set |
|
442 | // check if mappings are set | |
407 | if (m_valuesIndex == -1 || m_labelsIndex == -1) |
|
443 | if (m_valuesIndex == -1 || m_labelsIndex == -1) | |
408 | return; |
|
444 | return; | |
409 |
|
445 | |||
410 | blockSeriesSignals(); |
|
446 | blockSeriesSignals(); | |
|
447 | // clear current content | |||
|
448 | m_series->clear(); | |||
|
449 | m_slices.clear(); | |||
|
450 | ||||
411 | // create the initial slices set |
|
451 | // create the initial slices set | |
412 | int slicePos = 0; |
|
452 | int slicePos = 0; | |
413 | QModelIndex valueIndex = valueModelIndex(slicePos); |
|
453 | QModelIndex valueIndex = valueModelIndex(slicePos); | |
414 | QModelIndex labelIndex = labelModelIndex(slicePos); |
|
454 | QModelIndex labelIndex = labelModelIndex(slicePos); | |
415 | while (valueIndex.isValid() && labelIndex.isValid()) { |
|
455 | while (valueIndex.isValid() && labelIndex.isValid()) { | |
416 | m_series->append(m_model->data(labelIndex, Qt::DisplayRole).toString(), m_model->data(valueIndex, Qt::DisplayRole).toDouble()); |
|
456 | QPieSlice *slice = new QPieSlice; | |
|
457 | slice->setLabel(m_model->data(labelIndex, Qt::DisplayRole).toString()); | |||
|
458 | slice->setValue(m_model->data(valueIndex, Qt::DisplayRole).toDouble()); | |||
|
459 | connect(slice, SIGNAL(labelChanged()), this, SLOT(sliceLabelChanged())); | |||
|
460 | connect(slice, SIGNAL(valueChanged()), this, SLOT(sliceValueChanged())); | |||
|
461 | m_series->append(slice); | |||
|
462 | m_slices.append(slice); | |||
|
463 | // m_series->append(m_model->data(labelIndex, Qt::DisplayRole).toString(), m_model->data(valueIndex, Qt::DisplayRole).toDouble()); | |||
417 | slicePos++; |
|
464 | slicePos++; | |
418 | valueIndex = valueModelIndex(slicePos); |
|
465 | valueIndex = valueModelIndex(slicePos); | |
419 | labelIndex = labelModelIndex(slicePos); |
|
466 | labelIndex = labelModelIndex(slicePos); |
@@ -47,7 +47,7 public: | |||||
47 |
|
47 | |||
48 | void reset(); |
|
48 | void reset(); | |
49 |
|
49 | |||
50 | private: |
|
50 | protected: | |
51 | QPieModelMapperPrivate * const d_ptr; |
|
51 | QPieModelMapperPrivate * const d_ptr; | |
52 | Q_DECLARE_PRIVATE(QPieModelMapper) |
|
52 | Q_DECLARE_PRIVATE(QPieModelMapper) | |
53 | }; |
|
53 | }; |
@@ -31,7 +31,8 public Q_SLOTS: | |||||
31 | // for the series |
|
31 | // for the series | |
32 | void slicesAdded(QList<QPieSlice*> slices); |
|
32 | void slicesAdded(QList<QPieSlice*> slices); | |
33 | void slicesRemoved(QList<QPieSlice*> slices); |
|
33 | void slicesRemoved(QList<QPieSlice*> slices); | |
34 | void sliceChanged(); |
|
34 | void sliceLabelChanged(); | |
|
35 | void sliceValueChanged(); | |||
35 |
|
36 | |||
36 | void initializePieFromModel(); |
|
37 | void initializePieFromModel(); | |
37 |
|
38 | |||
@@ -49,6 +50,7 private: | |||||
49 | bool m_seriesSignalsBlock; |
|
50 | bool m_seriesSignalsBlock; | |
50 | bool m_modelSignalsBlock; |
|
51 | bool m_modelSignalsBlock; | |
51 | QPieSeries *m_series; |
|
52 | QPieSeries *m_series; | |
|
53 | QList<QPieSlice*> m_slices; | |||
52 | QAbstractItemModel *m_model; |
|
54 | QAbstractItemModel *m_model; | |
53 | int m_first; |
|
55 | int m_first; | |
54 | int m_count; |
|
56 | int m_count; |
@@ -87,6 +87,9 TableWidget::TableWidget(QWidget *parent) | |||||
87 | QPushButton* specialPieButton2 = new QPushButton("Remove slices from series"); |
|
87 | QPushButton* specialPieButton2 = new QPushButton("Remove slices from series"); | |
88 | connect(specialPieButton2, SIGNAL(clicked()), this, SLOT(testPie2())); |
|
88 | connect(specialPieButton2, SIGNAL(clicked()), this, SLOT(testPie2())); | |
89 |
|
89 | |||
|
90 | QPushButton* specialPieButton3 = new QPushButton("Remove slices from series"); | |||
|
91 | connect(specialPieButton3, SIGNAL(clicked()), this, SLOT(testPie3())); | |||
|
92 | ||||
90 |
|
93 | |||
91 | // QLabel *spinBoxLabel = new QLabel("Rows affected:"); |
|
94 | // QLabel *spinBoxLabel = new QLabel("Rows affected:"); | |
92 |
|
95 | |||
@@ -106,6 +109,7 TableWidget::TableWidget(QWidget *parent) | |||||
106 | // buttonsLayout->addWidget(removeColumnButton); |
|
109 | // buttonsLayout->addWidget(removeColumnButton); | |
107 | buttonsLayout->addWidget(specialPieButton); |
|
110 | buttonsLayout->addWidget(specialPieButton); | |
108 | buttonsLayout->addWidget(specialPieButton2); |
|
111 | buttonsLayout->addWidget(specialPieButton2); | |
|
112 | buttonsLayout->addWidget(specialPieButton3); | |||
109 | buttonsLayout->addStretch(); |
|
113 | buttonsLayout->addStretch(); | |
110 |
|
114 | |||
111 | // chart type radio buttons |
|
115 | // chart type radio buttons | |
@@ -347,11 +351,11 void TableWidget::updateChartType(bool toggle) | |||||
347 |
|
351 | |||
348 | m_pieMapper = new QPieModelMapper; |
|
352 | m_pieMapper = new QPieModelMapper; | |
349 | m_pieMapper->setValuesIndex(1); |
|
353 | m_pieMapper->setValuesIndex(1); | |
350 |
m_pieMapper->setLabelsIndex( |
|
354 | m_pieMapper->setLabelsIndex(7); | |
351 | m_pieMapper->setSeries(m_pieSeries); |
|
355 | m_pieMapper->setSeries(m_pieSeries); | |
352 | m_pieMapper->setModel(m_model); |
|
356 | m_pieMapper->setModel(m_model); | |
353 | m_pieMapper->setFirst(2); |
|
357 | m_pieMapper->setFirst(2); | |
354 |
|
|
358 | m_pieMapper->setCount(5); | |
355 | // pieSeries->setModelMapper(mapper); |
|
359 | // pieSeries->setModelMapper(mapper); | |
356 |
|
360 | |||
357 | m_pieSeries->setLabelsVisible(true); |
|
361 | m_pieSeries->setLabelsVisible(true); | |
@@ -361,7 +365,7 void TableWidget::updateChartType(bool toggle) | |||||
361 |
|
365 | |||
362 | m_chart->addSeries(m_pieSeries); |
|
366 | m_chart->addSeries(m_pieSeries); | |
363 | seriesColorHex = "#" + QString::number(m_pieSeries->slices().at(m_pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper(); |
|
367 | seriesColorHex = "#" + QString::number(m_pieSeries->slices().at(m_pieSeries->slices().count()/2)->brush().color().rgb(), 16).right(6).toUpper(); | |
364 |
m_model->addMapping(seriesColorHex, QRect(0, 2, 2, 5 |
|
368 | m_model->addMapping(seriesColorHex, QRect(0, 2, 2, 5)); | |
365 |
|
369 | |||
366 |
|
370 | |||
367 | // pieSeries->slices().at(0)->setValue(400); |
|
371 | // pieSeries->slices().at(0)->setValue(400); | |
@@ -493,6 +497,22 void TableWidget::testPie2() | |||||
493 | } |
|
497 | } | |
494 | } |
|
498 | } | |
495 |
|
499 | |||
|
500 | void TableWidget::testPie3() | |||
|
501 | { | |||
|
502 | QPieSlice *slice; | |||
|
503 | if (m_pieSeries->count() > 0) { | |||
|
504 | slice = m_pieSeries->slices().last(); | |||
|
505 | slice->setLabel("Dalej"); | |||
|
506 | slice->setValue(222); | |||
|
507 | } | |||
|
508 | ||||
|
509 | if (m_pieSeries->count() > 0) { | |||
|
510 | slice = m_pieSeries->slices().first(); | |||
|
511 | slice->setLabel("Prawie"); | |||
|
512 | slice->setValue(111); | |||
|
513 | } | |||
|
514 | } | |||
|
515 | ||||
496 | TableWidget::~TableWidget() |
|
516 | TableWidget::~TableWidget() | |
497 | { |
|
517 | { | |
498 |
|
518 |
General Comments 0
You need to be logged in to leave comments.
Login now