From 8d0f04b94da2e219b73bfd6da0e0d2a9c9ca51a3 2012-10-17 07:46:23 From: sauimone Date: 2012-10-17 07:46:23 Subject: [PATCH] removed peer object solution. Introduced marker type solution --- diff --git a/examples/newlegend/mainwidget.cpp b/examples/newlegend/mainwidget.cpp index 573bf17..ff856cb 100644 --- a/examples/newlegend/mainwidget.cpp +++ b/examples/newlegend/mainwidget.cpp @@ -29,6 +29,7 @@ #include #include #include +#include QTCOMMERCIALCHART_USE_NAMESPACE @@ -264,9 +265,8 @@ void MainWidget::showDebugInfo() { qDebug() << "marker count:" << m_chart->legend()->markers().count(); foreach (QLegendMarker* marker, m_chart->legend()->markers()) { - qDebug() << "marker series type:" << marker->series()->type(); - qDebug() << "peer object:" << marker->peerObject(); - qDebug() << "label:" << marker->label(); + qDebug() << "marker type:" << marker->type(); + qDebug() << "related series:" << marker->series(); } } @@ -291,23 +291,20 @@ void MainWidget::updateLegendLayout() void MainWidget::handleMarkerClicked() { QLegendMarker* marker = qobject_cast (sender()); + Q_ASSERT(marker); - qDebug() << "marker clicked:" << marker; - - switch (marker->series()->type()) + switch (marker->type()) { - case QAbstractSeries::SeriesTypePie: + case QLegendMarker::LegendMarkerTypePie: { - // Series type is pie. - // The peer object is QPieSlice - QPieSlice* slice = qobject_cast (marker->peerObject()); - Q_ASSERT(slice); + QPieLegendMarker *pieMarker = qobject_cast (marker); + QPieSlice* slice = pieMarker->slice(); slice->setExploded(!slice->isExploded()); break; } default: { - qDebug() << "Unknown series type"; + qDebug() << "Unknown marker type"; break; } } diff --git a/src/legend/qarealegendmarker.cpp b/src/legend/qarealegendmarker.cpp index 84084ed..40b103a 100644 --- a/src/legend/qarealegendmarker.cpp +++ b/src/legend/qarealegendmarker.cpp @@ -50,12 +50,6 @@ QAreaSeries* QAreaLegendMarker::series() return d->m_series; } -QAreaSeries* QAreaLegendMarker::peerObject() -{ - Q_D(QAreaLegendMarker); - return d->m_series; -} - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QAreaLegendMarkerPrivate::QAreaLegendMarkerPrivate(QAreaLegendMarker *q, QAreaSeries *series, QLegend *legend) : diff --git a/src/legend/qarealegendmarker.h b/src/legend/qarealegendmarker.h index 6e5f34d..84203e2 100644 --- a/src/legend/qarealegendmarker.h +++ b/src/legend/qarealegendmarker.h @@ -38,16 +38,14 @@ public: explicit QAreaLegendMarker(QAreaSeries* series, QLegend *legend, QObject *parent = 0); virtual ~QAreaLegendMarker(); - virtual QAreaSeries* series(); - virtual QAreaSeries* peerObject(); // TODO: rename to slice and remove these virtuals from base class? + virtual LegendMarkerType type() { return LegendMarkerTypeArea; } + + // Related series + QAreaSeries* series(); protected: QAreaLegendMarker(QAreaLegendMarkerPrivate &d, QObject *parent = 0); -//Q_SIGNALS: - -//public Q_SLOTS: - private: Q_DECLARE_PRIVATE(QAreaLegendMarker) Q_DISABLE_COPY(QAreaLegendMarker) diff --git a/src/legend/qbarlegendmarker.cpp b/src/legend/qbarlegendmarker.cpp index da7b95d..25159b9 100644 --- a/src/legend/qbarlegendmarker.cpp +++ b/src/legend/qbarlegendmarker.cpp @@ -50,7 +50,7 @@ QAbstractBarSeries *QBarLegendMarker::series() return d->m_series; } -QBarSet* QBarLegendMarker::peerObject() +QBarSet* QBarLegendMarker::barset() { Q_D(QBarLegendMarker); return d->m_barset; diff --git a/src/legend/qbarlegendmarker.h b/src/legend/qbarlegendmarker.h index 46a55e4..511444e 100644 --- a/src/legend/qbarlegendmarker.h +++ b/src/legend/qbarlegendmarker.h @@ -37,16 +37,15 @@ public: explicit QBarLegendMarker(QAbstractBarSeries* series, QBarSet* barset, QLegend *legend, QObject *parent = 0); virtual ~QBarLegendMarker(); - virtual QAbstractBarSeries* series(); - virtual QBarSet* peerObject(); // TODO: rename to slice and remove these virtuals from base class? + virtual LegendMarkerType type() { return LegendMarkerTypeBar; } + + // Related series and barset + QAbstractBarSeries* series(); + QBarSet* barset(); protected: QBarLegendMarker(QBarLegendMarkerPrivate &d, QObject *parent = 0); -//Q_SIGNALS: - -//public Q_SLOTS: - private: Q_DECLARE_PRIVATE(QBarLegendMarker) Q_DISABLE_COPY(QBarLegendMarker) diff --git a/src/legend/qlegendmarker.h b/src/legend/qlegendmarker.h index 1a97ba4..3b3025c 100644 --- a/src/legend/qlegendmarker.h +++ b/src/legend/qlegendmarker.h @@ -33,19 +33,25 @@ class QLegendMarkerPrivate; class QAbstractSeries; class QLegend; -// TODO: should this be QAbstractLegendMarker? class QTCOMMERCIALCHART_EXPORT QLegendMarker : public QObject { Q_OBJECT -// TODO: need for these? + enum LegendMarkerType { + LegendMarkerTypeArea, + LegendMarkerTypeBar, + LegendMarkerTypePie, + LegendMarkerTypeXY + }; + +// TODO: // Q_PROPERTY(QString label READ label WRITE setlabel NOTIFY labelChanged); // Q_PROPERTY(QPen pen READ pen WRITE setPen NOTIFY penChanged); // Q_PROPERTY(QBrush brush READ brush WRITE setBrush NOTIFY brushChanged); public: -// explicit QLegendMarker(QAbstractSeries* series, QObject *parent = 0); virtual ~QLegendMarker(); + virtual LegendMarkerType type() = 0; QString label() const; void setLabel(const QString &label); @@ -65,10 +71,6 @@ public: bool isVisible() const; void setVisible(bool visible); -// virtual QAbstractSeries::SeriesType type() = 0; // TODO? Or use LegendMarker type enum? - virtual QAbstractSeries* series() = 0; // TODO: remove these and use specialised functions on derived classes? - virtual QObject* peerObject() = 0; - protected: explicit QLegendMarker(QLegendMarkerPrivate &d, QObject *parent = 0); diff --git a/src/legend/qpielegendmarker.cpp b/src/legend/qpielegendmarker.cpp index d4bd769..dcf218d 100644 --- a/src/legend/qpielegendmarker.cpp +++ b/src/legend/qpielegendmarker.cpp @@ -50,7 +50,7 @@ QPieSeries* QPieLegendMarker::series() return d->m_series; } -QPieSlice* QPieLegendMarker::peerObject() +QPieSlice* QPieLegendMarker::slice() { Q_D(QPieLegendMarker); return d->m_slice; diff --git a/src/legend/qpielegendmarker.h b/src/legend/qpielegendmarker.h index e3ede68..6aa5947 100644 --- a/src/legend/qpielegendmarker.h +++ b/src/legend/qpielegendmarker.h @@ -39,16 +39,15 @@ public: explicit QPieLegendMarker(QPieSeries* series, QPieSlice* slice, QLegend *legend, QObject *parent = 0); virtual ~QPieLegendMarker(); - virtual QPieSeries* series(); - virtual QPieSlice* peerObject(); // TODO: rename to slice and remove these virtuals from base class? + virtual LegendMarkerType type() { return LegendMarkerTypePie; } + + // Related series and slice + QPieSeries* series(); + QPieSlice* slice(); protected: QPieLegendMarker(QPieLegendMarkerPrivate &d, QObject *parent = 0); -//Q_SIGNALS: - -//public Q_SLOTS: - private: Q_DECLARE_PRIVATE(QPieLegendMarker) Q_DISABLE_COPY(QPieLegendMarker) diff --git a/src/legend/qxylegendmarker.cpp b/src/legend/qxylegendmarker.cpp index 21115ed..8db1338 100644 --- a/src/legend/qxylegendmarker.cpp +++ b/src/legend/qxylegendmarker.cpp @@ -50,12 +50,6 @@ QXYSeries* QXYLegendMarker::series() return d->m_series; } -QXYSeries* QXYLegendMarker::peerObject() -{ - Q_D(QXYLegendMarker); - return d->m_series; -} - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QXYLegendMarkerPrivate::QXYLegendMarkerPrivate(QXYLegendMarker *q, QXYSeries *series, QLegend *legend) : diff --git a/src/legend/qxylegendmarker.h b/src/legend/qxylegendmarker.h index 97666f0..593a8cb 100644 --- a/src/legend/qxylegendmarker.h +++ b/src/legend/qxylegendmarker.h @@ -36,16 +36,14 @@ public: explicit QXYLegendMarker(QXYSeries* series, QLegend *legend, QObject *parent = 0); virtual ~QXYLegendMarker(); - virtual QXYSeries* series(); - virtual QXYSeries* peerObject(); // TODO: rename to slice and remove these virtuals from base class? + virtual LegendMarkerType type() { return LegendMarkerTypeXY; } + + // Related series + QXYSeries* series(); protected: QXYLegendMarker(QXYLegendMarkerPrivate &d, QObject *parent = 0); -//Q_SIGNALS: - -//public Q_SLOTS: - private: Q_DECLARE_PRIVATE(QXYLegendMarker) Q_DISABLE_COPY(QXYLegendMarker)