From 897922a711bacea0aceef657e5f62821784eccd8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Wed, 30 Oct 2013 09:45:35 +0200 Subject: QML selection API for scatter and surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I8a6f28fff8833cb123340ee5a953d29cea40f502 Reviewed-by: Tomi Korpipää --- .../doc/src/qtdatavisualization-qml-scatter3d.qdoc | 6 ++++++ .../doc/src/qtdatavisualization-qml-surface3d.qdoc | 9 +++++++++ src/datavisualizationqml2/declarativebars_p.h | 1 - src/datavisualizationqml2/declarativescatter.cpp | 13 +++++++++++++ src/datavisualizationqml2/declarativescatter_p.h | 8 +++++++- src/datavisualizationqml2/declarativesurface.cpp | 13 +++++++++++++ src/datavisualizationqml2/declarativesurface_p.h | 5 +++++ 7 files changed, 53 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc index e583a807..3d367a77 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc @@ -103,3 +103,9 @@ \note Object needs to be in Wavefront obj format and include vertices, normals and UVs. It also needs to be in triangles. */ + +/*! + \qmlproperty int Scatter3D::selectedItemIndex + Selects an item in the \a index. Only one item can be selected at a time. + To clear selection, specify an illegal \a index, e.g. -1. + */ diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc index c55b7ec1..b47408f2 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc @@ -88,3 +88,12 @@ \qmlproperty ColorGradient Surface3D::gradient The current surface gradient. Setting this property replaces the previous gradient. */ + +/*! + \qmlproperty point Surface3D::selectedPoint + + Selects a surface grid point in a \a position. The position is the (row, column) position in + the data array of the active data proxy. + Only one point can be selected at a time. + To clear selection, specify an illegal \a position, e.g. (-1, -1). + */ diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h index f71d9ad3..16fe6d1f 100644 --- a/src/datavisualizationqml2/declarativebars_p.h +++ b/src/datavisualizationqml2/declarativebars_p.h @@ -58,7 +58,6 @@ class DeclarativeBars : public AbstractDeclarative Q_PROPERTY(bool barSmoothingEnabled READ isBarSmoothingEnabled WRITE setBarSmoothingEnabled) Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName) Q_PROPERTY(QPointF selectedBar READ selectedBar WRITE setSelectedBar NOTIFY selectedBarChanged) - Q_ENUMS(QtDataVisualization::QDataVis::MeshStyle) public: explicit DeclarativeBars(QQuickItem *parent = 0); diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 346abec2..a2ef9369 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -41,6 +41,9 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) m_shared = new Scatter3DController(boundingRect().toRect()); setSharedController(m_shared); m_shared->setActiveDataProxy(new QItemModelScatterDataProxy); + + QObject::connect(m_shared, &Scatter3DController::selectedItemIndexChanged, this, + &DeclarativeScatter::selectedItemIndexChanged); } DeclarativeScatter::~DeclarativeScatter() @@ -165,4 +168,14 @@ QString DeclarativeScatter::meshFileName() const return m_shared->meshFileName(); } +void DeclarativeScatter::setSelectedItemIndex(int index) +{ + m_shared->setSelectedItemIndex(index); +} + +int DeclarativeScatter::selectedItemIndex() const +{ + return m_shared->selectedItemIndex(); +} + QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h index cc16e770..922cf05e 100644 --- a/src/datavisualizationqml2/declarativescatter_p.h +++ b/src/datavisualizationqml2/declarativescatter_p.h @@ -53,7 +53,7 @@ class DeclarativeScatter : public AbstractDeclarative Q_PROPERTY(bool objectSmoothingEnabled READ isObjectSmoothingEnabled WRITE setObjectSmoothingEnabled) Q_PROPERTY(QString meshFileName READ meshFileName WRITE setMeshFileName) Q_PROPERTY(QString itemLabelFormat READ itemLabelFormat WRITE setItemLabelFormat) - Q_ENUMS(QtDataVisualization::QDataVis::MeshStyle) + Q_PROPERTY(int selectedItemIndex READ selectedItemIndex WRITE setSelectedItemIndex NOTIFY selectedItemIndexChanged) public: explicit DeclarativeScatter(QQuickItem *parent = 0); @@ -80,6 +80,12 @@ public: void setMeshFileName(const QString &objFileName); QString meshFileName() const; + void setSelectedItemIndex(int index); + int selectedItemIndex() const; + +signals: + void selectedItemIndexChanged(int index); + protected: Scatter3DController *m_shared; QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *); diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index 9ace6c55..a4cf1195 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -46,6 +46,9 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) QItemModelSurfaceDataProxy *proxy = new QItemModelSurfaceDataProxy; m_shared->setActiveDataProxy(proxy); + + QObject::connect(m_shared, &Surface3DController::selectedPointChanged, this, + &DeclarativeSurface::selectedPointChanged); } DeclarativeSurface::~DeclarativeSurface() @@ -167,6 +170,16 @@ ColorGradient *DeclarativeSurface::gradient() const return m_gradient; } +void DeclarativeSurface::setSelectedPoint(const QPointF &position) +{ + m_shared->setSelectedPoint(position.toPoint()); +} + +QPointF DeclarativeSurface::selectedPoint() const +{ + return QPointF(m_shared->selectedPoint()); +} + void DeclarativeSurface::setControllerGradient(const ColorGradient &gradient) { QLinearGradient newGradient; diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml2/declarativesurface_p.h index 6e35b3b3..3d911f43 100644 --- a/src/datavisualizationqml2/declarativesurface_p.h +++ b/src/datavisualizationqml2/declarativesurface_p.h @@ -54,6 +54,7 @@ class DeclarativeSurface : public AbstractDeclarative Q_PROPERTY(bool smoothSurfaceEnabled READ isSmoothSurfaceEnabled WRITE setSmoothSurfaceEnabled NOTIFY smoothSurfaceEnabledChanged) Q_PROPERTY(bool surfaceGridEnabled READ isSurfaceGridEnabled WRITE setSurfaceGridEnabled) Q_PROPERTY(ColorGradient *gradient READ gradient WRITE setGradient) + Q_PROPERTY(QPointF selectedPoint READ selectedPoint WRITE setSelectedPoint NOTIFY selectedPointChanged) public: explicit DeclarativeSurface(QQuickItem *parent = 0); @@ -78,8 +79,12 @@ public: void setGradient(ColorGradient *gradient); ColorGradient *gradient() const; + void setSelectedPoint(const QPointF &position); + QPointF selectedPoint() const; + signals: void smoothSurfaceEnabledChanged(bool enabled); + void selectedPointChanged(QPoint position); protected: void handleGradientUpdate(); -- cgit v1.2.3