From 306855f16f30d192f0f5ec20178b6fdb765212af 2012-03-14 14:56:49 From: sauimone Date: 2012-03-14 14:56:49 Subject: [PATCH] handleThemeChanged slot to legend. --- diff --git a/src/qlegend.cpp b/src/qlegend.cpp index 0faef37..cec9892 100644 --- a/src/qlegend.cpp +++ b/src/qlegend.cpp @@ -62,108 +62,102 @@ void QLegend::setMinimumSize(const QSizeF size) void QLegend::handleSeriesAdded(QSeries* series,Domain* domain) { mSeriesList.append(series); + createMarkers(series); + layoutChanged(); +} + +void QLegend::handleSeriesRemoved(QSeries* series) +{ + if (series->type() == QSeries::SeriesTypeArea) + { + // This is special case. Area series has upper and lower series, which each have markers + QAreaSeries* s = static_cast (series); + deleteMarkers(s->upperSeries()); + deleteMarkers(s->lowerSeries()); + } else { + deleteMarkers(series); + } + + mSeriesList.removeOne(series); + layoutChanged(); +} + +void QLegend::handleGeometryChanged(const QRectF& size) +{ + mBoundingRect = size; + layoutChanged(); +} +void QLegend::handleThemeChanged() +{ + foreach(QSeries *s, mSeriesList) { + deleteMarkers(s); + } + foreach(QSeries *s, mSeriesList) { + createMarkers(s); + } +} + +void QLegend::createMarkers(QSeries *series) +{ switch (series->type()) { case QSeries::SeriesTypeLine: { - QLineSeries* lineSeries = static_cast(series); - createMarker(lineSeries); + appendMarkers(lineSeries); break; } case QSeries::SeriesTypeArea: { - QAreaSeries* areaSeries = static_cast(series); - createMarker(areaSeries->upperSeries()); + appendMarkers(areaSeries->upperSeries()); if(areaSeries->lowerSeries()) - createMarker(areaSeries->lowerSeries()); + appendMarkers(areaSeries->lowerSeries()); break; } case QSeries::SeriesTypeBar: { - QBarSeries* barSeries = static_cast(series); - createMarkers(barSeries); + appendMarkers(barSeries); break; } case QSeries::SeriesTypeStackedBar: { - QStackedBarSeries* stackedBarSeries = static_cast(series); - createMarkers(stackedBarSeries); + appendMarkers(stackedBarSeries); break; } case QSeries::SeriesTypePercentBar: { - QPercentBarSeries* percentBarSeries = static_cast(series); - createMarkers(percentBarSeries); + appendMarkers(percentBarSeries); break; } case QSeries::SeriesTypeScatter: { - QScatterSeries *scatterSeries = static_cast(series); - createMarker(scatterSeries); + appendMarkers(scatterSeries); break; } case QSeries::SeriesTypePie: { - QPieSeries *pieSeries = static_cast(series); - createMarkers(pieSeries); + appendMarkers(pieSeries); break; } case QSeries::SeriesTypeSpline: { - QSplineSeries* splineSeries = static_cast(series); - createMarker(splineSeries); + appendMarkers(splineSeries); break; } default: { - qDebug()<< "QLegend::handleSeriesAdded" << series->type() << "not implemented."; + qDebug()<< "QLegend::createMarkers" << series->type() << "not implemented."; break; } } - - layoutChanged(); -} - -void QLegend::handleSeriesRemoved(QSeries* series) -{ - if (series->type() == QSeries::SeriesTypeArea) - { - // This is special case. Area series has upper and lower series, which each have markers - QAreaSeries* s = static_cast (series); - deleteMarkers(s->upperSeries()); - deleteMarkers(s->lowerSeries()); - } else { - deleteMarkers(series); - } - - mSeriesList.removeOne(series); - layoutChanged(); -} - -void QLegend::handleGeometryChanged(const QRectF& size) -{ - mBoundingRect = size; - layoutChanged(); -} - -void QLegend::deleteMarkers(QSeries *series) -{ - // Search all markers that belong to given series and delete them. - foreach (LegendMarker *m, mMarkers) { - if (m->series() == series) { - mMarkers.removeOne(m); - delete m; - } - } } -void QLegend::createMarker(QXYSeries* series) +void QLegend::appendMarkers(QXYSeries* series) { LegendMarker* marker = new LegendMarker(series,this); marker->setName(series->name()); @@ -173,7 +167,7 @@ void QLegend::createMarker(QXYSeries* series) childItems().append(marker); } -void QLegend::createMarkers(QBarSeries *series) +void QLegend::appendMarkers(QBarSeries *series) { foreach(QBarSet* s, series->barSets()) { LegendMarker* marker = new LegendMarker(series,s,this); @@ -185,7 +179,7 @@ void QLegend::createMarkers(QBarSeries *series) } } -void QLegend::createMarkers(QPieSeries *series) +void QLegend::appendMarkers(QPieSeries *series) { foreach(QPieSlice* s, series->slices()) { LegendMarker* marker = new LegendMarker(series,s,this); @@ -197,6 +191,17 @@ void QLegend::createMarkers(QPieSeries *series) } } +void QLegend::deleteMarkers(QSeries *series) +{ + // Search all markers that belong to given series and delete them. + foreach (LegendMarker *m, mMarkers) { + if (m->series() == series) { + mMarkers.removeOne(m); + delete m; + } + } +} + void QLegend::layoutChanged() { // Calculate layout for markers and text diff --git a/src/qlegend.h b/src/qlegend.h index 83e64a1..7dfc9cd 100644 --- a/src/qlegend.h +++ b/src/qlegend.h @@ -42,11 +42,17 @@ public slots: void handleSeriesRemoved(QSeries* series); void handleGeometryChanged(const QRectF& size); + // PIMPL ---> + // Internal slot. Legend needs to know when theme has changed (or color of some series, if user changes it) + void handleThemeChanged(); + // <--- PIMPL + private: // PIMPL ---> - void createMarker(QXYSeries* series); - void createMarkers(QBarSeries* series); - void createMarkers(QPieSeries* series); + void createMarkers(QSeries* series); + void appendMarkers(QXYSeries* series); + void appendMarkers(QBarSeries* series); + void appendMarkers(QPieSeries* series); void deleteMarkers(QSeries* series); void layoutChanged(); // <--- PIMPL