From 450dc3e6d74ffe93a761a5e2491458935ecac7b7 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 9 Jan 2014 09:55:52 +0200 Subject: Make active axes properties in C++ Also provide axis changed signals both C++ and QML. Some other minor fixes, too. Task-number: QTRD-2669 Change-Id: Ib797bffd6720382cf26359a9059e1809efdf58da Reviewed-by: Mika Salmela --- .../doc/src/qtdatavisualization-qml-bars3d.qdoc | 6 +-- .../doc/src/qtdatavisualization-qml-scatter3d.qdoc | 6 +-- .../doc/src/qtdatavisualization-qml-surface3d.qdoc | 6 +-- .../engine/abstract3dcontroller.cpp | 18 +++++-- .../engine/abstract3dcontroller_p.h | 3 ++ src/datavisualization/engine/q3dbars.cpp | 36 +++++++++----- src/datavisualization/engine/q3dbars.h | 6 +++ src/datavisualization/engine/q3dbars_p.h | 4 ++ src/datavisualization/engine/q3dscatter.cpp | 33 +++++++++---- src/datavisualization/engine/q3dscatter.h | 9 ++++ src/datavisualization/engine/q3dscatter_p.h | 4 ++ src/datavisualization/engine/q3dsurface.cpp | 27 ++++++++-- src/datavisualization/engine/q3dsurface.h | 9 ++++ src/datavisualization/engine/q3dsurface_p.h | 4 ++ src/datavisualization/engine/qabstract3dgraph.cpp | 57 ++++++++++++---------- src/datavisualization/engine/qabstract3dgraph_p.h | 9 +++- src/datavisualizationqml2/abstractdeclarative.cpp | 7 +++ src/datavisualizationqml2/abstractdeclarative_p.h | 5 ++ src/datavisualizationqml2/declarativebars.cpp | 27 +++++----- src/datavisualizationqml2/declarativebars_p.h | 5 ++ src/datavisualizationqml2/declarativescatter.cpp | 27 +++++----- src/datavisualizationqml2/declarativescatter_p.h | 5 ++ src/datavisualizationqml2/declarativesurface.cpp | 27 +++++----- src/datavisualizationqml2/declarativesurface_p.h | 5 ++ tests/barstest/chart.cpp | 21 ++++++++ tests/barstest/chart.h | 4 ++ tests/multigraphs/data.cpp | 2 + tests/qmlmultigraph/qml/qmlmultigraph/main.qml | 48 ++++++++++++++++++ tests/scattertest/scatterchart.cpp | 22 +++++++++ tests/scattertest/scatterchart.h | 4 ++ tests/surfacetest/graphmodifier.cpp | 22 +++++++++ tests/surfacetest/graphmodifier.h | 4 ++ 32 files changed, 373 insertions(+), 99 deletions(-) diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc index edeb5530..7bd30867 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-bars3d.qdoc @@ -46,7 +46,7 @@ /*! * \qmlproperty CategoryAxis3D Bars3D::rowAxis - * A user-defined row axis. + * The active row axis. * * If an axis is not given, a temporary default axis with no labels is created. * This temporary axis is destroyed if another axis is explicitly set to same orientation. @@ -54,7 +54,7 @@ /*! * \qmlproperty ValueAxis3D Bars3D::valueAxis - * A user-defined value axis. + * The active value axis. * * If an axis is not given, a temporary default axis with no labels and automatically adjusting * range is created. @@ -63,7 +63,7 @@ /*! * \qmlproperty CategoryAxis3D Bars3D::columnAxis - * A user-defined column axis. + * The active column axis. * * If an axis is not given, a temporary default axis with no labels is created. * This temporary axis is destroyed if another axis is explicitly set to same orientation. diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc index 0a8e1674..6d113654 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-scatter3d.qdoc @@ -46,7 +46,7 @@ /*! \qmlproperty ValueAxis3D Scatter3D::axisX - A user-defined X axis. + The active X axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. @@ -55,7 +55,7 @@ /*! \qmlproperty ValueAxis3D Scatter3D::axisY - A user-defined Y axis. + The active Y axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. @@ -64,7 +64,7 @@ /*! \qmlproperty ValueAxis3D Scatter3D::axisZ - A user-defined Z axis. + The active Z axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. diff --git a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc index b28d30a7..d2a3a71b 100644 --- a/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc +++ b/src/datavisualization/doc/src/qtdatavisualization-qml-surface3d.qdoc @@ -46,7 +46,7 @@ /*! \qmlproperty ValueAxis3D Surface3D::axisX - A user-defined X axis. + The active X axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. @@ -55,7 +55,7 @@ /*! \qmlproperty ValueAxis3D Surface3D::axisY - A user-defined Y axis. + The active Y axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. @@ -64,7 +64,7 @@ /*! \qmlproperty ValueAxis3D Surface3D::axisZ - A user-defined Z axis. + The active Z axis. If an axis is not given, a temporary default axis with no labels and automatically adjusting range is created. diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp index 43d7a6d5..14585679 100644 --- a/src/datavisualization/engine/abstract3dcontroller.cpp +++ b/src/datavisualization/engine/abstract3dcontroller.cpp @@ -464,7 +464,11 @@ void Abstract3DController::handleThemeTypeChanged(Q3DTheme::Theme theme) void Abstract3DController::setAxisX(QAbstract3DAxis *axis) { - setAxisHelper(QAbstract3DAxis::AxisOrientationX, axis, &m_axisX); + // Setting null axis will always create new default axis + if (!axis || axis != m_axisX) { + setAxisHelper(QAbstract3DAxis::AxisOrientationX, axis, &m_axisX); + emit axisXChanged(m_axisX); + } } QAbstract3DAxis *Abstract3DController::axisX() @@ -474,7 +478,11 @@ QAbstract3DAxis *Abstract3DController::axisX() void Abstract3DController::setAxisY(QAbstract3DAxis *axis) { - setAxisHelper(QAbstract3DAxis::AxisOrientationY, axis, &m_axisY); + // Setting null axis will always create new default axis + if (!axis || axis != m_axisY) { + setAxisHelper(QAbstract3DAxis::AxisOrientationY, axis, &m_axisY); + emit axisYChanged(m_axisY); + } } QAbstract3DAxis *Abstract3DController::axisY() @@ -484,7 +492,11 @@ QAbstract3DAxis *Abstract3DController::axisY() void Abstract3DController::setAxisZ(QAbstract3DAxis *axis) { - setAxisHelper(QAbstract3DAxis::AxisOrientationZ, axis, &m_axisZ); + // Setting null axis will always create new default axis + if (!axis || axis != m_axisZ) { + setAxisHelper(QAbstract3DAxis::AxisOrientationZ, axis, &m_axisZ); + emit axisZChanged(m_axisZ); + } } QAbstract3DAxis *Abstract3DController::axisZ() diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h index 1e64d05a..0f951e5a 100644 --- a/src/datavisualization/engine/abstract3dcontroller_p.h +++ b/src/datavisualization/engine/abstract3dcontroller_p.h @@ -261,6 +261,9 @@ signals: void activeThemeChanged(Q3DTheme *activeTheme); void selectionModeChanged(QDataVis::SelectionFlags mode); void needRender(); + void axisXChanged(QAbstract3DAxis *axis); + void axisYChanged(QAbstract3DAxis *axis); + void axisZChanged(QAbstract3DAxis *axis); protected: virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation); diff --git a/src/datavisualization/engine/q3dbars.cpp b/src/datavisualization/engine/q3dbars.cpp index d9e265a1..51ba8dbf 100644 --- a/src/datavisualization/engine/q3dbars.cpp +++ b/src/datavisualization/engine/q3dbars.cpp @@ -200,7 +200,9 @@ bool Q3DBars::isBarSpacingRelative() } /*! - * Sets a user-defined row \a axis. Implicitly calls addAxis() to transfer ownership of + * \property Q3DBars::rowAxis + * + * The active row \a axis. Implicitly calls addAxis() to transfer ownership of * the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels is created. @@ -213,16 +215,15 @@ void Q3DBars::setRowAxis(QCategory3DAxis *axis) dptr()->m_shared->setAxisZ(axis); } -/*! - * \return category axis for rows. - */ QCategory3DAxis *Q3DBars::rowAxis() const { return static_cast(dptrc()->m_shared->axisZ()); } /*! - * Sets a user-defined column \a axis. Implicitly calls addAxis() to transfer ownership of + * \property Q3DBars::columnAxis + * + * The active column \a axis. Implicitly calls addAxis() to transfer ownership of * the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels is created. @@ -235,16 +236,15 @@ void Q3DBars::setColumnAxis(QCategory3DAxis *axis) dptr()->m_shared->setAxisX(axis); } -/*! - * \return category axis for columns. - */ QCategory3DAxis *Q3DBars::columnAxis() const { return static_cast(dptrc()->m_shared->axisX()); } /*! - * Sets a user-defined value \a axis (the Y-axis). Implicitly calls addAxis() to transfer ownership + * \property Q3DBars::valueAxis + * + * The active value \a axis (the Y-axis). Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -258,9 +258,6 @@ void Q3DBars::setValueAxis(QValue3DAxis *axis) dptr()->m_shared->setAxisY(axis); } -/*! - * \return used value axis (Y-axis). - */ QValue3DAxis *Q3DBars::valueAxis() const { return static_cast(dptrc()->m_shared->axisY()); @@ -320,6 +317,21 @@ Q3DBarsPrivate::~Q3DBarsPrivate() { } +void Q3DBarsPrivate::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit qptr()->columnAxisChanged(static_cast(axis)); +} + +void Q3DBarsPrivate::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit qptr()->valueAxisChanged(static_cast(axis)); +} + +void Q3DBarsPrivate::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit qptr()->rowAxisChanged(static_cast(axis)); +} + Q3DBars *Q3DBarsPrivate::qptr() { return static_cast(q_ptr); diff --git a/src/datavisualization/engine/q3dbars.h b/src/datavisualization/engine/q3dbars.h index 80cd1ba4..16c16e93 100644 --- a/src/datavisualization/engine/q3dbars.h +++ b/src/datavisualization/engine/q3dbars.h @@ -38,6 +38,9 @@ class QT_DATAVISUALIZATION_EXPORT Q3DBars : public QAbstract3DGraph Q_PROPERTY(float barThickness READ barThickness WRITE setBarThickness NOTIFY barThicknessChanged) Q_PROPERTY(QSizeF barSpacing READ barSpacing WRITE setBarSpacing NOTIFY barSpacingChanged) Q_PROPERTY(bool barSpacingRelative READ isBarSpacingRelative WRITE setBarSpacingRelative NOTIFY barSpacingRelativeChanged) + Q_PROPERTY(QCategory3DAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged) + Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged) + Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged) public: explicit Q3DBars(QWindow *parent = 0); @@ -70,6 +73,9 @@ signals: void barThicknessChanged(float thicknessRatio); void barSpacingChanged(QSizeF spacing); void barSpacingRelativeChanged(bool relative); + void rowAxisChanged(QCategory3DAxis *axis); + void columnAxisChanged(QCategory3DAxis *axis); + void valueAxisChanged(QValue3DAxis *axis); private: Q3DBarsPrivate *dptr(); diff --git a/src/datavisualization/engine/q3dbars_p.h b/src/datavisualization/engine/q3dbars_p.h index 6bb90b40..37ae3d70 100644 --- a/src/datavisualization/engine/q3dbars_p.h +++ b/src/datavisualization/engine/q3dbars_p.h @@ -44,6 +44,10 @@ public: Q3DBarsPrivate(Q3DBars *q); ~Q3DBarsPrivate(); + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + Q3DBars *qptr(); Bars3DController *m_shared; diff --git a/src/datavisualization/engine/q3dscatter.cpp b/src/datavisualization/engine/q3dscatter.cpp index c71ce795..9f4f1af8 100644 --- a/src/datavisualization/engine/q3dscatter.cpp +++ b/src/datavisualization/engine/q3dscatter.cpp @@ -132,7 +132,9 @@ const Q3DScatterPrivate *Q3DScatter::dptrc() const } /*! - * Sets a user-defined X-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DScatter::axisX + * + * The active X-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -146,16 +148,15 @@ void Q3DScatter::setAxisX(QValue3DAxis *axis) dptr()->m_shared->setAxisX(axis); } -/*! - * \return used X-axis. - */ QValue3DAxis *Q3DScatter::axisX() const { return static_cast(dptrc()->m_shared->axisX()); } /*! - * Sets a user-defined Y-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DScatter::axisY + * + * The active Y-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -169,16 +170,15 @@ void Q3DScatter::setAxisY(QValue3DAxis *axis) dptr()->m_shared->setAxisY(axis); } -/*! - * \return used Y-axis. - */ QValue3DAxis *Q3DScatter::axisY() const { return static_cast(dptrc()->m_shared->axisY()); } /*! - * Sets a user-defined Z-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DScatter::axisZ + * + * The active Z-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -249,6 +249,21 @@ Q3DScatterPrivate::~Q3DScatterPrivate() { } +void Q3DScatterPrivate::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisXChanged(static_cast(axis)); +} + +void Q3DScatterPrivate::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisYChanged(static_cast(axis)); +} + +void Q3DScatterPrivate::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisZChanged(static_cast(axis)); +} + Q3DScatter *Q3DScatterPrivate::qptr() { return static_cast(q_ptr); diff --git a/src/datavisualization/engine/q3dscatter.h b/src/datavisualization/engine/q3dscatter.h index 8a94864e..cdea32fd 100644 --- a/src/datavisualization/engine/q3dscatter.h +++ b/src/datavisualization/engine/q3dscatter.h @@ -35,6 +35,10 @@ class QScatter3DSeries; class QT_DATAVISUALIZATION_EXPORT Q3DScatter : public QAbstract3DGraph { Q_OBJECT + 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) + public: explicit Q3DScatter(QWindow *parent = 0); virtual ~Q3DScatter(); @@ -53,6 +57,11 @@ public: void releaseAxis(QValue3DAxis *axis); QList axes() const; +signals: + void axisXChanged(QValue3DAxis *axis); + void axisYChanged(QValue3DAxis *axis); + void axisZChanged(QValue3DAxis *axis); + private: Q3DScatterPrivate *dptr(); const Q3DScatterPrivate *dptrc() const; diff --git a/src/datavisualization/engine/q3dscatter_p.h b/src/datavisualization/engine/q3dscatter_p.h index e8140c04..ab547e52 100644 --- a/src/datavisualization/engine/q3dscatter_p.h +++ b/src/datavisualization/engine/q3dscatter_p.h @@ -44,6 +44,10 @@ public: Q3DScatterPrivate(Q3DScatter *q); ~Q3DScatterPrivate(); + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + Q3DScatter *qptr(); Scatter3DController *m_shared; diff --git a/src/datavisualization/engine/q3dsurface.cpp b/src/datavisualization/engine/q3dsurface.cpp index 0b09aba4..ad236220 100644 --- a/src/datavisualization/engine/q3dsurface.cpp +++ b/src/datavisualization/engine/q3dsurface.cpp @@ -147,7 +147,9 @@ const Q3DSurfacePrivate *Q3DSurface::dptrc() const } /*! - * Sets a user-defined X-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DSurface::axisX + * + * The active X-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -170,7 +172,9 @@ QValue3DAxis *Q3DSurface::axisX() const } /*! - * Sets a user-defined Y-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DSurface::axisY + * + * The active Y-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -193,7 +197,9 @@ QValue3DAxis *Q3DSurface::axisY() const } /*! - * Sets a user-defined Z-axis. Implicitly calls addAxis() to transfer ownership + * \property Q3DSurface::axisZ + * + * The active Z-axis. Implicitly calls addAxis() to transfer ownership * of the \a axis to this graph. * * If the \a axis is null, a temporary default axis with no labels and automatically adjusting @@ -266,6 +272,21 @@ Q3DSurfacePrivate::~Q3DSurfacePrivate() { } +void Q3DSurfacePrivate::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisXChanged(static_cast(axis)); +} + +void Q3DSurfacePrivate::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisYChanged(static_cast(axis)); +} + +void Q3DSurfacePrivate::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit qptr()->axisZChanged(static_cast(axis)); +} + Q3DSurface *Q3DSurfacePrivate::qptr() { return static_cast(q_ptr); diff --git a/src/datavisualization/engine/q3dsurface.h b/src/datavisualization/engine/q3dsurface.h index 4d6bcf5e..fd09e600 100644 --- a/src/datavisualization/engine/q3dsurface.h +++ b/src/datavisualization/engine/q3dsurface.h @@ -33,6 +33,10 @@ class QSurface3DSeries; class QT_DATAVISUALIZATION_EXPORT Q3DSurface : public QAbstract3DGraph { Q_OBJECT + 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) + public: explicit Q3DSurface(QWindow *parent = 0); virtual ~Q3DSurface(); @@ -52,6 +56,11 @@ public: void releaseAxis(QValue3DAxis *axis); QList axes() const; +signals: + void axisXChanged(QValue3DAxis *axis); + void axisYChanged(QValue3DAxis *axis); + void axisZChanged(QValue3DAxis *axis); + private: Q3DSurfacePrivate *dptr(); const Q3DSurfacePrivate *dptrc() const; diff --git a/src/datavisualization/engine/q3dsurface_p.h b/src/datavisualization/engine/q3dsurface_p.h index b1284453..0cbb6997 100644 --- a/src/datavisualization/engine/q3dsurface_p.h +++ b/src/datavisualization/engine/q3dsurface_p.h @@ -46,6 +46,10 @@ public: Q3DSurfacePrivate(Q3DSurface *q); ~Q3DSurfacePrivate(); + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + Q3DSurface *qptr(); Surface3DController *m_shared; diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp index 3a7fc84b..f17319d5 100644 --- a/src/datavisualization/engine/qabstract3dgraph.cpp +++ b/src/datavisualization/engine/qabstract3dgraph.cpp @@ -367,6 +367,38 @@ QAbstract3DGraphPrivate::~QAbstract3DGraphPrivate() delete m_visualController; } +void QAbstract3DGraphPrivate::setVisualController(Abstract3DController *controller) +{ + m_visualController = controller; + + QObject::connect(m_visualController, &Abstract3DController::activeInputHandlerChanged, q_ptr, + &QAbstract3DGraph::activeInputHandlerChanged); + QObject::connect(m_visualController, &Abstract3DController::activeThemeChanged, q_ptr, + &QAbstract3DGraph::activeThemeChanged); + QObject::connect(m_visualController, &Abstract3DController::selectionModeChanged, q_ptr, + &QAbstract3DGraph::selectionModeChanged); + QObject::connect(m_visualController, &Abstract3DController::shadowQualityChanged, q_ptr, + &QAbstract3DGraph::shadowQualityChanged); + QObject::connect(m_visualController, &Abstract3DController::needRender, this, + &QAbstract3DGraphPrivate::renderLater); + + QObject::connect(m_visualController, &Abstract3DController::axisXChanged, this, + &QAbstract3DGraphPrivate::handleAxisXChanged); + QObject::connect(m_visualController, &Abstract3DController::axisYChanged, this, + &QAbstract3DGraphPrivate::handleAxisYChanged); + QObject::connect(m_visualController, &Abstract3DController::axisZChanged, this, + &QAbstract3DGraphPrivate::handleAxisZChanged); +} + +void QAbstract3DGraphPrivate::handleDevicePixelRatioChange() +{ + if (q_ptr->devicePixelRatio() == m_devicePixelRatio || !m_visualController) + return; + + m_devicePixelRatio = q_ptr->devicePixelRatio(); + m_visualController->scene()->setDevicePixelRatio(m_devicePixelRatio); +} + void QAbstract3DGraphPrivate::render() { handleDevicePixelRatioChange(); @@ -396,29 +428,4 @@ void QAbstract3DGraphPrivate::renderNow() m_context->swapBuffers(q_ptr); } -void QAbstract3DGraphPrivate::setVisualController(Abstract3DController *controller) -{ - m_visualController = controller; - - QObject::connect(m_visualController, &Abstract3DController::activeInputHandlerChanged, q_ptr, - &QAbstract3DGraph::activeInputHandlerChanged); - QObject::connect(m_visualController, &Abstract3DController::activeThemeChanged, q_ptr, - &QAbstract3DGraph::activeThemeChanged); - QObject::connect(m_visualController, &Abstract3DController::selectionModeChanged, q_ptr, - &QAbstract3DGraph::selectionModeChanged); - QObject::connect(m_visualController, &Abstract3DController::shadowQualityChanged, q_ptr, - &QAbstract3DGraph::shadowQualityChanged); - QObject::connect(m_visualController, &Abstract3DController::needRender, this, - &QAbstract3DGraphPrivate::renderLater); -} - -void QAbstract3DGraphPrivate::handleDevicePixelRatioChange() -{ - if (q_ptr->devicePixelRatio() == m_devicePixelRatio || !m_visualController) - return; - - m_devicePixelRatio = q_ptr->devicePixelRatio(); - m_visualController->scene()->setDevicePixelRatio(m_devicePixelRatio); -} - QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualization/engine/qabstract3dgraph_p.h b/src/datavisualization/engine/qabstract3dgraph_p.h index 18e88c92..e1ccab92 100644 --- a/src/datavisualization/engine/qabstract3dgraph_p.h +++ b/src/datavisualization/engine/qabstract3dgraph_p.h @@ -40,6 +40,7 @@ QT_DATAVISUALIZATION_BEGIN_NAMESPACE class QAbstract3DGraph; class Abstract3DController; +class QAbstract3DAxis; class QAbstract3DGraphPrivate : public QObject { @@ -48,15 +49,19 @@ public: QAbstract3DGraphPrivate(QAbstract3DGraph *q); ~QAbstract3DGraphPrivate(); - void render(); - void setVisualController(Abstract3DController *controller); void handleDevicePixelRatioChange(); + void render(); + public slots: void renderLater(); void renderNow(); + virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0; + virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0; + virtual void handleAxisZChanged(QAbstract3DAxis *axis) = 0; + public: QAbstract3DGraph *q_ptr; diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index cb5b1e6a..19b3df32 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -100,6 +100,13 @@ void AbstractDeclarative::setSharedController(Abstract3DController *controller) &AbstractDeclarative::themeChanged); QObject::connect(m_controller, &Abstract3DController::selectionModeChanged, this, &AbstractDeclarative::selectionModeChanged); + + QObject::connect(m_controller, &Abstract3DController::axisXChanged, this, + &AbstractDeclarative::handleAxisXChanged); + QObject::connect(m_controller, &Abstract3DController::axisYChanged, this, + &AbstractDeclarative::handleAxisYChanged); + QObject::connect(m_controller, &Abstract3DController::axisZChanged, this, + &AbstractDeclarative::handleAxisZChanged); } void AbstractDeclarative::synchDataToRenderer() diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index b62090c1..1f16f44d 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -79,6 +79,11 @@ public: void synchDataToRenderer(); void render(); +public slots: + virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0; + virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0; + virtual void handleAxisZChanged(QAbstract3DAxis *axis) = 0; + protected: virtual void mouseDoubleClickEvent(QMouseEvent *event); virtual void touchEvent(QTouchEvent *event); diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index b1bd806d..3f40ffc2 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -29,21 +29,9 @@ DeclarativeBars::DeclarativeBars(QQuickItem *parent) { setAcceptedMouseButtons(Qt::AllButtons); - // TODO: These seem to have no effect; find a way to activate anti-aliasing - setAntialiasing(true); - setSmooth(true); - // Create the shared component on the main GUI thread. m_barsController = new Bars3DController(boundingRect().toRect(), new Declarative3DScene); AbstractDeclarative::setSharedController(m_barsController); - - // TODO: Uncomment when doing QTRD-2669 -// connect(m_barsController, &Bars3DController::rowAxisChanged, -// this, &DeclarativeBars::rowAxisChanged); -// connect(m_barsController, &Bars3DController::valueAxisChanged, -// this, &DeclarativeBars::valueAxisChanged); -// connect(m_barsController, &Bars3DController::columnAxisChanged, -// this, &DeclarativeBars::columnAxisChanged); } DeclarativeBars::~DeclarativeBars() @@ -164,4 +152,19 @@ void DeclarativeBars::removeSeries(QBar3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } +void DeclarativeBars::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit columnAxisChanged(static_cast(axis)); +} + +void DeclarativeBars::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit valueAxisChanged(static_cast(axis)); +} + +void DeclarativeBars::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit rowAxisChanged(static_cast(axis)); +} + QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h index 3d748bce..2c6a51f5 100644 --- a/src/datavisualizationqml2/declarativebars_p.h +++ b/src/datavisualizationqml2/declarativebars_p.h @@ -85,6 +85,11 @@ public: Q_INVOKABLE void addSeries(QBar3DSeries *series); Q_INVOKABLE void removeSeries(QBar3DSeries *series); +public slots: + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + signals: void rowAxisChanged(QCategory3DAxis *axis); void valueAxisChanged(QValue3DAxis *axis); diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index f7cbeaae..9b118db3 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -28,21 +28,9 @@ DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) { setAcceptedMouseButtons(Qt::AllButtons); - // TODO: These seem to have no effect; find a way to activate anti-aliasing - setAntialiasing(true); - setSmooth(true); - // Create the shared component on the main GUI thread. m_scatterController = new Scatter3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_scatterController); - - // TODO: Uncomment when doing QTRD-2669 -// connect(m_scatterController, &Scatter3DController::axisXChanged, -// this, &DeclarativeBars::axisXChanged); -// connect(m_scatterController, &Scatter3DController::axisYChanged, -// this, &DeclarativeBars::axisYChanged); -// connect(m_scatterController, &Scatter3DController::axisZChanged, -// this, &DeclarativeBars::axisZChanged); } DeclarativeScatter::~DeclarativeScatter() @@ -124,4 +112,19 @@ void DeclarativeScatter::removeSeries(QScatter3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } +void DeclarativeScatter::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit axisXChanged(static_cast(axis)); +} + +void DeclarativeScatter::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit axisYChanged(static_cast(axis)); +} + +void DeclarativeScatter::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit axisZChanged(static_cast(axis)); +} + QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h index 4ccf7d05..e1e3678c 100644 --- a/src/datavisualizationqml2/declarativescatter_p.h +++ b/src/datavisualizationqml2/declarativescatter_p.h @@ -71,6 +71,11 @@ public: Q_INVOKABLE void addSeries(QScatter3DSeries *series); Q_INVOKABLE void removeSeries(QScatter3DSeries *series); +public slots: + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index d4b4083b..ceb733e2 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -29,21 +29,9 @@ DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) { setAcceptedMouseButtons(Qt::AllButtons); - // TODO: These seem to have no effect; find a way to activate anti-aliasing - setAntialiasing(true); - setSmooth(true); - // Create the shared component on the main GUI thread. m_surfaceController = new Surface3DController(boundingRect().toRect(), new Declarative3DScene); setSharedController(m_surfaceController); - - // TODO: Uncomment when doing QTRD-2669 -// connect(m_surfaceController, &Surface3DController::axisXChanged, -// this, &DeclarativeBars::axisXChanged); -// connect(m_surfaceController, &Surface3DController::axisYChanged, -// this, &DeclarativeBars::axisYChanged); -// connect(m_surfaceController, &Surface3DController::axisZChanged, -// this, &DeclarativeBars::axisZChanged); } DeclarativeSurface::~DeclarativeSurface() @@ -125,4 +113,19 @@ void DeclarativeSurface::removeSeries(QSurface3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } +void DeclarativeSurface::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit axisXChanged(static_cast(axis)); +} + +void DeclarativeSurface::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit axisYChanged(static_cast(axis)); +} + +void DeclarativeSurface::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit axisZChanged(static_cast(axis)); +} + QT_DATAVISUALIZATION_END_NAMESPACE diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml2/declarativesurface_p.h index 15e88c91..dc4d232c 100644 --- a/src/datavisualizationqml2/declarativesurface_p.h +++ b/src/datavisualizationqml2/declarativesurface_p.h @@ -72,6 +72,11 @@ public: Q_INVOKABLE void addSeries(QSurface3DSeries *series); Q_INVOKABLE void removeSeries(QSurface3DSeries *series); +public slots: + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); + signals: void axisXChanged(QValue3DAxis *axis); void axisYChanged(QValue3DAxis *axis); diff --git a/tests/barstest/chart.cpp b/tests/barstest/chart.cpp index 24fe1b52..4048e807 100644 --- a/tests/barstest/chart.cpp +++ b/tests/barstest/chart.cpp @@ -184,6 +184,13 @@ GraphModifier::GraphModifier(Q3DBars *barchart, QColorDialog *colorDialog) QObject::connect(m_genericData, &QBar3DSeries::selectedBarChanged, this, &GraphModifier::handleSelectionChange); + QObject::connect(m_graph, &Q3DBars::rowAxisChanged, this, + &GraphModifier::handleRowAxisChanged); + QObject::connect(m_graph, &Q3DBars::columnAxisChanged, this, + &GraphModifier::handleColumnAxisChanged); + QObject::connect(m_graph, &Q3DBars::valueAxisChanged, this, + &GraphModifier::handleValueAxisChanged); + m_graph->addSeries(m_temperatureData); m_graph->addSeries(m_temperatureData2); @@ -681,6 +688,20 @@ void GraphModifier::setUseNullInputHandler(bool useNull) m_graph->setActiveInputHandler(m_defaultInputHandler); } +void GraphModifier::handleRowAxisChanged(QCategory3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->rowAxis()); +} + +void GraphModifier::handleColumnAxisChanged(QCategory3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->columnAxis()); +} + +void GraphModifier::handleValueAxisChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->valueAxis()); +} void GraphModifier::changeShadowQuality(int quality) { diff --git a/tests/barstest/chart.h b/tests/barstest/chart.h index c75e5024..f617a348 100644 --- a/tests/barstest/chart.h +++ b/tests/barstest/chart.h @@ -89,6 +89,10 @@ public slots: void handleSelectionChange(const QPoint &position); void setUseNullInputHandler(bool useNull); + void handleRowAxisChanged(QCategory3DAxis *axis); + void handleColumnAxisChanged(QCategory3DAxis *axis); + void handleValueAxisChanged(QValue3DAxis *axis); + signals: void shadowQualityChanged(int quality); diff --git a/tests/multigraphs/data.cpp b/tests/multigraphs/data.cpp index 9e8a5196..70fcbad4 100644 --- a/tests/multigraphs/data.cpp +++ b/tests/multigraphs/data.cpp @@ -42,6 +42,8 @@ Data::Data(Q3DSurface *surface, Q3DScatter *scatter, Q3DBars *bars, m_resolution(QSize(300, 300)), m_resolutionLevel(0), m_mode(Surface), + m_scatterDataArray(0), + m_barDataArray(0), m_started(false) { // Initialize surface diff --git a/tests/qmlmultigraph/qml/qmlmultigraph/main.qml b/tests/qmlmultigraph/qml/qmlmultigraph/main.qml index fdc49132..11c4ab2d 100644 --- a/tests/qmlmultigraph/qml/qmlmultigraph/main.qml +++ b/tests/qmlmultigraph/qml/qmlmultigraph/main.qml @@ -43,6 +43,16 @@ Item { valueRole: "expenses" } } + + onRowAxisChanged: { + console.log("Bars: Row axis changed.") + } + onColumnAxisChanged: { + console.log("Bars: column axis changed.") + } + onValueAxisChanged: { + console.log("Bars: Value axis changed.") + } } ListModel { @@ -75,6 +85,16 @@ Item { zPosRole: "zPos" } } + + onAxisXChanged: { + console.log("Scatter: axis X changed.") + } + onAxisYChanged: { + console.log("Scatter: axis Y changed.") + } + onAxisZChanged: { + console.log("Scatter: axis Z changed.") + } } ListModel { @@ -105,6 +125,16 @@ Item { valueRole: "pop_density" } } + + onAxisXChanged: { + console.log("Surface: axis X changed.") + } + onAxisYChanged: { + console.log("Surface: axis Y changed.") + } + onAxisZChanged: { + console.log("Surface: axis Z changed.") + } } ListModel { id: surfaceDataModel @@ -141,6 +171,24 @@ Item { text: "Quit" onClicked: Qt.quit(0); } + + NewButton { + id: resetAxesButton + Layout.fillHeight: true + Layout.fillWidth: true + text: "Reset axes" + onClicked: { + barGraph.rowAxis = null + barGraph.columnAxis = null + barGraph.valueAxis = null + scatterGraph.axisX = null + scatterGraph.axisY = null + scatterGraph.axisZ = null + surfaceGraph.axisX = null + surfaceGraph.axisY = null + surfaceGraph.axisZ = null + } + } } Rectangle { diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp index 58add6ec..97562861 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -55,6 +55,13 @@ ScatterDataModifier::ScatterDataModifier(Q3DScatter *scatter) QObject::connect(&m_timer, &QTimer::timeout, this, &ScatterDataModifier::timeout); QObject::connect(m_chart, &Q3DScatter::shadowQualityChanged, this, &ScatterDataModifier::shadowQualityUpdatedByVisual); + + QObject::connect(m_chart, &Q3DScatter::axisXChanged, this, + &ScatterDataModifier::handleAxisXChanged); + QObject::connect(m_chart, &Q3DScatter::axisYChanged, this, + &ScatterDataModifier::handleAxisYChanged); + QObject::connect(m_chart, &Q3DScatter::axisZChanged, this, + &ScatterDataModifier::handleAxisZChanged); } ScatterDataModifier::~ScatterDataModifier() @@ -461,6 +468,21 @@ void ScatterDataModifier::removeSeries() } } +void ScatterDataModifier::handleAxisXChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisX()); +} + +void ScatterDataModifier::handleAxisYChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisY()); +} + +void ScatterDataModifier::handleAxisZChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_chart->axisZ()); +} + void ScatterDataModifier::changeShadowQuality(int quality) { QDataVis::ShadowQuality sq = QDataVis::ShadowQuality(quality); diff --git a/tests/scattertest/scatterchart.h b/tests/scattertest/scatterchart.h index 5524929e..903c6fc0 100644 --- a/tests/scattertest/scatterchart.h +++ b/tests/scattertest/scatterchart.h @@ -68,6 +68,10 @@ public slots: void addSeries(); void removeSeries(); + void handleAxisXChanged(QValue3DAxis *axis); + void handleAxisYChanged(QValue3DAxis *axis); + void handleAxisZChanged(QValue3DAxis *axis); + signals: void shadowQualityChanged(int quality); diff --git a/tests/surfacetest/graphmodifier.cpp b/tests/surfacetest/graphmodifier.cpp index bd44c1dc..58aee4cd 100644 --- a/tests/surfacetest/graphmodifier.cpp +++ b/tests/surfacetest/graphmodifier.cpp @@ -65,6 +65,13 @@ GraphModifier::GraphModifier(Q3DSurface *graph) connect(&m_timer, &QTimer::timeout, this, &GraphModifier::timeout); connect(m_theSeries, &QSurface3DSeries::selectedPointChanged, this, &GraphModifier::selectedPointChanged); + + QObject::connect(m_graph, &Q3DSurface::axisXChanged, this, + &GraphModifier::handleAxisXChanged); + QObject::connect(m_graph, &Q3DSurface::axisYChanged, this, + &GraphModifier::handleAxisYChanged); + QObject::connect(m_graph, &Q3DSurface::axisZChanged, this, + &GraphModifier::handleAxisZChanged); } GraphModifier::~GraphModifier() @@ -393,6 +400,21 @@ void GraphModifier::timeout() m_theSeries->dataProxy()->resetArray(m_planeArray); } +void GraphModifier::handleAxisXChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisX()); +} + +void GraphModifier::handleAxisYChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisY()); +} + +void GraphModifier::handleAxisZChanged(QValue3DAxis *axis) +{ + qDebug() << __FUNCTION__ << axis << axis->orientation() << (axis == m_graph->axisZ()); +} + void GraphModifier::resetArrayAndSliders(QSurfaceDataArray *array, float minZ, float maxZ, float minX, float maxX) { m_axisMinSliderX->setValue(minX); diff --git a/tests/surfacetest/graphmodifier.h b/tests/surfacetest/graphmodifier.h index f0b5cce7..e3c11b5d 100644 --- a/tests/surfacetest/graphmodifier.h +++ b/tests/surfacetest/graphmodifier.h @@ -87,6 +87,10 @@ public slots: void changeSelectionMode(int mode); void timeout(); + void handleAxisXChanged(QValue3DAxis *axis); + void handleAxisYChanged(QValue3DAxis *axis); + void handleAxisZChanged(QValue3DAxis *axis); + private: void resetArrayAndSliders(QSurfaceDataArray *array, float minZ, float maxZ, float minX, float maxX); -- cgit v1.2.3