From ffc2e2039f58de256a98da395b5d0e87d5a176fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomi=20Korpip=C3=A4=C3=A4?= Date: Mon, 10 Feb 2014 07:41:25 +0200 Subject: Added selectedSeries property Task-number: QTRD-2806 Change-Id: Icd895915f39e475fe9f2a006bebd956615474202 Reviewed-by: Miikka Heikkinen --- .../doc/src/qtdatavisualization-qml-bars3d.qdoc | 6 ++++++ .../doc/src/qtdatavisualization-qml-scatter3d.qdoc | 11 ++++++++--- .../doc/src/qtdatavisualization-qml-surface3d.qdoc | 11 ++++++++--- src/datavisualization/engine/bars3dcontroller.cpp | 4 ++++ src/datavisualization/engine/bars3dcontroller_p.h | 6 +++++- src/datavisualization/engine/q3dbars.cpp | 13 +++++++++++++ src/datavisualization/engine/q3dbars.h | 4 ++++ src/datavisualization/engine/q3dscatter.cpp | 12 ++++++++++++ src/datavisualization/engine/q3dscatter.h | 4 ++++ src/datavisualization/engine/q3dsurface.cpp | 13 +++++++++++++ src/datavisualization/engine/q3dsurface.h | 4 ++++ src/datavisualization/engine/qabstract3dgraph.cpp | 2 +- src/datavisualization/engine/scatter3dcontroller.cpp | 4 ++++ src/datavisualization/engine/scatter3dcontroller_p.h | 5 +++++ src/datavisualization/engine/surface3dcontroller.cpp | 4 ++++ src/datavisualization/engine/surface3dcontroller_p.h | 5 +++++ src/datavisualizationqml2/declarativebars.cpp | 7 +++++++ src/datavisualizationqml2/declarativebars_p.h | 4 ++++ src/datavisualizationqml2/declarativescatter.cpp | 8 ++++++++ src/datavisualizationqml2/declarativescatter_p.h | 4 ++++ src/datavisualizationqml2/declarativesurface.cpp | 19 ++++++++++++++----- src/datavisualizationqml2/declarativesurface_p.h | 4 ++++ 22 files changed, 141 insertions(+), 13 deletions(-) diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc index aaafe217..443cebf6 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc @@ -92,6 +92,12 @@ * Relative or absolute bar spacing. */ +/*! + * \qmlproperty Bar3DSeries Bars3D::selectedSeries + * The selected series or \c null. If \l {QAbstract3DGraph::selectionMode}{selectionMode} has + * \c SelectionMultiSeries flag set, this property holds the series which owns the selected bar. + */ + /*! * \qmlproperty list Bars3D::seriesList * \default diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc index b969c536..76f68af4 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc @@ -72,7 +72,12 @@ */ /*! - * \qmlproperty list Scatter3D::seriesList + * \qmlproperty Scatter3DSeries Scatter3D::selectedSeries + * The selected series or \c null. + */ + +/*! + * \qmlproperty list Scatter3D::seriesList * \default * This property holds the series of the graph. * By default, this property contains an empty list. @@ -80,13 +85,13 @@ */ /*! - * \qmlmethod void Scatter3D::addSeries(QScatter3DSeries *series) + * \qmlmethod void Scatter3D::addSeries(Scatter3DSeries series) * Adds the \a series to the graph. A graph can contain multiple series, but has only one set of * axes. If the newly added series has specified a selected item, it will be highlighted and * any existing selection will be cleared. Only one added series can have an active selection. */ /*! - * \qmlmethod void Scatter3D::removeSeries(QScatter3DSeries *series) + * \qmlmethod void Scatter3D::removeSeries(Scatter3DSeries series) * Remove the \a series from the graph. */ diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc index 3011336b..0cc2a5ab 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc @@ -72,13 +72,18 @@ */ /*! + * \qmlproperty Surface3DSeries Surface3D::selectedSeries + * The selected series or \c null. If \l {QAbstract3DGraph::selectionMode}{selectionMode} has + * \c SelectionMultiSeries flag set, this property holds the series which owns the selected point. + */ + /*! \qmlproperty ColorGradient Surface3D::gradient The current surface gradient. Setting this property replaces the previous gradient. */ /*! - * \qmlproperty list Surface3D::seriesList + * \qmlproperty list Surface3D::seriesList * \default * This property holds the series of the graph. * By default, this property contains an empty list. @@ -87,12 +92,12 @@ */ /*! - * \qmlmethod void Surface3D::addSeries(QSurface3DSeries *series) + * \qmlmethod void Surface3D::addSeries(Surface3DSeries series) * Adds the \a series to the graph. * \note The surface graph currently supports only a single series at a time. */ /*! - * \qmlmethod void Surface3D::removeSeries(QSurface3DSeries *series) + * \qmlmethod void Surface3D::removeSeries(Surface3DSeries series) * Remove the \a series from the graph. */ diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp index c49a6bb0..c84c445b 100644 --- a/src/datavisualization/engine/bars3dcontroller.cpp +++ b/src/datavisualization/engine/bars3dcontroller.cpp @@ -472,6 +472,7 @@ void Bars3DController::setSelectedBar(const QPoint &position, QBar3DSeries *seri } if (pos != m_selectedBar || series != m_selectedBarSeries) { + bool seriesChanged = (series != m_selectedBarSeries); m_selectedBar = pos; m_selectedBarSeries = series; m_changeTracker.selectedBarChanged = true; @@ -485,6 +486,9 @@ void Bars3DController::setSelectedBar(const QPoint &position, QBar3DSeries *seri if (m_selectedBarSeries) m_selectedBarSeries->dptr()->setSelectedBar(m_selectedBar); + if (seriesChanged) + emit selectedSeriesChanged(m_selectedBarSeries); + emitNeedRender(); } } diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h index d41af02d..9ea59c89 100644 --- a/src/datavisualization/engine/bars3dcontroller_p.h +++ b/src/datavisualization/engine/bars3dcontroller_p.h @@ -94,11 +94,14 @@ public: QSizeF barSpacing(); bool isBarSpecRelative(); + inline QBar3DSeries *selectedSeries() const { return m_selectedBarSeries; } + void setSelectionMode(QAbstract3DGraph::SelectionFlags mode); void setSelectedBar(const QPoint &position, QBar3DSeries *series, bool enterSlice); virtual void clearSelection(); - virtual void handleAxisAutoAdjustRangeChangedInOrientation(QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust); + virtual void handleAxisAutoAdjustRangeChangedInOrientation( + QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust); virtual void handleSeriesVisibilityChangedBySender(QObject *sender); virtual void handlePendingClick(); @@ -128,6 +131,7 @@ public slots: signals: void primarySeriesChanged(QBar3DSeries *series); + void selectedSeriesChanged(QBar3DSeries *series); protected: virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation); diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp index 787033ad..7b37715f 100644 --- a/src/datavisualization/engine/q3dbars.cpp +++ b/src/datavisualization/engine/q3dbars.cpp @@ -104,6 +104,8 @@ Q3DBars::Q3DBars(const QSurfaceFormat *format, QWindow *parent) dptr()->m_shared->initializeOpenGL(); QObject::connect(dptr()->m_shared, &Bars3DController::primarySeriesChanged, this, &Q3DBars::primarySeriesChanged); + QObject::connect(dptr()->m_shared, &Bars3DController::selectedSeriesChanged, + this, &Q3DBars::selectedSeriesChanged); } /*! @@ -327,6 +329,17 @@ QValue3DAxis *Q3DBars::valueAxis() const return static_cast(dptrc()->m_shared->axisY()); } +/*! + * \property Q3DBars::selectedSeries + * + * The selected series or \c null. If selectionMode has \c SelectionMultiSeries flag set, this + * property holds the series which owns the selected bar. + */ +QBar3DSeries *Q3DBars::selectedSeries() const +{ + return dptrc()->m_shared->selectedSeries(); +} + /*! * Adds \a axis to the graph. The axes added via addAxis are not yet taken to use, * addAxis is simply used to give the ownership of the \a axis to the graph. diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h index 06dcfedb..97e7c067 100644 --- a/src/datavisualization/engine/q3dbars.h +++ b/src/datavisualization/engine/q3dbars.h @@ -42,6 +42,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged) Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged) Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged) + Q_PROPERTY(QBar3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) public: explicit Q3DBars(const QSurfaceFormat *format = 0, QWindow *parent = 0); @@ -76,6 +77,8 @@ public: void releaseAxis(QAbstract3DAxis *axis); QList axes() const; + QBar3DSeries *selectedSeries() const; + signals: void multiSeriesUniformChanged(bool uniform); void barThicknessChanged(float thicknessRatio); @@ -85,6 +88,7 @@ signals: void columnAxisChanged(QCategory3DAxis *axis); void valueAxisChanged(QValue3DAxis *axis); void primarySeriesChanged(QBar3DSeries *series); + void selectedSeriesChanged(QBar3DSeries *series); private: Q3DBarsPrivate *dptr(); diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp index db7d2491..7c7809f3 100644 --- a/src/datavisualization/engine/q3dscatter.cpp +++ b/src/datavisualization/engine/q3dscatter.cpp @@ -87,6 +87,8 @@ Q3DScatter::Q3DScatter(const QSurfaceFormat *format, QWindow *parent) dptr()->m_shared = new Scatter3DController(geometry()); d_ptr->setVisualController(dptr()->m_shared); dptr()->m_shared->initializeOpenGL(); + QObject::connect(dptr()->m_shared, &Scatter3DController::selectedSeriesChanged, + this, &Q3DScatter::selectedSeriesChanged); } /*! @@ -201,6 +203,16 @@ QValue3DAxis *Q3DScatter::axisZ() const return static_cast(dptrc()->m_shared->axisZ()); } +/*! + * \property Q3DScatter::selectedSeries + * + * The selected series or \c null. + */ +QScatter3DSeries *Q3DScatter::selectedSeries() const +{ + return dptrc()->m_shared->selectedSeries(); +} + /*! * Adds \a axis to the graph. The axes added via addAxis are not yet taken to use, * addAxis is simply used to give the ownership of the \a axis to the graph. diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h index 55158537..2d8516ee 100644 --- a/src/datavisualization/engine/q3dscatter.h +++ b/src/datavisualization/engine/q3dscatter.h @@ -37,6 +37,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DScatter : public QAbstract3DGraph Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) Q_PROPERTY(QValue3DAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + Q_PROPERTY(QScatter3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) public: explicit Q3DScatter(const QSurfaceFormat *format = 0, QWindow *parent = 0); @@ -56,10 +57,13 @@ public: void releaseAxis(QValue3DAxis *axis); QList axes() const; + QScatter3DSeries *selectedSeries() const; + signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); void axisZChanged(QValue3DAxis *axis); + void selectedSeriesChanged(QScatter3DSeries *series); private: Q3DScatterPrivate *dptr(); diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp index a8a8235e..5705cc30 100644 --- a/src/datavisualization/engine/q3dsurface.cpp +++ b/src/datavisualization/engine/q3dsurface.cpp @@ -100,6 +100,8 @@ Q3DSurface::Q3DSurface(const QSurfaceFormat *format, QWindow *parent) dptr()->m_shared = new Surface3DController(geometry()); d_ptr->setVisualController(dptr()->m_shared); dptr()->m_shared->initializeOpenGL(); + QObject::connect(dptr()->m_shared, &Surface3DController::selectedSeriesChanged, + this, &Q3DSurface::selectedSeriesChanged); } /*! @@ -222,6 +224,17 @@ QValue3DAxis *Q3DSurface::axisZ() const return static_cast(dptrc()->m_shared->axisZ()); } +/*! + * \property Q3DSurface::selectedSeries + * + * The selected series or \c null. If selectionMode has \c SelectionMultiSeries flag set, this + * property holds the series which owns the selected point. + */ +QSurface3DSeries *Q3DSurface::selectedSeries() const +{ + return dptrc()->m_shared->selectedSeries(); +} + /*! * Adds \a axis to the graph. The axes added via addAxis are not yet taken to use, * addAxis is simply used to give the ownership of the \a axis to the graph. diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h index 7fb6e58a..673ce4d7 100644 --- a/src/datavisualization/engine/q3dsurface.h +++ b/src/datavisualization/engine/q3dsurface.h @@ -35,6 +35,7 @@ class QT_DATAVISUALIZATION_EXPORT Q3DSurface : public QAbstract3DGraph Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) Q_PROPERTY(QValue3DAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + Q_PROPERTY(QSurface3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) public: explicit Q3DSurface(const QSurfaceFormat *format = 0, QWindow *parent = 0); @@ -55,10 +56,13 @@ public: void releaseAxis(QValue3DAxis *axis); QList axes() const; + QSurface3DSeries *selectedSeries() const; + signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); void axisZChanged(QValue3DAxis *axis); + void selectedSeriesChanged(QSurface3DSeries *series); private: Q3DSurfacePrivate *dptr(); diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index adb34458..aeb4a0b6 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -94,7 +94,7 @@ QT_BEGIN_NAMESPACE_DATAVISUALIZATION \value SelectionMultiSeries Setting this mode means that items for all series at same position are highlighted, instead of just the selected item. The actual selection in the other series doesn't change. - Multi-series selection is only supported for Q3DBars. + Multi-series selection is not supported for Q3DScatter. */ /*! diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp index a1850a3c..8495052e 100644 --- a/src/datavisualization/engine/scatter3dcontroller.cpp +++ b/src/datavisualization/engine/scatter3dcontroller.cpp @@ -303,6 +303,7 @@ void Scatter3DController::setSelectedItem(int index, QScatter3DSeries *series) index = invalidSelectionIndex(); if (index != m_selectedItem || series != m_selectedItemSeries) { + bool seriesChanged = (series != m_selectedItemSeries); m_selectedItem = index; m_selectedItemSeries = series; m_changeTracker.selectedItemChanged = true; @@ -316,6 +317,9 @@ void Scatter3DController::setSelectedItem(int index, QScatter3DSeries *series) if (m_selectedItemSeries) m_selectedItemSeries->dptr()->setSelectedItem(m_selectedItem); + if (seriesChanged) + emit selectedSeriesChanged(m_selectedItemSeries); + emitNeedRender(); } } diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h index 173d4e05..53d24549 100644 --- a/src/datavisualization/engine/scatter3dcontroller_p.h +++ b/src/datavisualization/engine/scatter3dcontroller_p.h @@ -93,6 +93,8 @@ public: // Change selection mode void setSelectionMode(QAbstract3DGraph::SelectionFlags mode); + inline QScatter3DSeries *selectedSeries() const { return m_selectedItemSeries; } + void setSelectedItem(int index, QScatter3DSeries *series); static inline int invalidSelectionIndex() { return -1; } virtual void clearSelection(); @@ -116,6 +118,9 @@ public slots: void handleItemsRemoved(int startIndex, int count); void handleItemsInserted(int startIndex, int count); +signals: + void selectedSeriesChanged(QScatter3DSeries *series); + protected: virtual void startRecordingRemovesAndInserts(); diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp index 553166e1..966a9d15 100644 --- a/src/datavisualization/engine/surface3dcontroller.cpp +++ b/src/datavisualization/engine/surface3dcontroller.cpp @@ -262,6 +262,7 @@ void Surface3DController::setSelectedPoint(const QPoint &position, QSurface3DSer } if (pos != m_selectedPoint || series != m_selectedSeries) { + bool seriesChanged = (series != m_selectedSeries); m_selectedPoint = pos; m_selectedSeries = series; m_changeTracker.selectedPointChanged = true; @@ -275,6 +276,9 @@ void Surface3DController::setSelectedPoint(const QPoint &position, QSurface3DSer if (m_selectedSeries) m_selectedSeries->dptr()->setSelectedPoint(m_selectedPoint); + if (seriesChanged) + emit selectedSeriesChanged(m_selectedSeries); + emitNeedRender(); } } diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h index 64a57b3b..93839798 100644 --- a/src/datavisualization/engine/surface3dcontroller_p.h +++ b/src/datavisualization/engine/surface3dcontroller_p.h @@ -80,6 +80,8 @@ public: void setSelectedPoint(const QPoint &position, QSurface3DSeries *series, bool enterSlice); virtual void clearSelection(); + inline QSurface3DSeries *selectedSeries() const { return m_selectedSeries; } + virtual void handleAxisAutoAdjustRangeChangedInOrientation( QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust); virtual void handleAxisRangeChangedBySender(QObject *sender); @@ -103,6 +105,9 @@ public slots: void handleFlatShadingSupportedChange(bool supported); +signals: + void selectedSeriesChanged(QSurface3DSeries *series); + private: void adjustValueAxisRange(); diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index e24526c3..4f984c32 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -35,6 +35,8 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) QObject::connect(m_barsController, &Bars3DController::primarySeriesChanged, this, &DeclarativeBars::primarySeriesChanged); + QObject::connect(m_barsController, &Bars3DController::selectedSeriesChanged, + this, &DeclarativeBars::selectedSeriesChanged); } DeclarativeBars::~DeclarativeBars() @@ -124,6 +126,11 @@ bool DeclarativeBars::isBarSpacingRelative() const return m_barsController->isBarSpecRelative(); } +QBar3DSeries *DeclarativeBars::selectedSeries() const +{ + return m_barsController->selectedSeries(); +} + QQmlListProperty DeclarativeBars::seriesList() { return QQmlListProperty(this, this, diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h index e5a90a01..be66860d 100644 --- a/src/datavisualizationqml2/declarativebars_p.h +++ b/src/datavisualizationqml2/declarativebars_p.h @@ -56,6 +56,7 @@ class DeclarativeBars : public AbstractDeclarative Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged) Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged) Q_PROPERTY(QQmlListProperty seriesList READ seriesList) + Q_PROPERTY(QBar3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged) Q_CLASSINFO("DefaultProperty", "seriesList") @@ -93,6 +94,8 @@ public: void setPrimarySeries(QBar3DSeries *series); QBar3DSeries *primarySeries() const; + QBar3DSeries *selectedSeries() const; + public slots: void handleAxisXChanged(QAbstract3DAxis *axis); void handleAxisYChanged(QAbstract3DAxis *axis); @@ -108,6 +111,7 @@ signals: void barSpacingRelativeChanged(bool relative); void meshFileNameChanged(QString filename); void primarySeriesChanged(QBar3DSeries *series); + void selectedSeriesChanged(QBar3DSeries *series); private: Bars3DController *m_barsController; diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 81a1e879..dcc52a3d 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -31,6 +31,9 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) // Create the shared component on the main GUI thread. m_scatterController = new Scatter3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_scatterController); + + QObject::connect(m_scatterController, &Scatter3DController::selectedSeriesChanged, + this, &DeclarativeScatter::selectedSeriesChanged); } DeclarativeScatter::~DeclarativeScatter() @@ -68,6 +71,11 @@ void DeclarativeScatter::setAxisZ(QValue3DAxis *axis) m_scatterController->setAxisZ(axis); } +QScatter3DSeries *DeclarativeScatter::selectedSeries() const +{ + return m_scatterController->selectedSeries(); +} + QQmlListProperty DeclarativeScatter::seriesList() { return QQmlListProperty(this, this, diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h index bca44085..f36d2a7b 100644 --- a/src/datavisualizationqml2/declarativescatter_p.h +++ b/src/datavisualizationqml2/declarativescatter_p.h @@ -49,6 +49,7 @@ class DeclarativeScatter : public AbstractDeclarative Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) Q_PROPERTY(QValue3DAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + Q_PROPERTY(QScatter3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) Q_PROPERTY(QQmlListProperty seriesList READ seriesList) Q_CLASSINFO("DefaultProperty", "seriesList") @@ -71,6 +72,8 @@ public: Q_INVOKABLE void addSeries(QScatter3DSeries *series); Q_INVOKABLE void removeSeries(QScatter3DSeries *series); + QScatter3DSeries *selectedSeries() const; + public slots: void handleAxisXChanged(QAbstract3DAxis *axis); void handleAxisYChanged(QAbstract3DAxis *axis); @@ -80,6 +83,7 @@ signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); void axisZChanged(QValue3DAxis *axis); + void selectedSeriesChanged(QScatter3DSeries *series); protected: Scatter3DController *m_scatterController; diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index c0e1ddcc..78519586 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -32,6 +32,9 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) // Create the shared component on the main GUI thread. m_surfaceController = new Surface3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_surfaceController); + + QObject::connect(m_surfaceController, &Surface3DController::selectedSeriesChanged, + this, &DeclarativeSurface::selectedSeriesChanged); } DeclarativeSurface::~DeclarativeSurface() @@ -69,16 +72,22 @@ void DeclarativeSurface::setAxisZ(QValue3DAxis *axis) m_surfaceController->setAxisZ(axis); } +QSurface3DSeries *DeclarativeSurface::selectedSeries() const +{ + return m_surfaceController->selectedSeries(); +} + QQmlListProperty DeclarativeSurface::seriesList() { return QQmlListProperty(this, this, - &DeclarativeSurface::appendSeriesFunc, - &DeclarativeSurface::countSeriesFunc, - &DeclarativeSurface::atSeriesFunc, - &DeclarativeSurface::clearSeriesFunc); + &DeclarativeSurface::appendSeriesFunc, + &DeclarativeSurface::countSeriesFunc, + &DeclarativeSurface::atSeriesFunc, + &DeclarativeSurface::clearSeriesFunc); } -void DeclarativeSurface::appendSeriesFunc(QQmlListProperty *list, QSurface3DSeries *series) +void DeclarativeSurface::appendSeriesFunc(QQmlListProperty *list, + QSurface3DSeries *series) { reinterpret_cast(list->data)->addSeries(series); } diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml2/declarativesurface_p.h index b354fe59..bba3887d 100644 --- a/src/datavisualizationqml2/declarativesurface_p.h +++ b/src/datavisualizationqml2/declarativesurface_p.h @@ -50,6 +50,7 @@ class DeclarativeSurface : public AbstractDeclarative Q_PROPERTY(QValue3DAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) Q_PROPERTY(QValue3DAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) Q_PROPERTY(QValue3DAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + Q_PROPERTY(QSurface3DSeries *selectedSeries READ selectedSeries NOTIFY selectedSeriesChanged) Q_PROPERTY(QQmlListProperty seriesList READ seriesList) Q_CLASSINFO("DefaultProperty", "seriesList") @@ -72,6 +73,8 @@ public: Q_INVOKABLE void addSeries(QSurface3DSeries *series); Q_INVOKABLE void removeSeries(QSurface3DSeries *series); + QSurface3DSeries *selectedSeries() const; + public slots: void handleAxisXChanged(QAbstract3DAxis *axis); void handleAxisYChanged(QAbstract3DAxis *axis); @@ -81,6 +84,7 @@ signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); void axisZChanged(QValue3DAxis *axis); + void selectedSeriesChanged(QSurface3DSeries *series); private: Surface3DController *m_surfaceController; -- cgit v1.2.3