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 --- examples/qmlbars/qml/qmlbars/main.qml | 2 +- src/datavisualization/data/qbar3dseries.cpp | 10 ++-- src/datavisualization/data/qbar3dseries.h | 2 +- src/datavisualization/data/qscatter3dseries.cpp | 10 ++-- src/datavisualization/data/qscatter3dseries.h | 3 +- src/datavisualization/data/qsurface3dseries.cpp | 10 ++-- src/datavisualization/data/qsurface3dseries.h | 2 +- .../engine/abstract3dcontroller.cpp | 7 ++- .../engine/abstract3dcontroller_p.h | 2 +- src/datavisualization/engine/bars3dcontroller.cpp | 4 +- src/datavisualization/engine/bars3dcontroller_p.h | 2 +- src/datavisualization/engine/q3dscene.cpp | 12 +++-- src/datavisualization/engine/q3dscene.h | 2 +- .../engine/scatter3dcontroller.cpp | 4 +- .../engine/scatter3dcontroller_p.h | 2 +- .../engine/surface3dcontroller.cpp | 4 +- .../engine/surface3dcontroller_p.h | 2 +- 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 +- 29 files changed, 194 insertions(+), 50 deletions(-) create mode 100644 src/datavisualizationqml2/declarativescene.cpp create mode 100644 src/datavisualizationqml2/declarativescene_p.h diff --git a/examples/qmlbars/qml/qmlbars/main.qml b/examples/qmlbars/qml/qmlbars/main.qml index 0581f834..d5f7fd34 100644 --- a/examples/qmlbars/qml/qmlbars/main.qml +++ b/examples/qmlbars/qml/qmlbars/main.qml @@ -43,7 +43,7 @@ Item { selectedSeries: barSeries function handleSelectionChange(series, position) { - if (position != series.invalidSelectionPosition()) { + if (position != series.invalidSelectionPosition) { selectedSeries = series } diff --git a/src/datavisualization/data/qbar3dseries.cpp b/src/datavisualization/data/qbar3dseries.cpp index 6f0973cc..fea0b359 100644 --- a/src/datavisualization/data/qbar3dseries.cpp +++ b/src/datavisualization/data/qbar3dseries.cpp @@ -93,16 +93,16 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * 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, set invalidSelectionPosition() as the \a position. + * 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. */ /*! - * \qmlmethod point Bar3DSeries::invalidSelectionPosition() - * \return an invalid position for selection. Set this position to selectedBar property if you - * want to clear the selection. + * \qmlproperty point Bar3DSeries::invalidSelectionPosition + * A constant property providing an invalid position for selection. Set this position to + * selectedBar property if you want to clear the selection. */ /*! @@ -185,7 +185,7 @@ 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 +QPoint QBar3DSeries::invalidSelectionPosition() { return Bars3DController::invalidSelectionPosition(); } diff --git a/src/datavisualization/data/qbar3dseries.h b/src/datavisualization/data/qbar3dseries.h index 5883cbfb..d4e948ad 100644 --- a/src/datavisualization/data/qbar3dseries.h +++ b/src/datavisualization/data/qbar3dseries.h @@ -43,7 +43,7 @@ public: void setSelectedBar(const QPoint &position); QPoint selectedBar() const; - QPoint invalidSelectionPosition() const; + static QPoint invalidSelectionPosition(); signals: void dataProxyChanged(QBarDataProxy *proxy); diff --git a/src/datavisualization/data/qscatter3dseries.cpp b/src/datavisualization/data/qscatter3dseries.cpp index 0e7ce921..5aa17ed3 100644 --- a/src/datavisualization/data/qscatter3dseries.cpp +++ b/src/datavisualization/data/qscatter3dseries.cpp @@ -88,7 +88,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * * 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. + * 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. @@ -103,9 +103,9 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE */ /*! - * \qmlmethod int Scatter3DSeries::invalidSelectionIndex() - * \return an invalid index for selection. Set this index to selectedItem property if you - * want to clear the selection. + * \qmlproperty int Scatter3DSeries::invalidSelectionIndex + * A constant property providing an invalid index for selection. Set this index to + * selectedItem property if you want to clear the selection. */ /*! @@ -209,7 +209,7 @@ float QScatter3DSeries::itemSize() const * \return an invalid index for selection. Set this index to selectedItem property if you * want to clear the selection. */ -int QScatter3DSeries::invalidSelectionIndex() const +int QScatter3DSeries::invalidSelectionIndex() { return Scatter3DController::invalidSelectionIndex(); } diff --git a/src/datavisualization/data/qscatter3dseries.h b/src/datavisualization/data/qscatter3dseries.h index 1d9abc11..758277c0 100644 --- a/src/datavisualization/data/qscatter3dseries.h +++ b/src/datavisualization/data/qscatter3dseries.h @@ -43,12 +43,11 @@ public: void setSelectedItem(int index); int selectedItem() const; + static int invalidSelectionIndex(); void setItemSize(float size); float itemSize() const; - Q_INVOKABLE int invalidSelectionIndex() const; - signals: void dataProxyChanged(QScatterDataProxy *proxy); void selectedItemChanged(int index); diff --git a/src/datavisualization/data/qsurface3dseries.cpp b/src/datavisualization/data/qsurface3dseries.cpp index da285b2d..25405959 100644 --- a/src/datavisualization/data/qsurface3dseries.cpp +++ b/src/datavisualization/data/qsurface3dseries.cpp @@ -92,15 +92,15 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * Selects a surface grid point in a \a position. The position is the (row, column) position in * the data array of the series. * Only one point can be selected at a time. - * To clear selection, set invalidSelectionPosition() as the \a position. + * 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. */ /*! - * \qmlmethod point Surface3DSeries::invalidSelectionPosition() - * \return a point signifying an invalid selection position. Set this to selectedPoint property - * to clear the selection. + * \qmlproperty point Surface3DSeries::invalidSelectionPosition + * A constant property providing an invalid selection position. + * Set this to selectedPoint property to clear the selection. */ /*! @@ -221,7 +221,7 @@ QPoint QSurface3DSeries::selectedPoint() const * \return a QPoint signifying an invalid selection position. Set this to selectedPoint property * to clear the selection. */ -QPoint QSurface3DSeries::invalidSelectionPosition() const +QPoint QSurface3DSeries::invalidSelectionPosition() { return Surface3DController::invalidSelectionPosition(); } diff --git a/src/datavisualization/data/qsurface3dseries.h b/src/datavisualization/data/qsurface3dseries.h index 6681495b..0ddd53da 100644 --- a/src/datavisualization/data/qsurface3dseries.h +++ b/src/datavisualization/data/qsurface3dseries.h @@ -53,7 +53,7 @@ public: void setSelectedPoint(const QPoint &position); QPoint selectedPoint() const; - QPoint invalidSelectionPosition() const; + static QPoint invalidSelectionPosition(); void setFlatShadingEnabled(bool enabled); bool isFlatShadingEnabled() const; diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index 09c75ceb..da2e2a14 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -35,12 +35,12 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE -Abstract3DController::Abstract3DController(QRect initialViewport, QObject *parent) : +Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scene, QObject *parent) : QObject(parent), m_themeManager(new ThemeManager(this)), m_selectionMode(QDataVis::SelectionItem), m_shadowQuality(QDataVis::ShadowQualityMedium), - m_scene(new Q3DScene()), + m_scene(scene), m_activeInputHandler(0), m_axisX(0), m_axisY(0), @@ -51,6 +51,9 @@ Abstract3DController::Abstract3DController(QRect initialViewport, QObject *paren m_isSeriesVisualsDirty(true), m_renderPending(false) { + if (!m_scene) + m_scene = new Q3DScene; + // Set initial theme setActiveTheme(new Q3DTheme(Q3DTheme::ThemeQt)); diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h index 91083eb9..9c24844f 100644 --- a/src/datavisualization/engine/abstract3dcontroller_p.h +++ b/src/datavisualization/engine/abstract3dcontroller_p.h @@ -158,7 +158,7 @@ protected: QList m_seriesList; - explicit Abstract3DController(QRect initialViewport, QObject *parent = 0); + explicit Abstract3DController(QRect initialViewport, Q3DScene *scene, QObject *parent = 0); public: virtual ~Abstract3DController(); diff --git a/src/datavisualization/engine/bars3dcontroller.cpp b/src/datavisualization/engine/bars3dcontroller.cpp index 3efd890b..c765a37a 100644 --- a/src/datavisualization/engine/bars3dcontroller.cpp +++ b/src/datavisualization/engine/bars3dcontroller.cpp @@ -32,8 +32,8 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE -Bars3DController::Bars3DController(QRect boundRect) - : Abstract3DController(boundRect), +Bars3DController::Bars3DController(QRect boundRect, Q3DScene *scene) + : Abstract3DController(boundRect, scene), m_selectedBar(invalidSelectionPosition()), m_selectedBarSeries(0), m_isBarSpecRelative(true), diff --git a/src/datavisualization/engine/bars3dcontroller_p.h b/src/datavisualization/engine/bars3dcontroller_p.h index 46fc991d..3fcae959 100644 --- a/src/datavisualization/engine/bars3dcontroller_p.h +++ b/src/datavisualization/engine/bars3dcontroller_p.h @@ -73,7 +73,7 @@ private: Bars3DRenderer *m_renderer; public: - explicit Bars3DController(QRect rect); + explicit Bars3DController(QRect rect, Q3DScene *scene = 0); ~Bars3DController(); virtual void initializeOpenGL(); diff --git a/src/datavisualization/engine/q3dscene.cpp b/src/datavisualization/engine/q3dscene.cpp index d8104b3a..ce037b55 100644 --- a/src/datavisualization/engine/q3dscene.cpp +++ b/src/datavisualization/engine/q3dscene.cpp @@ -90,9 +90,9 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * \qmlproperty point Scene3D::selectionQueryPosition * * This property contains the coordinates for the user input that should be processed - * by the scene as selection. If this is set to value other than \c{(-1, -1)} the + * by the scene as selection. If this is set to value other than invalidSelectionPoint the * graph tries to select a data item at the given point within the primary viewport. - * After the rendering pass the property is returned to its default state of \c{(-1, -1)}. + * After the rendering pass the property is returned to its default state of invalidSelectionPoint. */ /*! @@ -130,6 +130,12 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE * coordinates to pixel coordinates. */ +/*! + * \qmlproperty point Scene3D::invalidSelectionPoint + * A constant property providing an invalid point for selection. + */ + + /*! * Constructs a basic scene with one light and one camera in it. An * optional \a parent parameter can be given and is then passed to QObject constructor. @@ -272,7 +278,7 @@ QPoint Q3DScene::selectionQueryPosition() const /*! * \return a QPoint signifying an invalid selection position. */ -const QPoint Q3DScene::invalidSelectionPoint() +QPoint Q3DScene::invalidSelectionPoint() { static const QPoint invalidSelectionPos(-1, -1); return invalidSelectionPos; diff --git a/src/datavisualization/engine/q3dscene.h b/src/datavisualization/engine/q3dscene.h index 27e09ab0..f57d3351 100644 --- a/src/datavisualization/engine/q3dscene.h +++ b/src/datavisualization/engine/q3dscene.h @@ -59,7 +59,7 @@ public: void setSelectionQueryPosition(const QPoint &point); QPoint selectionQueryPosition() const; - static const QPoint invalidSelectionPoint(); + static QPoint invalidSelectionPoint(); void setSlicingActive(bool isSlicing); bool isSlicingActive() const; diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp index 61a95e88..58706705 100644 --- a/src/datavisualization/engine/scatter3dcontroller.cpp +++ b/src/datavisualization/engine/scatter3dcontroller.cpp @@ -29,8 +29,8 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE -Scatter3DController::Scatter3DController(QRect boundRect) - : Abstract3DController(boundRect), +Scatter3DController::Scatter3DController(QRect boundRect, Q3DScene *scene) + : Abstract3DController(boundRect, scene), m_renderer(0), m_selectedItem(invalidSelectionIndex()), m_selectedItemSeries(0) diff --git a/src/datavisualization/engine/scatter3dcontroller_p.h b/src/datavisualization/engine/scatter3dcontroller_p.h index 397d47a4..d484454d 100644 --- a/src/datavisualization/engine/scatter3dcontroller_p.h +++ b/src/datavisualization/engine/scatter3dcontroller_p.h @@ -63,7 +63,7 @@ private: // in single series selection cases. public: - explicit Scatter3DController(QRect rect); + explicit Scatter3DController(QRect rect, Q3DScene *scene = 0); ~Scatter3DController(); virtual void initializeOpenGL(); diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp index 6082e105..7c7b7a90 100644 --- a/src/datavisualization/engine/surface3dcontroller.cpp +++ b/src/datavisualization/engine/surface3dcontroller.cpp @@ -32,8 +32,8 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE -Surface3DController::Surface3DController(QRect rect) - : Abstract3DController(rect), +Surface3DController::Surface3DController(QRect rect, Q3DScene *scene) + : Abstract3DController(rect, scene), m_renderer(0), m_selectedPoint(invalidSelectionPosition()), m_selectedSeries(0), diff --git a/src/datavisualization/engine/surface3dcontroller_p.h b/src/datavisualization/engine/surface3dcontroller_p.h index 54d709b4..915a3122 100644 --- a/src/datavisualization/engine/surface3dcontroller_p.h +++ b/src/datavisualization/engine/surface3dcontroller_p.h @@ -70,7 +70,7 @@ private: QVector m_changedRows; public: - explicit Surface3DController(QRect rect); + explicit Surface3DController(QRect rect, Q3DScene *scene = 0); ~Surface3DController(); virtual void initializeOpenGL(); 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