diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-11-20 14:49:06 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-11-21 10:26:32 +0200 |
commit | d12f993ca802ff02091d6a5141d2847641bc65a8 (patch) | |
tree | c4e5fe4811e6942ef51dca6f48a96a7e129fccc3 /src/datavisualization/data | |
parent | 51d4a9fcba6089ba433ae126f554b50979220d07 (diff) |
Multi series selection part 2: scatter
Task-number: QTRD-2556
Change-Id: I9ee193141dff6603b47db28b0ed0682db6f914c8
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/data')
-rw-r--r-- | src/datavisualization/data/qabstract3dseries_p.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qbar3dseries.cpp | 17 | ||||
-rw-r--r-- | src/datavisualization/data/qbar3dseries.h | 1 | ||||
-rw-r--r-- | src/datavisualization/data/qscatter3dseries.cpp | 45 | ||||
-rw-r--r-- | src/datavisualization/data/qscatter3dseries.h | 6 | ||||
-rw-r--r-- | src/datavisualization/data/qscatter3dseries_p.h | 3 |
6 files changed, 67 insertions, 6 deletions
diff --git a/src/datavisualization/data/qabstract3dseries_p.h b/src/datavisualization/data/qabstract3dseries_p.h index 2851c8e0..a82c3554 100644 --- a/src/datavisualization/data/qabstract3dseries_p.h +++ b/src/datavisualization/data/qabstract3dseries_p.h @@ -67,6 +67,7 @@ private: friend class Surface3DController; friend class Scatter3DController; friend class QBar3DSeries; + friend class QScatter3DSeries; }; QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp index febbd97e..ac292e5e 100644 --- a/src/datavisualization/data/qbar3dseries.cpp +++ b/src/datavisualization/data/qbar3dseries.cpp @@ -138,10 +138,10 @@ QBarDataProxy *QBar3DSeries::dataProxy() const /*! * \property Q3DBars::selectedBar * - * Selects a bar in a \a position. The position is the (row, column) position in + * Selects a bar at the \a position. The \a 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). + * To clear selection, set invalidSelectionPosition() as the \a position. * 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. @@ -161,6 +161,15 @@ QPoint QBar3DSeries::selectedBar() const } /*! + * \return an invalid position for selection. Set this position to selectedBar property if you + * want to clear the selection. + */ +QPoint QBar3DSeries::invalidSelectionPosition() const +{ + return Bars3DController::invalidSelectionPosition(); +} + +/*! * \internal */ QBar3DSeriesPrivate *QBar3DSeries::dptr() @@ -180,7 +189,7 @@ const QBar3DSeriesPrivate *QBar3DSeries::dptrc() const QBar3DSeriesPrivate::QBar3DSeriesPrivate(QBar3DSeries *q) : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeBar), - m_selectedBar(Bars3DController::noSelectionPoint()) + m_selectedBar(Bars3DController::invalidSelectionPosition()) { m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel"); } @@ -206,7 +215,6 @@ 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 @@ -215,6 +223,7 @@ void QBar3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *newCon } if (newController && barDataProxy) { + Bars3DController *controller = static_cast<Bars3DController *>(newController); QObject::connect(barDataProxy, &QBarDataProxy::arrayReset, controller, &Bars3DController::handleArrayReset); QObject::connect(barDataProxy, &QBarDataProxy::rowsAdded, controller, diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h index ec1754d1..ddc52170 100644 --- a/src/datavisualization/data/qbar3dseries.h +++ b/src/datavisualization/data/qbar3dseries.h @@ -42,6 +42,7 @@ public: void setSelectedBar(const QPoint &position); QPoint selectedBar() const; + QPoint invalidSelectionPosition() const; signals: void dataProxyChanged(QBarDataProxy *proxy); diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp index f0374339..aff0f33c 100644 --- a/src/datavisualization/data/qscatter3dseries.cpp +++ b/src/datavisualization/data/qscatter3dseries.cpp @@ -126,6 +126,39 @@ QScatterDataProxy *QScatter3DSeries::dataProxy() const } /*! + * \property QScatter3DSeries::selectedItem + * + * Selects an item at the \a index. The \a index is the index in the data array of the series. + * Only one item can be selected at a time. + * To clear selection, set invalidSelectionIndex() as the \a index. + * If this series is added to a graph, the graph can adjust the selection according to user + * interaction or if it becomes invalid. Selecting an item on another added series will also + * clear the selection. + */ +void QScatter3DSeries::setSelectedItem(int index) +{ + // Don't do this in private to avoid loops, as that is used for callback from controller. + if (d_ptr->m_controller) + static_cast<Scatter3DController *>(d_ptr->m_controller)->setSelectedItem(index, this); + else + dptr()->setSelectedItem(index); +} + +int QScatter3DSeries::selectedItem() const +{ + return dptrc()->m_selectedItem; +} + +/*! + * \return an invalid index for selection. Set this index to selectedItem property if you + * want to clear the selection. + */ +int QScatter3DSeries::invalidSelectionIndex() const +{ + return Scatter3DController::invalidSelectionIndex(); +} + +/*! * \internal */ QScatter3DSeriesPrivate *QScatter3DSeries::dptr() @@ -144,7 +177,8 @@ const QScatter3DSeriesPrivate *QScatter3DSeries::dptrc() const // QScatter3DSeriesPrivate QScatter3DSeriesPrivate::QScatter3DSeriesPrivate(QScatter3DSeries *q) - : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeScatter) + : QAbstract3DSeriesPrivate(q, QAbstract3DSeries::SeriesTypeScatter), + m_selectedItem(Scatter3DController::invalidSelectionIndex()) { m_itemLabelFormat = QStringLiteral("@valueTitle: @valueLabel"); } @@ -179,7 +213,6 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne if (newController && scatterDataProxy) { Scatter3DController *controller = static_cast<Scatter3DController *>(newController); - QObject::connect(scatterDataProxy, &QScatterDataProxy::arrayReset, controller, &Scatter3DController::handleArrayReset); QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsAdded, @@ -196,4 +229,12 @@ void QScatter3DSeriesPrivate::connectControllerAndProxy(Abstract3DController *ne } } +void QScatter3DSeriesPrivate::setSelectedItem(int index) +{ + if (index != m_selectedItem) { + m_selectedItem = index; + emit qptr()->selectedItemChanged(m_selectedItem); + } +} + QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/data/qscatter3dseries.h b/src/datavisualization/data/qscatter3dseries.h index bb24f79a..8c28f3a6 100644 --- a/src/datavisualization/data/qscatter3dseries.h +++ b/src/datavisualization/data/qscatter3dseries.h @@ -30,6 +30,7 @@ class QT_DATAVISUALIZATION_EXPORT QScatter3DSeries : public QAbstract3DSeries { Q_OBJECT Q_PROPERTY(QScatterDataProxy *dataProxy READ dataProxy WRITE setDataProxy NOTIFY dataProxyChanged) + Q_PROPERTY(int selectedItem READ selectedItem WRITE setSelectedItem NOTIFY selectedItemChanged) public: explicit QScatter3DSeries(QObject *parent = 0); @@ -39,8 +40,13 @@ public: void setDataProxy(QScatterDataProxy *proxy); QScatterDataProxy *dataProxy() const; + void setSelectedItem(int index); + int selectedItem() const; + Q_INVOKABLE int invalidSelectionIndex() const; + signals: void dataProxyChanged(QScatterDataProxy *proxy); + void selectedItemChanged(int index); protected: explicit QScatter3DSeries(QScatter3DSeriesPrivate *d, QObject *parent = 0); diff --git a/src/datavisualization/data/qscatter3dseries_p.h b/src/datavisualization/data/qscatter3dseries_p.h index b839af2e..0cf47bce 100644 --- a/src/datavisualization/data/qscatter3dseries_p.h +++ b/src/datavisualization/data/qscatter3dseries_p.h @@ -44,8 +44,11 @@ public: virtual void setDataProxy(QAbstractDataProxy *proxy); virtual void connectControllerAndProxy(Abstract3DController *newController); + void setSelectedItem(int index); + private: QScatter3DSeries *qptr(); + int m_selectedItem; private: friend class QScatter3DSeries; |