From 997bc1f796938eb8347adfd79b6756ea8b2b3ab9 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 9 Jan 2014 08:29:11 +0200 Subject: Invalid point/selection as constant property in qml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Also fixed 0,0 QPoint -> QPointF conversion issue for Q3DScene Task-number: QTRD-2688 Change-Id: I3778081bb6ef2b5dbfcaad7502a4e164286c2646 Reviewed-by: Pasi Keränen --- src/datavisualizationqml2/abstractdeclarative.cpp | 5 +- src/datavisualizationqml2/abstractdeclarative_p.h | 5 +- .../datavisualizationqml2.pro | 6 ++- .../datavisualizationqml2_plugin.cpp | 4 +- .../datavisualizationqml2_plugin.h | 2 + src/datavisualizationqml2/declarativebars.cpp | 3 +- src/datavisualizationqml2/declarativescatter.cpp | 3 +- src/datavisualizationqml2/declarativescene.cpp | 49 ++++++++++++++++++ src/datavisualizationqml2/declarativescene_p.h | 60 ++++++++++++++++++++++ src/datavisualizationqml2/declarativeseries.cpp | 5 ++ src/datavisualizationqml2/declarativeseries_p.h | 19 +++++-- src/datavisualizationqml2/declarativesurface.cpp | 3 +- 12 files changed, 150 insertions(+), 14 deletions(-) create mode 100644 src/datavisualizationqml2/declarativescene.cpp create mode 100644 src/datavisualizationqml2/declarativescene_p.h (limited to 'src/datavisualizationqml2') diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 65f27da0..cb5b1e6a 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -18,6 +18,7 @@ #include "abstractdeclarative_p.h" #include "qvalue3daxis.h" + #include #include #include @@ -39,9 +40,9 @@ AbstractDeclarative::~AbstractDeclarative() { } -Q3DScene* AbstractDeclarative::scene() const +Declarative3DScene* AbstractDeclarative::scene() const { - return m_controller->scene(); + return static_cast(m_controller->scene()); } void AbstractDeclarative::setTheme(Q3DTheme *theme) diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index 5da22df3..b62090c1 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -32,6 +32,7 @@ #include "datavisualizationglobal_p.h" #include "abstract3dcontroller_p.h" #include "qabstract3dinputhandler.h" +#include "declarativescene_p.h" #include #include @@ -45,7 +46,7 @@ class AbstractDeclarative : public QQuickItem Q_OBJECT Q_PROPERTY(QtDataVisualization::QDataVis::SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged) Q_PROPERTY(QtDataVisualization::QDataVis::ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged) - Q_PROPERTY(Q3DScene* scene READ scene NOTIFY sceneChanged) + Q_PROPERTY(Declarative3DScene* scene READ scene NOTIFY sceneChanged) Q_PROPERTY(QAbstract3DInputHandler* inputHandler READ inputHandler WRITE setInputHandler NOTIFY inputHandlerChanged) Q_PROPERTY(Q3DTheme* theme READ theme WRITE setTheme NOTIFY themeChanged) Q_PROPERTY(bool clearWindowBeforeRendering READ clearWindowBeforeRendering WRITE setClearWindowBeforeRendering NOTIFY clearWindowBeforeRenderingChanged) @@ -60,7 +61,7 @@ public: virtual void setShadowQuality(QDataVis::ShadowQuality quality); virtual QDataVis::ShadowQuality shadowQuality() const; - virtual Q3DScene *scene() const; + virtual Declarative3DScene *scene() const; virtual QAbstract3DInputHandler *inputHandler() const; virtual void setInputHandler(QAbstract3DInputHandler *inputHandler); diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro index 989b52b9..7c456586 100644 --- a/src/datavisualizationqml2/datavisualizationqml2.pro +++ b/src/datavisualizationqml2/datavisualizationqml2.pro @@ -27,7 +27,8 @@ SOURCES += \ colorgradient.cpp \ declarativeseries.cpp \ declarativetheme.cpp \ - declarativecolor.cpp + declarativecolor.cpp \ + declarativescene.cpp HEADERS += \ datavisualizationqml2_plugin.h \ @@ -38,7 +39,8 @@ HEADERS += \ colorgradient_p.h \ declarativeseries_p.h \ declarativetheme_p.h \ - declarativecolor_p.h + declarativecolor_p.h \ + declarativescene_p.h OTHER_FILES = qmldir diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp index c49f4894..93aa2eea 100644 --- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp +++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp @@ -41,8 +41,8 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) QLatin1String("Trying to create uncreatable: SurfaceDataProxy.")); qmlRegisterUncreatableType(uri, 1, 0, "AbstractGraph3D", QLatin1String("Trying to create uncreatable: AbstractGraph3D.")); - qmlRegisterUncreatableType(uri, 1, 0, "Scene3D", - QLatin1String("Trying to create uncreatable: Scene3D.")); + qmlRegisterUncreatableType(uri, 1, 0, "Scene3D", + QLatin1String("Trying to create uncreatable: Scene3D.")); qmlRegisterUncreatableType(uri, 1, 0, "Abstract3DSeries", QLatin1String("Trying to create uncreatable: Abstract3DSeries.")); qmlRegisterUncreatableType(uri, 1, 0, "QBar3DSeries", diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h index 3e689aec..e01a39f4 100644 --- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h +++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.h @@ -42,6 +42,7 @@ #include "declarativetheme_p.h" #include "qabstract3dinputhandler.h" #include "declarativecolor_p.h" +#include "declarativescene_p.h" #include @@ -60,6 +61,7 @@ QML_DECLARE_TYPE(QCategory3DAxis) QML_DECLARE_TYPE(QValue3DAxis) QML_DECLARE_TYPE(Q3DScene) +QML_DECLARE_TYPE(Declarative3DScene) QML_DECLARE_TYPE(Q3DObject) QML_DECLARE_TYPE(Q3DCamera) QML_DECLARE_TYPE(Q3DLight) diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index a9e4503c..b1bd806d 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -19,6 +19,7 @@ #include "declarativebars_p.h" #include "qvalue3daxis.h" #include "qitemmodelbardataproxy.h" +#include "declarativescene_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE @@ -33,7 +34,7 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) setSmooth(true); // Create the shared component on the main GUI thread. - m_barsController = new Bars3DController(boundingRect().toRect()); + m_barsController = new Bars3DController(boundingRect().toRect(), new Declarative3DScene); AbstractDeclarative::setSharedController(m_barsController); // TODO: Uncomment when doing QTRD-2669 diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 3f7979b6..f7cbeaae 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -18,6 +18,7 @@ #include "declarativescatter_p.h" #include "qitemmodelscatterdataproxy.h" +#include "declarativescene_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE @@ -32,7 +33,7 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) setSmooth(true); // Create the shared component on the main GUI thread. - m_scatterController = new Scatter3DController(boundingRect().toRect()); + m_scatterController = new Scatter3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_scatterController); // TODO: Uncomment when doing QTRD-2669 diff --git a/src/datavisualizationqml2/declarativescene.cpp b/src/datavisualizationqml2/declarativescene.cpp new file mode 100644 index 00000000..b1fefa33 --- /dev/null +++ b/src/datavisualizationqml2/declarativescene.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +#include "declarativescene_p.h" + +QT_DATAVISUALIZATION_BEGIN_NAMESPACE + +Declarative3DScene::Declarative3DScene(QObject *parent) + : Q3DScene(parent) +{ + QObject::connect(this, &Q3DScene::selectionQueryPositionChanged, this, + &Declarative3DScene::selectionQueryPositionChanged); +} + +Declarative3DScene::~Declarative3DScene() +{ +} + +void Declarative3DScene::setSelectionQueryPosition(const QPointF &point) +{ + Q3DScene::setSelectionQueryPosition(point.toPoint()); +} + +QPointF Declarative3DScene::selectionQueryPosition() const +{ + return QPointF(Q3DScene::selectionQueryPosition()); +} + +QPoint Declarative3DScene::invalidSelectionPoint() const +{ + return Q3DScene::invalidSelectionPoint(); +} + +QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualizationqml2/declarativescene_p.h b/src/datavisualizationqml2/declarativescene_p.h new file mode 100644 index 00000000..4b6fef1c --- /dev/null +++ b/src/datavisualizationqml2/declarativescene_p.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2013 Digia Plc +** All rights reserved. +** For any questions to Digia, please use contact form at http://qt.digia.com +** +** This file is part of the QtDataVisualization module. +** +** Licensees holding valid Qt Enterprise licenses may use this file in +** accordance with the Qt Enterprise License Agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. +** +** If you have questions regarding the use of this file, please use +** contact form at http://qt.digia.com +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the QtDataVisualization API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. + +#ifndef DECLARATIVESCENE_P_H +#define DECLARATIVESCENE_P_H + +#include "datavisualizationglobal_p.h" +#include "q3dscene.h" + +QT_DATAVISUALIZATION_BEGIN_NAMESPACE + +class Declarative3DScene : public Q3DScene +{ + Q_OBJECT + // This property is overloaded to use QPointF instead of QPoint to work around qml bug + // where Qt.point(0, 0) can't be assigned due to error "Cannot assign QPointF to QPoint". + Q_PROPERTY(QPointF selectionQueryPosition READ selectionQueryPosition WRITE setSelectionQueryPosition NOTIFY selectionQueryPositionChanged) + // This is static method in parent class, overload as constant property for qml. + Q_PROPERTY(QPoint invalidSelectionPoint READ invalidSelectionPoint CONSTANT) + +public: + Declarative3DScene(QObject *parent = 0); + virtual ~Declarative3DScene(); + + void setSelectionQueryPosition(const QPointF &point); + QPointF selectionQueryPosition() const; + QPoint invalidSelectionPoint() const; + +signals: + void selectionQueryPositionChanged(const QPointF position); +}; + +QT_DATAVISUALIZATION_END_NAMESPACE + +#endif diff --git a/src/datavisualizationqml2/declarativeseries.cpp b/src/datavisualizationqml2/declarativeseries.cpp index 35f6e315..0cb8bdf5 100644 --- a/src/datavisualizationqml2/declarativeseries.cpp +++ b/src/datavisualizationqml2/declarativeseries.cpp @@ -235,6 +235,11 @@ ColorGradient *DeclarativeScatter3DSeries::multiHighlightGradient() const return m_multiHighlightGradient; } +int DeclarativeScatter3DSeries::invalidSelectionIndex() const +{ + return QScatter3DSeries::invalidSelectionIndex(); +} + void DeclarativeScatter3DSeries::handleBaseGradientUpdate() { if (m_baseGradient) diff --git a/src/datavisualizationqml2/declarativeseries_p.h b/src/datavisualizationqml2/declarativeseries_p.h index c9c3dc7a..8d191703 100644 --- a/src/datavisualizationqml2/declarativeseries_p.h +++ b/src/datavisualizationqml2/declarativeseries_p.h @@ -48,13 +48,16 @@ class DeclarativeBar3DSeries : public QBar3DSeries { Q_OBJECT Q_PROPERTY(QQmlListProperty seriesChildren READ seriesChildren) - // selectedBar property is overloaded to use QPointF instead of QPoint to work around qml bug + // This property is overloaded to use QPointF instead of QPoint to work around qml bug // where Qt.point(0, 0) can't be assigned due to error "Cannot assign QPointF to QPoint". Q_PROPERTY(QPointF selectedBar READ selectedBar WRITE setSelectedBar NOTIFY selectedBarChanged) + // This is static method in parent class, overload as constant property for qml. + Q_PROPERTY(QPointF invalidSelectionPosition READ invalidSelectionPosition CONSTANT) Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged) Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged) Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged) Q_CLASSINFO("DefaultProperty", "seriesChildren") + public: DeclarativeBar3DSeries(QObject *parent = 0); virtual ~DeclarativeBar3DSeries(); @@ -64,7 +67,7 @@ public: void setSelectedBar(const QPointF &position); QPointF selectedBar() const; - Q_INVOKABLE QPointF invalidSelectionPosition() const; + QPointF invalidSelectionPosition() const; void setBaseGradient(ColorGradient *gradient); ColorGradient *baseGradient() const; @@ -97,7 +100,10 @@ class DeclarativeScatter3DSeries : public QScatter3DSeries Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged) Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged) Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged) + // This is static method in parent class, overload as constant property for qml. + Q_PROPERTY(int invalidSelectionIndex READ invalidSelectionIndex CONSTANT) Q_CLASSINFO("DefaultProperty", "seriesChildren") + public: DeclarativeScatter3DSeries(QObject *parent = 0); virtual ~DeclarativeScatter3DSeries(); @@ -112,6 +118,8 @@ public: void setMultiHighlightGradient(ColorGradient *gradient); ColorGradient *multiHighlightGradient() const; + int invalidSelectionIndex() const; + public slots: void handleBaseGradientUpdate(); void handleSingleHighlightGradientUpdate(); @@ -132,18 +140,23 @@ class DeclarativeSurface3DSeries : public QSurface3DSeries { Q_OBJECT Q_PROPERTY(QQmlListProperty seriesChildren READ seriesChildren) + // This property is overloaded to use QPointF instead of QPoint to work around qml bug + // where Qt.point(0, 0) can't be assigned due to error "Cannot assign QPointF to QPoint". Q_PROPERTY(QPointF selectedPoint READ selectedPoint WRITE setSelectedPoint NOTIFY selectedPointChanged) + // This is static method in parent class, overload as constant property for qml. + Q_PROPERTY(QPointF invalidSelectionPosition READ invalidSelectionPosition CONSTANT) Q_PROPERTY(ColorGradient *baseGradient READ baseGradient WRITE setBaseGradient NOTIFY baseGradientChanged) Q_PROPERTY(ColorGradient *singleHighlightGradient READ singleHighlightGradient WRITE setSingleHighlightGradient NOTIFY singleHighlightGradientChanged) Q_PROPERTY(ColorGradient *multiHighlightGradient READ multiHighlightGradient WRITE setMultiHighlightGradient NOTIFY multiHighlightGradientChanged) Q_CLASSINFO("DefaultProperty", "seriesChildren") + public: DeclarativeSurface3DSeries(QObject *parent = 0); virtual ~DeclarativeSurface3DSeries(); void setSelectedPoint(const QPointF &position); QPointF selectedPoint() const; - Q_INVOKABLE QPointF invalidSelectionPosition() const; + QPointF invalidSelectionPosition() const; QQmlListProperty seriesChildren(); static void appendSeriesChildren(QQmlListProperty *list, QObject *element); diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index efbec825..d4b4083b 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -19,6 +19,7 @@ #include "declarativesurface_p.h" #include "qvalue3daxis.h" #include "qitemmodelsurfacedataproxy.h" +#include "declarativescene_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE @@ -33,7 +34,7 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) setSmooth(true); // Create the shared component on the main GUI thread. - m_surfaceController = new Surface3DController(boundingRect().toRect()); + m_surfaceController = new Surface3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_surfaceController); // TODO: Uncomment when doing QTRD-2669 -- cgit v1.2.3