diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-15 12:48:13 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-20 09:34:06 +0200 |
commit | 51d4a9fcba6089ba433ae126f554b50979220d07 (patch) | |
tree | 5ffdabb461efc3989224226b600a649d395ef80a /src/datavisualization/data | |
parent | 96995bda0da7ecf99d2ac4a4e417545c3506bf02 (diff) |
Multi series selection part 1: bars
Task-number: QTRD-2556
Change-Id: I1f537f0b4c299028d4415f074d5eac6552bb3b9b
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r-- | src/datavisualization/data/qabstract3dseries.cpp | 2 | ||||
-rw-r--r-- | src/datavisualization/data/qabstract3dseries.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qabstract3dseries_p.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qbar3dseries.cpp | 45 | ||||
-rw-r--r-- | src/datavisualization/data/qbar3dseries.h | 5 | ||||
-rw-r--r-- | src/datavisualization/data/qbar3dseries_p.h | 5 | ||||
-rw-r--r-- | src/datavisualization/data/qscatter3dseries.cpp | 5 | ||||
-rw-r--r-- | src/datavisualization/data/qscatter3dseries_p.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qsurface3dseries.cpp | 5 |
9 files changed, 51 insertions, 19 deletions
diff --git a/src/datavisualization/data/qabstract3dseries.cpp b/src/datavisualization/data/qabstract3dseries.cpp index 52d3fda1..0ebf2aa1 100644 --- a/src/datavisualization/data/qabstract3dseries.cpp +++ b/src/datavisualization/data/qabstract3dseries.cpp @@ -162,6 +162,8 @@ QAbstract3DSeriesPrivate::~QAbstract3DSeriesPrivate() void QAbstract3DSeriesPrivate::setItemLabelFormat(const QString &format) { m_itemLabelFormat = format; + if (m_controller) + m_controller->setSeriesDirty(); } QAbstractDataProxy *QAbstract3DSeriesPrivate::dataProxy() const diff --git a/src/datavisualization/data/qabstract3dseries.h b/src/datavisualization/data/qabstract3dseries.h index 3f20a161..ccd93ad2 100644 --- a/src/datavisualization/data/qabstract3dseries.h +++ b/src/datavisualization/data/qabstract3dseries.h @@ -79,6 +79,7 @@ private: friend class Bars3DController; friend class Surface3DController; friend class Scatter3DController; + friend class QBar3DSeries; }; QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h index 478fe6bb..2851c8e0 100644 --- a/src/datavisualization/data/qabstract3dseries_p.h +++ b/src/datavisualization/data/qabstract3dseries_p.h @@ -66,6 +66,7 @@ private: friend class Bars3DController; friend class Surface3DController; friend class Scatter3DController; + friend class QBar3DSeries; }; QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp index c04f8ca2..febbd97e 100644 --- a/src/datavisualization/data/qbar3dseries.cpp +++ b/src/datavisualization/data/qbar3dseries.cpp @@ -136,6 +136,31 @@ QBarDataProxy *QBar3DSeries::dataProxy() const } /*! + * \property Q3DBars::selectedBar + * + * Selects a bar in a \a position. The position is the (row, column) position in + * the data array of the series. + * Only one bar can be selected at a time. + * To clear selection, specify an illegal \a position, e.g. (-1, -1). + * If this series is added to a graph, the graph can adjust the selection according to user + * interaction or if it becomes invalid. Selecting a bar on another added series will also + * clear the selection. + */ +void QBar3DSeries::setSelectedBar(const QPoint &position) +{ + // Don't do this in private to avoid loops, as that is used for callback from controller. + if (d_ptr->m_controller) + static_cast<Bars3DController *>(d_ptr->m_controller)->setSelectedBar(position, this); + else + dptr()->setSelectedBar(position); +} + +QPoint QBar3DSeries::selectedBar() const +{ + return dptrc()->m_selectedBar; +} + +/*! * \internal */ QBar3DSeriesPrivate *QBar3DSeries::dptr() @@ -154,7 +179,8 @@ const QBar3DSeriesPrivate *QBar3DSeries::dptrc() const // QBar3DSeriesPrivate QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q) - : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar) + : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar), + m_selectedBar(Bars3DController::noSelectionPoint()) { m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel"); } @@ -180,16 +206,15 @@ void QBar3DSeriesPrivate::setDataProxy(QAbstractDataProxy *proxy) void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newController) { QBarDataProxy *barDataProxy = static_cast<QBarDataProxy *>(m_dataProxy); + Bars3DController *controller = static_cast<Bars3DController *>(newController); if (m_controller && barDataProxy) { - //Disconnect old controller/old proxy + // Disconnect old controller/old proxy QObject::disconnect(barDataProxy, 0, m_controller, 0); QObject::disconnect(q_ptr, 0, m_controller, 0); } if (newController && barDataProxy) { - Bars3DController *controller = static_cast<Bars3DController *>(newController); - QObject::connect(barDataProxy, &QBarDataProxy::arrayReset, controller, &Bars3DController::handleArrayReset); QObject::connect(barDataProxy, &QBarDataProxy::rowsAdded, controller, @@ -206,14 +231,16 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon &Bars3DController::handleDataRowLabelsChanged); QObject::connect(barDataProxy, &QBarDataProxy::columnLabelsChanged, controller, &Bars3DController::handleDataColumnLabelsChanged); - QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller, &Abstract3DController::handleSeriesVisibilityChanged); + } +} - // Always clear selection on proxy change - // TODO: setSelectedBar(noSelectionPoint()); - - newController->handleSeriesVisibilityChanged(m_visible); +void QBar3DSeriesPrivate::setSelectedBar(const QPoint &position) +{ + if (position != m_selectedBar) { + m_selectedBar = position; + emit qptr()->selectedBarChanged(m_selectedBar); } } diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h index ebb37838..ec1754d1 100644 --- a/src/datavisualization/data/qbar3dseries.h +++ b/src/datavisualization/data/qbar3dseries.h @@ -30,6 +30,7 @@ class QT_DATAVISUALIZATION_EXPORT QBar3DSeries : public QAbstract3DSeries { Q_OBJECT Q_PROPERTY(QBarDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged) + Q_PROPERTY(QPoint selectedBar READ selectedBar WRITE setSelectedBar NOTIFY selectedBarChanged) public: explicit QBar3DSeries(QObject *parent = 0); @@ -39,8 +40,12 @@ public: void setDataProxy(QBarDataProxy *proxy); QBarDataProxy *dataProxy() const; + void setSelectedBar(const QPoint &position); + QPoint selectedBar() const; + signals: void dataProxyChanged(QBarDataProxy *proxy); + void selectedBarChanged(QPoint position); protected: explicit QBar3DSeries(QBar3DSeriesPrivate *d, QObject *parent = 0); diff --git a/src/datavisualization/data/qbar3dseries_p.h b/src/datavisualization/data/qbar3dseries_p.h index 3ed95a69..89edb84a 100644 --- a/src/datavisualization/data/qbar3dseries_p.h +++ b/src/datavisualization/data/qbar3dseries_p.h @@ -43,9 +43,14 @@ public: virtual void setDataProxy(QAbstractDataProxy *proxy); virtual void connectControllerAndProxy(Abstract3DController *newController); + + void setSelectedBar(const QPoint &position); + private: QBar3DSeries *qptr(); + QPoint m_selectedBar; + private: friend class QBar3DSeries; }; diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp index 2fe61cff..f0374339 100644 --- a/src/datavisualization/data/qscatter3dseries.cpp +++ b/src/datavisualization/data/qscatter3dseries.cpp @@ -193,11 +193,6 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller, &Abstract3DController::handleSeriesVisibilityChanged); - - // Always clear selection on proxy change - // TODO: setSelectedScatter(noSelectionPoint()); - - newController->handleSeriesVisibilityChanged(m_visible); } } diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h index 001fb00c..b839af2e 100644 --- a/src/datavisualization/data/qscatter3dseries_p.h +++ b/src/datavisualization/data/qscatter3dseries_p.h @@ -43,6 +43,7 @@ public: virtual void setDataProxy(QAbstractDataProxy *proxy); virtual void connectControllerAndProxy(Abstract3DController *newController); + private: QScatter3DSeries *qptr(); diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp index a4622580..d17daeb1 100644 --- a/src/datavisualization/data/qsurface3dseries.cpp +++ b/src/datavisualization/data/qsurface3dseries.cpp @@ -185,11 +185,6 @@ void QSurface3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne QObject::connect(q_ptr, &QAbstract3DSeries::visibilityChanged, controller, &Abstract3DController::handleSeriesVisibilityChanged); - - // Always clear selection on proxy change - // TODO: setSelectedPoint(noSelectionPoint()); - - newController->handleSeriesVisibilityChanged(m_visible); } } |