@@ -87,6 +87,7 void QBarModelMapper::reset() | |||
|
87 | 87 | m_mapBarBottom = -1; |
|
88 | 88 | m_mapBarTop = -1; |
|
89 | 89 | m_mapCategories = -1; |
|
90 | emit updated(); | |
|
90 | 91 | } |
|
91 | 92 | |
|
92 | 93 | #include "moc_qbarmodelmapper.cpp" |
@@ -255,7 +255,7 void QBarSeries::setModelMapper(QBarModelMapper *mapper) | |||
|
255 | 255 | if (mapper) { |
|
256 | 256 | d->m_mapper = mapper; |
|
257 | 257 | // connect the signal from the mapper |
|
258 |
connect(d->m_mapper, SIGNAL(updated()), d, SLOT(initialize |
|
|
258 | connect(d->m_mapper, SIGNAL(updated()), d, SLOT(initializeDataFromModel())); | |
|
259 | 259 | |
|
260 | 260 | if (d->m_model) |
|
261 | 261 | d->initializeDataFromModel(); |
@@ -436,6 +436,9 qreal QBarSeriesPrivate::maxCategorySum() | |||
|
436 | 436 | |
|
437 | 437 | void QBarSeriesPrivate::modelUpdated(QModelIndex topLeft, QModelIndex bottomRight) |
|
438 | 438 | { |
|
439 | if (m_model == 0 || m_mapper == 0) | |
|
440 | return; | |
|
441 | ||
|
439 | 442 | for (int row = topLeft.row(); row <= bottomRight.row(); row++) { |
|
440 | 443 | for (int column = topLeft.column(); column <= bottomRight.column(); column++) { |
|
441 | 444 | if (m_mapper->orientation() == Qt::Vertical) |
@@ -480,14 +483,21 void QBarSeriesPrivate::initializeDataFromModel() | |||
|
480 | 483 | { |
|
481 | 484 | Q_Q(QBarSeries); |
|
482 | 485 | |
|
483 | if (m_model == 0 || m_mapper == 0) | |
|
484 | return; | |
|
485 | ||
|
486 | 486 | // create the initial bars |
|
487 | 487 | m_categories.clear(); |
|
488 | 488 | m_barSets.clear(); |
|
489 | ||
|
490 | if (m_model == 0 || m_mapper == 0) | |
|
491 | return; | |
|
492 | ||
|
493 | // check if mappings are set | |
|
494 | if (m_mapper->mapBarBottom() == -1 || m_mapper->mapBarTop() == -1 || m_mapper->mapCategories() == -1) | |
|
495 | return; | |
|
496 | ||
|
489 | 497 | // emit restructuredBars(); |
|
490 | 498 | if (m_mapper->orientation() == Qt::Vertical) { |
|
499 | if (m_mapCategories >= m_model->columnCount()) | |
|
500 | return; | |
|
491 | 501 | int rowCount = 0; |
|
492 | 502 | if(m_mapper->count() == -1) |
|
493 | 503 | rowCount = m_model->rowCount() - m_mapper->first(); |
@@ -497,13 +507,17 void QBarSeriesPrivate::initializeDataFromModel() | |||
|
497 | 507 | m_categories << m_model->data(m_model->index(k, m_mapper->mapCategories()), Qt::DisplayRole).toString(); |
|
498 | 508 | } |
|
499 | 509 | |
|
500 |
|
|
|
510 | int lastAvailableBarSet = qMin(m_model->columnCount() - 1, m_mapper->mapBarTop()); | |
|
511 | for (int i = m_mapper->mapBarBottom(); i <= lastAvailableBarSet; i++) { | |
|
512 | // for (int i = m_mapper->mapBarBottom(); i <= m_mapper->mapBarTop(); i++) { | |
|
501 | 513 | QBarSet* barSet = new QBarSet(m_model->headerData(i, Qt::Horizontal, Qt::DisplayRole).toString()); |
|
502 | 514 | for(int m = m_mapper->first(); m < m_mapper->first() + rowCount; m++) |
|
503 | 515 | *barSet << m_model->data(m_model->index(m, i), Qt::DisplayRole).toDouble(); |
|
504 | 516 | q->appendBarSet(barSet); |
|
505 | 517 | } |
|
506 | 518 | } else { |
|
519 | if (m_mapCategories >= m_model->rowCount()) | |
|
520 | return; | |
|
507 | 521 | int columnCount = 0; |
|
508 | 522 | if(m_mapper->count() == -1) |
|
509 | 523 | columnCount = m_model->columnCount() - m_mapper->first(); |
@@ -513,7 +527,9 void QBarSeriesPrivate::initializeDataFromModel() | |||
|
513 | 527 | m_categories << m_model->data(m_model->index(m_mapper->mapCategories(), k), Qt::DisplayRole).toString(); |
|
514 | 528 | } |
|
515 | 529 | |
|
516 |
|
|
|
530 | int lastAvailableBarSet = qMin(m_model->rowCount() - 1, m_mapper->mapBarTop()); | |
|
531 | for (int i = m_mapper->mapBarBottom(); i <= lastAvailableBarSet; i++) { | |
|
532 | // for (int i = m_mapper->mapBarBottom(); i <= m_mapper->mapBarTop(); i++) { | |
|
517 | 533 | QBarSet* barSet = new QBarSet(m_model->headerData(i, Qt::Vertical, Qt::DisplayRole).toString()); |
|
518 | 534 | for(int m = m_mapper->first(); m < m_mapper->first() + columnCount; m++) |
|
519 | 535 | *barSet << m_model->data(m_model->index(i, m), Qt::DisplayRole).toDouble(); |
@@ -716,12 +716,12 void QPieSeriesPrivate::initializePieFromModel() | |||
|
716 | 716 | { |
|
717 | 717 | Q_Q(QPieSeries); |
|
718 | 718 | |
|
719 | if (m_model == 0 || m_mapper == 0) | |
|
720 | return; | |
|
721 | ||
|
722 | 719 | // clear current content |
|
723 | 720 | q->clear(); |
|
724 | 721 | |
|
722 | if (m_model == 0 || m_mapper == 0) | |
|
723 | return; | |
|
724 | ||
|
725 | 725 | // check if mappings are set |
|
726 | 726 | if (m_mapper->mapValues() == -1 || m_mapper->mapLabels() == -1) |
|
727 | 727 | return; |
@@ -23,6 +23,8 | |||
|
23 | 23 | #include <qbarset.h> |
|
24 | 24 | #include <qchartview.h> |
|
25 | 25 | #include <qchart.h> |
|
26 | #include <QBarModelMapper> | |
|
27 | #include <QStandardItemModel> | |
|
26 | 28 | |
|
27 | 29 | QTCOMMERCIALCHART_USE_NAMESPACE |
|
28 | 30 | |
@@ -47,6 +49,7 private slots: | |||
|
47 | 49 | void mouseclicked(); |
|
48 | 50 | void mousehovered_data(); |
|
49 | 51 | void mousehovered(); |
|
52 | void model(); | |
|
50 | 53 | |
|
51 | 54 | private: |
|
52 | 55 | QGroupedBarSeries* m_barseries; |
@@ -335,6 +338,59 void tst_QGroupedBarSeries::mousehovered() | |||
|
335 | 338 | QVERIFY(seriesSpyArg.at(1).toBool() == false); |
|
336 | 339 | } |
|
337 | 340 | |
|
341 | void tst_QGroupedBarSeries::model() | |
|
342 | { | |
|
343 | QGroupedBarSeries *series = new QGroupedBarSeries; | |
|
344 | QChart *chart = new QChart; | |
|
345 | chart->addSeries(series); | |
|
346 | QChartView *chartView = new QChartView(chart); | |
|
347 | chartView->show(); | |
|
348 | ||
|
349 | int rowCount = 12; | |
|
350 | int columnCount = 5; | |
|
351 | QStandardItemModel *stdModel = new QStandardItemModel(rowCount, columnCount); | |
|
352 | series->setModel(stdModel); | |
|
353 | QVERIFY2((series->model()) == stdModel, "Model should be stdModel"); | |
|
354 | ||
|
355 | ||
|
356 | for (int row = 0; row < rowCount; ++row) { | |
|
357 | for (int column = 0; column < columnCount; column++) { | |
|
358 | QStandardItem *item = new QStandardItem(row * column); | |
|
359 | stdModel->setItem(row, column, item); | |
|
360 | } | |
|
361 | } | |
|
362 | ||
|
363 | // data has been added to the model, but mapper is not set the number of slices should still be 0 | |
|
364 | QVERIFY2(series->barsetCount() == 0, "Mapper has not been set, so the number of slices should be 0"); | |
|
365 | ||
|
366 | // set the mapper | |
|
367 | QBarModelMapper *mapper = new QBarModelMapper; | |
|
368 | mapper->setMapCategories(0); | |
|
369 | mapper->setMapBarBottom(1); | |
|
370 | mapper->setMapBarTop(3); | |
|
371 | series->setModelMapper(mapper); // this should cause the Pie to get initialized from the model, since there is now both the model and the mapper defined | |
|
372 | QCOMPARE(series->barsetCount(), 3); | |
|
373 | ||
|
374 | // set the mappings to be outside of the model | |
|
375 | mapper->setMapBarBottom(6); | |
|
376 | mapper->setMapBarTop(7); | |
|
377 | QCOMPARE(series->barsetCount(), 0); // Mappings are invalid, so the number of slices should be 0 | |
|
378 | ||
|
379 | // set back to correct ones | |
|
380 | mapper->setMapBarBottom(1); | |
|
381 | mapper->setMapBarTop(3); | |
|
382 | QCOMPARE(series->barsetCount(), 3); | |
|
383 | ||
|
384 | // reset the mappings | |
|
385 | mapper->reset(); | |
|
386 | QCOMPARE(series->barsetCount(), 0); // Mappings have been reset and are invalid, so the number of slices should be 0 | |
|
387 | ||
|
388 | // unset the model and the mapper | |
|
389 | series->setModel(0); | |
|
390 | series->setModelMapper(0); | |
|
391 | QVERIFY(series->model() == 0); // Model should be unset | |
|
392 | QVERIFY(series->modelMapper() == 0); // Model mapper should be unset | |
|
393 | } | |
|
338 | 394 | |
|
339 | 395 | /* |
|
340 | 396 | bool setModel(QAbstractItemModel *model); |
@@ -425,9 +425,9 void tst_qpieseries::modelUpdate() | |||
|
425 | 425 | { |
|
426 | 426 | int rowCount = 12; |
|
427 | 427 | int columnCount = 7; |
|
428 |
QStandardItemModel *stdModel = new QStandardItemModel( |
|
|
428 | QStandardItemModel *stdModel = new QStandardItemModel(rowCount, columnCount); | |
|
429 | 429 | for (int row = 0; row < rowCount; ++row) { |
|
430 |
for (int column = 0; column < |
|
|
430 | for (int column = 0; column < columnCount; column++) { | |
|
431 | 431 | QStandardItem *item = new QStandardItem(row * column); |
|
432 | 432 | stdModel->setItem(row, column, item); |
|
433 | 433 | } |
General Comments 0
You need to be logged in to leave comments.
Login now