From a29903b682fa5862fd5c6ffdded14a6c06c4cfe8 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Thu, 15 Aug 2013 13:37:57 +0300 Subject: Support for setting axes in QML. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I9dccd7066d286a8a028450997a5ae34d44310ca1 Reviewed-by: Pasi Keränen --- src/datavis3d/engine/abstract3dcontroller.cpp | 3 ++ src/datavis3d/engine/abstract3drenderer_p.h | 2 ++ src/datavis3d/engine/bars3dcontroller.cpp | 2 +- src/datavis3d/engine/maps3drenderer.cpp | 2 ++ src/datavis3dqml2/datavis3dqml2_plugin.cpp | 6 +++- src/datavis3dqml2/datavis3dqml2_plugin.h | 6 ++++ src/datavis3dqml2/declarativebars.cpp | 40 ++++++++++++++++++++------- src/datavis3dqml2/declarativebars_p.h | 17 ++++++++---- src/datavis3dqml2/declarativescatter.cpp | 30 ++++++++++++++++++++ src/datavis3dqml2/declarativescatter_p.h | 11 ++++++++ 10 files changed, 102 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/datavis3d/engine/abstract3dcontroller.cpp b/src/datavis3d/engine/abstract3dcontroller.cpp index 3c34f797..99d0b66d 100644 --- a/src/datavis3d/engine/abstract3dcontroller.cpp +++ b/src/datavis3d/engine/abstract3dcontroller.cpp @@ -640,8 +640,11 @@ void Abstract3DController::setAxisHelper(QAbstractAxis::AxisOrientation orientat delete *axisPtr; *axisPtr = axis; + + axis->setParent(0); // Assume ownership axis->d_ptr->setOrientation(orientation); + QObject::connect(axis, &QAbstractAxis::titleChanged, this, &Abstract3DController::handleAxisTitleChanged); QObject::connect(axis, &QAbstractAxis::labelsChanged, diff --git a/src/datavis3d/engine/abstract3drenderer_p.h b/src/datavis3d/engine/abstract3drenderer_p.h index 6464651d..0ba14c63 100644 --- a/src/datavis3d/engine/abstract3drenderer_p.h +++ b/src/datavis3d/engine/abstract3drenderer_p.h @@ -87,7 +87,9 @@ public: virtual void requestSelectionAtPoint(const QPoint &point) = 0; virtual void updateTextures() = 0; virtual void initSelectionBuffer() = 0; +#if !defined(QT_OPENGL_ES_2) virtual void updateDepthBuffer() = 0; +#endif virtual void updateShadowQuality(QDataVis::ShadowQuality quality) = 0; virtual void initShaders(const QString &vertexShader, const QString &fragmentShader) = 0; virtual void initBackgroundShaders(const QString &vertexShader, const QString &fragmentShader) = 0; diff --git a/src/datavis3d/engine/bars3dcontroller.cpp b/src/datavis3d/engine/bars3dcontroller.cpp index 72a72ba6..750c3298 100644 --- a/src/datavis3d/engine/bars3dcontroller.cpp +++ b/src/datavis3d/engine/bars3dcontroller.cpp @@ -43,7 +43,7 @@ Bars3dController::Bars3dController(QRect boundRect) m_renderer(0), m_data(0) { - // Default axes. Only Y axis can actually be changed by user. + // Default axes setAxisX(new QCategoryAxis()); setAxisY(new QValueAxis()); setAxisZ(new QCategoryAxis()); diff --git a/src/datavis3d/engine/maps3drenderer.cpp b/src/datavis3d/engine/maps3drenderer.cpp index c1e9af2c..c05f2f51 100644 --- a/src/datavis3d/engine/maps3drenderer.cpp +++ b/src/datavis3d/engine/maps3drenderer.cpp @@ -65,6 +65,8 @@ Maps3DRenderer::~Maps3DRenderer() void Maps3DRenderer::render(CameraHelper *camera, const GLuint defaultFboHandle) { + Q_UNUSED(camera) + Q_UNUSED(defaultFboHandle) // TODO: Implement } diff --git a/src/datavis3dqml2/datavis3dqml2_plugin.cpp b/src/datavis3dqml2/datavis3dqml2_plugin.cpp index 9c6796e2..d1e534f8 100644 --- a/src/datavis3dqml2/datavis3dqml2_plugin.cpp +++ b/src/datavis3dqml2/datavis3dqml2_plugin.cpp @@ -29,7 +29,8 @@ void Datavis3dqml2Plugin::registerTypes(const char *uri) QLatin1String("Trying to create uncreatable: AbstractItemModel.")); qmlRegisterUncreatableType(uri, 1, 0, "DataVis", QLatin1String("Trying to create uncreatable: DataVis.")); - + qmlRegisterUncreatableType(uri, 1, 0, "AbstractAxis", + QLatin1String("Trying to create uncreatable: AbstractAxis.")); qmlRegisterType(uri, 1, 0, "BarDataMapping"); qmlRegisterType(uri, 1, 0, "MapDataMapping"); @@ -38,6 +39,9 @@ void Datavis3dqml2Plugin::registerTypes(const char *uri) qmlRegisterType(uri, 1, 0, "Bars3D"); qmlRegisterType(uri, 1, 0, "Maps3D"); qmlRegisterType(uri, 1, 0, "Scatter3D"); + + qmlRegisterType(uri, 1, 0, "ValueAxis"); + qmlRegisterType(uri, 1, 0, "CategoryAxis"); } QT_DATAVIS3D_END_NAMESPACE diff --git a/src/datavis3dqml2/datavis3dqml2_plugin.h b/src/datavis3dqml2/datavis3dqml2_plugin.h index f8f78ccb..ac88e1b5 100644 --- a/src/datavis3dqml2/datavis3dqml2_plugin.h +++ b/src/datavis3dqml2/datavis3dqml2_plugin.h @@ -26,6 +26,8 @@ #include "qitemmodelbardatamapping.h" #include "qitemmodelmapdatamapping.h" #include "qitemmodelscatterdatamapping.h" +#include "qvalueaxis.h" +#include "qcategoryaxis.h" #include @@ -41,6 +43,10 @@ Q_DECLARE_METATYPE(QItemModelScatterDataMapping *) Q_DECLARE_METATYPE(QAbstractItemModel *) Q_DECLARE_METATYPE(QDataVis *) +Q_DECLARE_METATYPE(QAbstractAxis *) +Q_DECLARE_METATYPE(QCategoryAxis *) +Q_DECLARE_METATYPE(QValueAxis *) + QT_DATAVIS3D_BEGIN_NAMESPACE class Datavis3dqml2Plugin : public QQmlExtensionPlugin diff --git a/src/datavis3dqml2/declarativebars.cpp b/src/datavis3dqml2/declarativebars.cpp index 565e71b7..e7af7f8c 100644 --- a/src/datavis3dqml2/declarativebars.cpp +++ b/src/datavis3dqml2/declarativebars.cpp @@ -106,16 +106,6 @@ void DeclarativeBars::setCameraPosition(qreal horizontal, qreal vertical, int di m_shared->setCameraPosition(GLfloat(horizontal), GLfloat(vertical), GLint(distance)); } -// TODO needs proper axis support also in QML -void DeclarativeBars::setSegmentCount(int segmentCount, qreal step, qreal minimum) -{ - QValueAxis *axis = static_cast(m_shared->axisY()); - if (axis) { - axis->setSegmentCount(segmentCount); - axis->setRange(minimum, segmentCount * step); - } -} - void DeclarativeBars::setData(QAbstractItemModel *data) { static_cast(m_shared->dataProxy())->setItemModel(data); @@ -131,6 +121,36 @@ void DeclarativeBars::setMapping(QItemModelBarDataMapping *mapping) static_cast(m_shared->dataProxy())->setMapping(mapping); } +QCategoryAxis *DeclarativeBars::axisX() const +{ + return static_cast(m_shared->axisX()); +} + +void DeclarativeBars::setAxisX(QCategoryAxis *axis) +{ + m_shared->setAxisX(axis); +} + +QValueAxis *DeclarativeBars::axisY() const +{ + return static_cast(m_shared->axisY()); +} + +void DeclarativeBars::setAxisY(QValueAxis *axis) +{ + m_shared->setAxisY(axis); +} + +QCategoryAxis *DeclarativeBars::axisZ() const +{ + return static_cast(m_shared->axisZ()); +} + +void DeclarativeBars::setAxisZ(QCategoryAxis *axis) +{ + m_shared->setAxisZ(axis); +} + QItemModelBarDataMapping *DeclarativeBars::mapping() const { return static_cast(m_shared->dataProxy())->mapping(); diff --git a/src/datavis3dqml2/declarativebars_p.h b/src/datavis3dqml2/declarativebars_p.h index bcb8bb83..07dc21d4 100644 --- a/src/datavis3dqml2/declarativebars_p.h +++ b/src/datavis3dqml2/declarativebars_p.h @@ -33,6 +33,8 @@ #include "bars3dcontroller_p.h" #include "declarativebars_p.h" #include "qitemmodelbardatamapping.h" +#include "qvalueaxis.h" +#include "qcategoryaxis.h" #include #include @@ -46,6 +48,9 @@ class DeclarativeBars : public QQuickItem Q_OBJECT Q_PROPERTY(QAbstractItemModel *data READ data WRITE setData) Q_PROPERTY(QItemModelBarDataMapping *mapping READ mapping WRITE setMapping) + Q_PROPERTY(QCategoryAxis *axisX READ axisX WRITE setAxisX) + Q_PROPERTY(QValueAxis *axisY READ axisY WRITE setAxisY) + Q_PROPERTY(QCategoryAxis *axisZ READ axisZ WRITE setAxisZ) Q_PROPERTY(QtDataVis3D::QDataVis::SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) Q_PROPERTY(QtDataVis3D::QDataVis::LabelTransparency labelTransparency READ labelTransparency WRITE setLabelTransparency) Q_PROPERTY(QtDataVis3D::QDataVis::ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality) @@ -90,11 +95,6 @@ public: // percentage (10...500)) Q_INVOKABLE void setCameraPosition(qreal horizontal, qreal vertical, int distance); - // Set segment count and step. Note; segmentCount * step should be the maximum possible value of data - // set. Minimum is the absolute minimum possible value a bar can have. This is especially - // important to set if values can be negative. - Q_INVOKABLE void setSegmentCount(int segmentCount, qreal step, qreal minimum); - // Add whole data set. void setData(QAbstractItemModel *data); QAbstractItemModel *data(); @@ -102,6 +102,13 @@ public: QItemModelBarDataMapping *mapping() const; void setMapping(QItemModelBarDataMapping *mapping); + QCategoryAxis *axisX() const; + void setAxisX(QCategoryAxis *axis); + QValueAxis *axisY() const; + void setAxisY(QValueAxis *axis); + QCategoryAxis *axisZ() const; + void setAxisZ(QCategoryAxis *axis); + // Set bar thickness. Y -component sets the thickness of z -direction. void setBarThickness(QSizeF thickness); QSizeF barThickness(); diff --git a/src/datavis3dqml2/declarativescatter.cpp b/src/datavis3dqml2/declarativescatter.cpp index 6005ff99..90daf0e3 100644 --- a/src/datavis3dqml2/declarativescatter.cpp +++ b/src/datavis3dqml2/declarativescatter.cpp @@ -120,6 +120,36 @@ QItemModelScatterDataMapping *DeclarativeScatter::mapping() const return static_cast(m_shared->dataProxy())->mapping(); } +QValueAxis *DeclarativeScatter::axisX() const +{ + return static_cast(m_shared->axisX()); +} + +void DeclarativeScatter::setAxisX(QValueAxis *axis) +{ + m_shared->setAxisX(axis); +} + +QValueAxis *DeclarativeScatter::axisY() const +{ + return static_cast(m_shared->axisY()); +} + +void DeclarativeScatter::setAxisY(QValueAxis *axis) +{ + m_shared->setAxisY(axis); +} + +QValueAxis *DeclarativeScatter::axisZ() const +{ + return static_cast(m_shared->axisZ()); +} + +void DeclarativeScatter::setAxisZ(QValueAxis *axis) +{ + m_shared->setAxisZ(axis); +} + void DeclarativeScatter::setObjectType(QDataVis::MeshStyle style) { QString objFile = m_shared->meshFileName(); diff --git a/src/datavis3dqml2/declarativescatter_p.h b/src/datavis3dqml2/declarativescatter_p.h index c25d9b2c..dce5c021 100644 --- a/src/datavis3dqml2/declarativescatter_p.h +++ b/src/datavis3dqml2/declarativescatter_p.h @@ -33,6 +33,7 @@ #include "scatter3dcontroller_p.h" #include "declarativescatter_p.h" #include "qitemmodelscatterdatamapping.h" +#include "qvalueaxis.h" #include #include @@ -45,6 +46,9 @@ class DeclarativeScatter : public QQuickItem Q_OBJECT Q_PROPERTY(QAbstractItemModel *data READ data WRITE setData) Q_PROPERTY(QItemModelScatterDataMapping *mapping READ mapping WRITE setMapping) + Q_PROPERTY(QValueAxis *axisX READ axisX WRITE setAxisX) + Q_PROPERTY(QValueAxis *axisY READ axisY WRITE setAxisY) + Q_PROPERTY(QValueAxis *axisZ READ axisZ WRITE setAxisZ) Q_PROPERTY(QtDataVis3D::QDataVis::SelectionMode selectionMode READ selectionMode WRITE setSelectionMode) Q_PROPERTY(QtDataVis3D::QDataVis::LabelTransparency labelTransparency READ labelTransparency WRITE setLabelTransparency) Q_PROPERTY(QtDataVis3D::QDataVis::ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality) @@ -87,6 +91,13 @@ public: QItemModelScatterDataMapping *mapping() const; void setMapping(QItemModelScatterDataMapping *mapping); + QValueAxis *axisX() const; + void setAxisX(QValueAxis *axis); + QValueAxis *axisY() const; + void setAxisY(QValueAxis *axis); + QValueAxis *axisZ() const; + void setAxisZ(QValueAxis *axis); + // Object type void setObjectType(QDataVis::MeshStyle style); QDataVis::MeshStyle objectType(); -- cgit v1.2.3