diff options
Diffstat (limited to 'src/datavisualizationqml2')
22 files changed, 564 insertions, 224 deletions
diff --git a/src/datavisualizationqml2/abstractdeclarative.cpp b/src/datavisualizationqml2/abstractdeclarative.cpp index 587ea879..f251f52b 100644 --- a/src/datavisualizationqml2/abstractdeclarative.cpp +++ b/src/datavisualizationqml2/abstractdeclarative.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -17,16 +17,21 @@ ****************************************************************************/ #include "abstractdeclarative_p.h" -#include "q3dvalueaxis.h" +#include "qvalue3daxis.h" +#include "declarativetheme_p.h" + #include <QThread> #include <QGuiApplication> #include <QSGSimpleRectNode> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION + +static QList<const QQuickWindow *> clearList; AbstractDeclarative::AbstractDeclarative(QQuickItem *parent) : QQuickItem(parent), - m_controller(0) + m_controller(0), + m_clearWindowBeforeRendering(true) { connect(this, &QQuickItem::windowChanged, this, &AbstractDeclarative::handleWindowChanged); setAntialiasing(true); @@ -36,57 +41,93 @@ AbstractDeclarative::~AbstractDeclarative() { } -Q3DScene* AbstractDeclarative::scene() const +Declarative3DScene* AbstractDeclarative::scene() const { - return m_controller->scene(); + return static_cast<Declarative3DScene *>(m_controller->scene()); } void AbstractDeclarative::setTheme(Q3DTheme *theme) { - m_controller->setTheme(theme); + m_controller->setActiveTheme(theme); } Q3DTheme *AbstractDeclarative::theme() const { - return m_controller->theme(); + return m_controller->activeTheme(); +} + +void AbstractDeclarative::clearSelection() +{ + m_controller->clearSelection(); } -void AbstractDeclarative::setSelectionMode(QDataVis::SelectionFlags mode) +void AbstractDeclarative::setClearWindowBeforeRendering(bool enable) { - m_controller->setSelectionMode(mode); + if (m_clearWindowBeforeRendering != enable) { + m_clearWindowBeforeRendering = enable; + emit clearWindowBeforeRenderingChanged(enable); + } } -QDataVis::SelectionFlags AbstractDeclarative::selectionMode() const +bool AbstractDeclarative::clearWindowBeforeRendering() const { - return m_controller->selectionMode(); + return m_clearWindowBeforeRendering; } -void AbstractDeclarative::setShadowQuality(QDataVis::ShadowQuality quality) +void AbstractDeclarative::setSelectionMode(SelectionFlags mode) { - m_controller->setShadowQuality(quality); + int intmode = int(mode); + m_controller->setSelectionMode(QAbstract3DGraph::SelectionFlags(intmode)); } -QDataVis::ShadowQuality AbstractDeclarative::shadowQuality() const +AbstractDeclarative::SelectionFlags AbstractDeclarative::selectionMode() const { - return m_controller->shadowQuality(); + int intmode = int(m_controller->selectionMode()); + return SelectionFlags(intmode); +} + +void AbstractDeclarative::setShadowQuality(ShadowQuality quality) +{ + m_controller->setShadowQuality(QAbstract3DGraph::ShadowQuality(quality)); +} + +AbstractDeclarative::ShadowQuality AbstractDeclarative::shadowQuality() const +{ + return ShadowQuality(m_controller->shadowQuality()); } void AbstractDeclarative::setSharedController(Abstract3DController *controller) { Q_ASSERT(controller); m_controller = controller; + + // Reset default theme, as the default C++ theme is Q3DTheme, not DeclarativeTheme3D. + DeclarativeTheme3D *defaultTheme = new DeclarativeTheme3D; + defaultTheme->d_ptr->setDefaultTheme(true); + defaultTheme->setType(Q3DTheme::ThemeQt); + m_controller->setActiveTheme(defaultTheme); + QObject::connect(m_controller, &Abstract3DController::shadowQualityChanged, this, - &AbstractDeclarative::shadowQualityChanged); + &AbstractDeclarative::handleShadowQualityChange); QObject::connect(m_controller, &Abstract3DController::activeInputHandlerChanged, this, &AbstractDeclarative::inputHandlerChanged); - QObject::connect(m_controller, &Abstract3DController::themeChanged, this, + QObject::connect(m_controller, &Abstract3DController::activeThemeChanged, this, &AbstractDeclarative::themeChanged); QObject::connect(m_controller, &Abstract3DController::selectionModeChanged, this, - &AbstractDeclarative::selectionModeChanged); + &AbstractDeclarative::handleSelectionModeChange); + + 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() { + if (m_clearWindowBeforeRendering && clearList.size()) + clearList.clear(); m_controller->initializeOpenGL(); m_controller->synchDataToRenderer(); } @@ -140,24 +181,38 @@ void AbstractDeclarative::updateWindowParameters() win->update(); } - QPointF point = QQuickItem::mapToScene(QPointF(m_cachedGeometry.x(), m_cachedGeometry.y())); + QPointF point = QQuickItem::mapToScene(QPointF(0.0f, 0.0f)); if (m_controller) { - scene->d_ptr->setViewport(QRect(point.x(), point.y(), m_cachedGeometry.width(), m_cachedGeometry.height())); + scene->d_ptr->setViewport(QRect(point.x(), point.y(), m_cachedGeometry.width(), + m_cachedGeometry.height())); } } } +void AbstractDeclarative::handleSelectionModeChange(QAbstract3DGraph::SelectionFlags mode) +{ + int intmode = int(mode); + emit selectionModeChanged(SelectionFlags(intmode)); +} + +void AbstractDeclarative::handleShadowQualityChange(QAbstract3DGraph::ShadowQuality quality) +{ + emit shadowQualityChanged(ShadowQuality(quality)); +} + void AbstractDeclarative::render() { updateWindowParameters(); - // Clear the background as that is not done by default - glViewport(0, 0, window()->width(), window()->height()); - QColor clearColor = window()->color(); - glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), 1.0f); - glClear(GL_COLOR_BUFFER_BIT); + // Clear the background once per window as that is not done by default + const QQuickWindow *win = window(); + if (m_clearWindowBeforeRendering && !clearList.contains(win)) { + clearList.append(win); + QColor clearColor = win->color(); + glClearColor(clearColor.redF(), clearColor.greenF(), clearColor.blueF(), 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + } - // TODO: Store the state of these and restore before returning glDepthMask(GL_TRUE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LESS); @@ -214,4 +269,4 @@ void AbstractDeclarative::wheelEvent(QWheelEvent *event) m_controller->wheelEvent(event); } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/abstractdeclarative_p.h b/src/datavisualizationqml2/abstractdeclarative_p.h index 42cf13a4..85616560 100644 --- a/src/datavisualizationqml2/abstractdeclarative_p.h +++ b/src/datavisualizationqml2/abstractdeclarative_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -32,28 +32,63 @@ #include "datavisualizationglobal_p.h" #include "abstract3dcontroller_p.h" #include "qabstract3dinputhandler.h" +#include "declarativescene_p.h" #include <QAbstractItemModel> #include <QQuickItem> #include <QObject> #include <QQuickWindow> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION 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_ENUMS(ShadowQuality) + Q_FLAGS(SelectionFlag SelectionFlags) + Q_PROPERTY(SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged) + Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged) + 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) + +public: + enum SelectionFlag { + SelectionNone = 0, + SelectionItem = 1, + SelectionRow = 2, + SelectionItemAndRow = SelectionItem | SelectionRow, + SelectionColumn = 4, + SelectionItemAndColumn = SelectionItem | SelectionColumn, + SelectionRowAndColumn = SelectionRow | SelectionColumn, + SelectionItemRowAndColumn = SelectionItem | SelectionRow | SelectionColumn, + SelectionSlice = 8, + SelectionMultiSeries = 16 + }; + Q_DECLARE_FLAGS(SelectionFlags, SelectionFlag) + + enum ShadowQuality { + ShadowQualityNone = 0, + ShadowQualityLow, + ShadowQualityMedium, + ShadowQualityHigh, + ShadowQualitySoftLow, + ShadowQualitySoftMedium, + ShadowQualitySoftHigh + }; public: explicit AbstractDeclarative(QQuickItem *parent = 0); virtual ~AbstractDeclarative(); - virtual Q3DScene *scene() const; + virtual void setSelectionMode(SelectionFlags mode); + virtual AbstractDeclarative::SelectionFlags selectionMode() const; + + virtual void setShadowQuality(ShadowQuality quality); + virtual AbstractDeclarative::ShadowQuality shadowQuality() const; + + virtual Declarative3DScene *scene() const; virtual QAbstract3DInputHandler *inputHandler() const; virtual void setInputHandler(QAbstract3DInputHandler *inputHandler); @@ -61,19 +96,23 @@ public: virtual void setTheme(Q3DTheme *theme); virtual Q3DTheme *theme() const; - virtual void setSelectionMode(QDataVis::SelectionFlags mode); - virtual QDataVis::SelectionFlags selectionMode() const; + Q_INVOKABLE virtual void clearSelection(); - virtual void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry); + virtual void setClearWindowBeforeRendering(bool enable); + virtual bool clearWindowBeforeRendering() const; - virtual void setShadowQuality(QDataVis::ShadowQuality quality); - virtual QDataVis::ShadowQuality shadowQuality() const; + virtual void geometryChanged(const QRectF & newGeometry, const QRectF & oldGeometry); void setSharedController(Abstract3DController *controller); // Used to synch up data model from controller to renderer while main thread is locked 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); @@ -84,21 +123,25 @@ protected: virtual void handleWindowChanged(QQuickWindow *win); virtual void itemChange(ItemChange change, const ItemChangeData &value); virtual void updateWindowParameters(); + virtual void handleSelectionModeChange(QAbstract3DGraph::SelectionFlags mode); + virtual void handleShadowQualityChange(QAbstract3DGraph::ShadowQuality quality); signals: // Signals shadow quality changes. - void shadowQualityChanged(QDataVis::ShadowQuality quality); + void selectionModeChanged(SelectionFlags mode); + void shadowQualityChanged(ShadowQuality quality); + void sceneChanged(Q3DScene *scene); void inputHandlerChanged(QAbstract3DInputHandler *inputHandler); void themeChanged(Q3DTheme *theme); - void selectionModeChanged(QDataVis::SelectionFlags mode); - void itemLabelFormatChanged(QString format); - void sceneChanged(Q3DScene *scene); + void clearWindowBeforeRenderingChanged(bool enable); private: Abstract3DController *m_controller; QRectF m_cachedGeometry; + bool m_clearWindowBeforeRendering; }; +Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::SelectionFlags) -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif // ABSTRACTDECLARATIVE_P_H diff --git a/src/datavisualizationqml2/colorgradient.cpp b/src/datavisualizationqml2/colorgradient.cpp index e4c16ebe..b6cd16dd 100644 --- a/src/datavisualizationqml2/colorgradient.cpp +++ b/src/datavisualizationqml2/colorgradient.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -18,7 +18,7 @@ #include "colorgradient_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION ColorGradientStop::ColorGradientStop(QObject *parent) : QObject(parent) @@ -74,4 +74,4 @@ void ColorGradient::doUpdate() emit updated(); } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/colorgradient_p.h b/src/datavisualizationqml2/colorgradient_p.h index 59653331..31e3d305 100644 --- a/src/datavisualizationqml2/colorgradient_p.h +++ b/src/datavisualizationqml2/colorgradient_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -33,7 +33,7 @@ #include <QColor> #include <QQmlListProperty> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION class ColorGradientStop : public QObject { @@ -83,6 +83,6 @@ Q_SIGNALS: void updated(); }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/datavisualizationqml2.pro b/src/datavisualizationqml2/datavisualizationqml2.pro index 989b52b9..6396b86b 100644 --- a/src/datavisualizationqml2/datavisualizationqml2.pro +++ b/src/datavisualizationqml2/datavisualizationqml2.pro @@ -8,7 +8,11 @@ uri = QtDataVisualization static { DEFINES += QT_DATAVISUALIZATION_STATICLIB - CONFIG -= static staticlib + # Only build qml plugin static if Qt itself is also built static + !contains(QT_CONFIG, static): CONFIG -= static staticlib + + # Insert the plugin URI into its meta data to enable static plugin usage + QMAKE_MOC_OPTIONS += -Muri=$$uri } INCLUDEPATH += ../../include \ @@ -27,7 +31,8 @@ SOURCES += \ colorgradient.cpp \ declarativeseries.cpp \ declarativetheme.cpp \ - declarativecolor.cpp + declarativecolor.cpp \ + declarativescene.cpp HEADERS += \ datavisualizationqml2_plugin.h \ @@ -38,7 +43,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 8dcdfbcc..f926b7fa 100644 --- a/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp +++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -20,16 +20,14 @@ #include <qqml.h> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION -void Datavis3Dqml2Plugin::registerTypes(const char *uri) +void QtDataVisualizationQml2Plugin::registerTypes(const char *uri) { // @uri QtDataVisualization qmlRegisterUncreatableType<const QAbstractItemModel>(uri, 1, 0, "AbstractItemModel", QLatin1String("Trying to create uncreatable: AbstractItemModel.")); - qmlRegisterUncreatableType<QDataVis>(uri, 1, 0, "DataVis", - QLatin1String("Trying to create uncreatable: DataVis.")); - qmlRegisterUncreatableType<Q3DAbstractAxis>(uri, 1, 0, "AbstractAxis3D", + qmlRegisterUncreatableType<QAbstract3DAxis>(uri, 1, 0, "AbstractAxis3D", QLatin1String("Trying to create uncreatable: AbstractAxis.")); qmlRegisterUncreatableType<QAbstractDataProxy>(uri, 1, 0, "AbstractDataProxy", QLatin1String("Trying to create uncreatable: AbstractDataProxy.")); @@ -41,8 +39,8 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) QLatin1String("Trying to create uncreatable: SurfaceDataProxy.")); qmlRegisterUncreatableType<AbstractDeclarative>(uri, 1, 0, "AbstractGraph3D", QLatin1String("Trying to create uncreatable: AbstractGraph3D.")); - qmlRegisterUncreatableType<Q3DScene>(uri, 1, 0, "Scene3D", - QLatin1String("Trying to create uncreatable: Scene3D.")); + qmlRegisterUncreatableType<Declarative3DScene>(uri, 1, 0, "Scene3D", + QLatin1String("Trying to create uncreatable: Scene3D.")); qmlRegisterUncreatableType<QAbstract3DSeries>(uri, 1, 0, "Abstract3DSeries", QLatin1String("Trying to create uncreatable: Abstract3DSeries.")); qmlRegisterUncreatableType<QBar3DSeries>(uri, 1, 0, "QBar3DSeries", @@ -60,8 +58,8 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) qmlRegisterType<DeclarativeScatter>(uri, 1, 0, "Scatter3D"); qmlRegisterType<DeclarativeSurface>(uri, 1, 0, "Surface3D"); - qmlRegisterType<Q3DValueAxis>(uri, 1, 0, "ValueAxis3D"); - qmlRegisterType<Q3DCategoryAxis>(uri, 1, 0, "CategoryAxis3D"); + qmlRegisterType<QValue3DAxis>(uri, 1, 0, "ValueAxis3D"); + qmlRegisterType<QCategory3DAxis>(uri, 1, 0, "CategoryAxis3D"); qmlRegisterType<Q3DCamera>(uri, 1, 0, "Camera3D"); qmlRegisterType<Q3DLight>(uri, 1, 0, "Light3D"); @@ -80,7 +78,9 @@ void Datavis3Dqml2Plugin::registerTypes(const char *uri) qmlRegisterType<DeclarativeBar3DSeries>(uri, 1, 0, "Bar3DSeries"); qmlRegisterType<DeclarativeScatter3DSeries>(uri, 1, 0, "Scatter3DSeries"); qmlRegisterType<DeclarativeSurface3DSeries>(uri, 1, 0, "Surface3DSeries"); + + qRegisterMetaType<QAbstract3DGraph::ShadowQuality>("QAbstract3DGraph::ShadowQuality"); } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/datavisualizationqml2_plugin.h b/src/datavisualizationqml2/datavisualizationqml2_plugin.h index 25c06364..c12c2cb2 100644 --- a/src/datavisualizationqml2/datavisualizationqml2_plugin.h +++ b/src/datavisualizationqml2/datavisualizationqml2_plugin.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -27,8 +27,8 @@ #include "qitemmodelscatterdataproxy.h" #include "qitemmodelsurfacedataproxy.h" #include "qheightmapsurfacedataproxy.h" -#include "q3dvalueaxis.h" -#include "q3dcategoryaxis.h" +#include "qvalue3daxis.h" +#include "qcategory3daxis.h" #include "q3dobject.h" #include "q3dcamera.h" #include "q3dscene.h" @@ -42,10 +42,11 @@ #include "declarativetheme_p.h" #include "qabstract3dinputhandler.h" #include "declarativecolor_p.h" +#include "declarativescene_p.h" #include <QQmlExtensionPlugin> -QT_DATAVISUALIZATION_USE_NAMESPACE +using namespace QtDataVisualization; QML_DECLARE_TYPE(AbstractDeclarative) QML_DECLARE_TYPE(DeclarativeBars) @@ -53,13 +54,13 @@ QML_DECLARE_TYPE(DeclarativeScatter) QML_DECLARE_TYPE(DeclarativeSurface) QML_DECLARE_TYPE(const QAbstractItemModel) -QML_DECLARE_TYPE(QDataVis) -QML_DECLARE_TYPE(Q3DAbstractAxis) -QML_DECLARE_TYPE(Q3DCategoryAxis) -QML_DECLARE_TYPE(Q3DValueAxis) +QML_DECLARE_TYPE(QAbstract3DAxis) +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) @@ -91,9 +92,9 @@ QML_DECLARE_TYPE(DeclarativeTheme3D) QML_DECLARE_TYPE(QAbstract3DInputHandler) -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION -class Datavis3Dqml2Plugin : public QQmlExtensionPlugin +class QtDataVisualizationQml2Plugin : public QQmlExtensionPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") @@ -102,7 +103,7 @@ public: void registerTypes(const char *uri); }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif // DATAVISUALIZATIONQML2_PLUGIN_H diff --git a/src/datavisualizationqml2/declarativebars.cpp b/src/datavisualizationqml2/declarativebars.cpp index 7eab8886..e24526c3 100644 --- a/src/datavisualizationqml2/declarativebars.cpp +++ b/src/datavisualizationqml2/declarativebars.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -17,10 +17,11 @@ ****************************************************************************/ #include "declarativebars_p.h" -#include "q3dvalueaxis.h" +#include "qvalue3daxis.h" #include "qitemmodelbardataproxy.h" +#include "declarativescene_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION DeclarativeBars::DeclarativeBars(QQuickItem *parent) : AbstractDeclarative(parent), @@ -28,21 +29,12 @@ 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()); + 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); + QObject::connect(m_barsController, &Bars3DController::primarySeriesChanged, + this, &DeclarativeBars::primarySeriesChanged); } DeclarativeBars::~DeclarativeBars() @@ -50,36 +42,49 @@ DeclarativeBars::~DeclarativeBars() delete m_barsController; } -Q3DCategoryAxis *DeclarativeBars::rowAxis() const +QCategory3DAxis *DeclarativeBars::rowAxis() const { - return static_cast<Q3DCategoryAxis *>(m_barsController->axisZ()); + return static_cast<QCategory3DAxis *>(m_barsController->axisZ()); } -void DeclarativeBars::setRowAxis(Q3DCategoryAxis *axis) +void DeclarativeBars::setRowAxis(QCategory3DAxis *axis) { m_barsController->setAxisZ(axis); } -Q3DValueAxis *DeclarativeBars::valueAxis() const +QValue3DAxis *DeclarativeBars::valueAxis() const { - return static_cast<Q3DValueAxis *>(m_barsController->axisY()); + return static_cast<QValue3DAxis *>(m_barsController->axisY()); } -void DeclarativeBars::setValueAxis(Q3DValueAxis *axis) +void DeclarativeBars::setValueAxis(QValue3DAxis *axis) { m_barsController->setAxisY(axis); } -Q3DCategoryAxis *DeclarativeBars::columnAxis() const +QCategory3DAxis *DeclarativeBars::columnAxis() const { - return static_cast<Q3DCategoryAxis *>(m_barsController->axisX()); + return static_cast<QCategory3DAxis *>(m_barsController->axisX()); } -void DeclarativeBars::setColumnAxis(Q3DCategoryAxis *axis) +void DeclarativeBars::setColumnAxis(QCategory3DAxis *axis) { m_barsController->setAxisX(axis); } +void DeclarativeBars::setMultiSeriesUniform(bool uniform) +{ + if (uniform != isMultiSeriesUniform()) { + m_barsController->setMultiSeriesScaling(uniform); + emit multiSeriesUniformChanged(uniform); + } +} + +bool DeclarativeBars::isMultiSeriesUniform() const +{ + return m_barsController->multiSeriesScaling(); +} + void DeclarativeBars::setBarThickness(float thicknessRatio) { if (thicknessRatio != barThickness()) { @@ -163,4 +168,34 @@ void DeclarativeBars::removeSeries(QBar3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } -QT_DATAVISUALIZATION_END_NAMESPACE +void DeclarativeBars::insertSeries(int index, QBar3DSeries *series) +{ + m_barsController->insertSeries(index, series); +} + +void DeclarativeBars::setPrimarySeries(QBar3DSeries *series) +{ + m_barsController->setPrimarySeries(series); +} + +QBar3DSeries *DeclarativeBars::primarySeries() const +{ + return m_barsController->primarySeries(); +} + +void DeclarativeBars::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit columnAxisChanged(static_cast<QCategory3DAxis *>(axis)); +} + +void DeclarativeBars::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit valueAxisChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeBars::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit rowAxisChanged(static_cast<QCategory3DAxis *>(axis)); +} + +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativebars_p.h b/src/datavisualizationqml2/declarativebars_p.h index 29d9dc91..e5a90a01 100644 --- a/src/datavisualizationqml2/declarativebars_p.h +++ b/src/datavisualizationqml2/declarativebars_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -33,8 +33,8 @@ #include "abstractdeclarative_p.h" #include "bars3dcontroller_p.h" #include "declarativebars_p.h" -#include "q3dvalueaxis.h" -#include "q3dcategoryaxis.h" +#include "qvalue3daxis.h" +#include "qcategory3daxis.h" #include "qbardataproxy.h" #include "qbar3dseries.h" @@ -43,30 +43,35 @@ #include <QObject> #include <QQuickWindow> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION class DeclarativeBars : public AbstractDeclarative { Q_OBJECT - Q_PROPERTY(Q3DCategoryAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged) - Q_PROPERTY(Q3DValueAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged) - Q_PROPERTY(Q3DCategoryAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged) + Q_PROPERTY(QCategory3DAxis *rowAxis READ rowAxis WRITE setRowAxis NOTIFY rowAxisChanged) + Q_PROPERTY(QValue3DAxis *valueAxis READ valueAxis WRITE setValueAxis NOTIFY valueAxisChanged) + Q_PROPERTY(QCategory3DAxis *columnAxis READ columnAxis WRITE setColumnAxis NOTIFY columnAxisChanged) + Q_PROPERTY(bool multiSeriesUniform READ isMultiSeriesUniform WRITE setMultiSeriesUniform NOTIFY multiSeriesUniformChanged) 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(QQmlListProperty<QBar3DSeries> seriesList READ seriesList) + Q_PROPERTY(QBar3DSeries *primarySeries READ primarySeries WRITE setPrimarySeries NOTIFY primarySeriesChanged) Q_CLASSINFO("DefaultProperty", "seriesList") public: explicit DeclarativeBars(QQuickItem *parent = 0); ~DeclarativeBars(); - Q3DCategoryAxis *rowAxis() const; - void setRowAxis(Q3DCategoryAxis *axis); - Q3DValueAxis *valueAxis() const; - void setValueAxis(Q3DValueAxis *axis); - Q3DCategoryAxis *columnAxis() const; - void setColumnAxis(Q3DCategoryAxis *axis); + QCategory3DAxis *rowAxis() const; + void setRowAxis(QCategory3DAxis *axis); + QValue3DAxis *valueAxis() const; + void setValueAxis(QValue3DAxis *axis); + QCategory3DAxis *columnAxis() const; + void setColumnAxis(QCategory3DAxis *axis); + + void setMultiSeriesUniform(bool uniform); + bool isMultiSeriesUniform() const; void setBarThickness(float thicknessRatio); float barThickness() const; @@ -84,20 +89,30 @@ public: static void clearSeriesFunc(QQmlListProperty<QBar3DSeries> *list); Q_INVOKABLE void addSeries(QBar3DSeries *series); Q_INVOKABLE void removeSeries(QBar3DSeries *series); + Q_INVOKABLE void insertSeries(int index, QBar3DSeries *series); + void setPrimarySeries(QBar3DSeries *series); + QBar3DSeries *primarySeries() const; + +public slots: + void handleAxisXChanged(QAbstract3DAxis *axis); + void handleAxisYChanged(QAbstract3DAxis *axis); + void handleAxisZChanged(QAbstract3DAxis *axis); signals: - void rowAxisChanged(Q3DCategoryAxis *axis); - void valueAxisChanged(Q3DValueAxis *axis); - void columnAxisChanged(Q3DCategoryAxis *axis); + void rowAxisChanged(QCategory3DAxis *axis); + void valueAxisChanged(QValue3DAxis *axis); + void columnAxisChanged(QCategory3DAxis *axis); + void multiSeriesUniformChanged(bool uniform); void barThicknessChanged(float thicknessRatio); void barSpacingChanged(QSizeF spacing); void barSpacingRelativeChanged(bool relative); void meshFileNameChanged(QString filename); + void primarySeriesChanged(QBar3DSeries *series); private: Bars3DController *m_barsController; }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/declarativecolor.cpp b/src/datavisualizationqml2/declarativecolor.cpp index 5c1ff8c5..ffd4227f 100644 --- a/src/datavisualizationqml2/declarativecolor.cpp +++ b/src/datavisualizationqml2/declarativecolor.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -18,7 +18,7 @@ #include "declarativecolor_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION DeclarativeColor::DeclarativeColor(QObject *parent) : QObject(parent) @@ -38,4 +38,4 @@ QColor DeclarativeColor::color() const return m_color; } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativecolor_p.h b/src/datavisualizationqml2/declarativecolor_p.h index 755652b4..67eb9a2b 100644 --- a/src/datavisualizationqml2/declarativecolor_p.h +++ b/src/datavisualizationqml2/declarativecolor_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -32,7 +32,7 @@ #include "datavisualizationglobal_p.h" #include <QColor> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION class DeclarativeColor : public QObject { @@ -52,6 +52,6 @@ private: QColor m_color; }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/declarativescatter.cpp b/src/datavisualizationqml2/declarativescatter.cpp index 5aaa19b6..81a1e879 100644 --- a/src/datavisualizationqml2/declarativescatter.cpp +++ b/src/datavisualizationqml2/declarativescatter.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -18,8 +18,9 @@ #include "declarativescatter_p.h" #include "qitemmodelscatterdataproxy.h" +#include "declarativescene_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION DeclarativeScatter::DeclarativeScatter(QQuickItem *parent) : AbstractDeclarative(parent), @@ -27,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()); + 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() @@ -49,32 +38,32 @@ DeclarativeScatter::~DeclarativeScatter() delete m_scatterController; } -Q3DValueAxis *DeclarativeScatter::axisX() const +QValue3DAxis *DeclarativeScatter::axisX() const { - return static_cast<Q3DValueAxis *>(m_scatterController->axisX()); + return static_cast<QValue3DAxis *>(m_scatterController->axisX()); } -void DeclarativeScatter::setAxisX(Q3DValueAxis *axis) +void DeclarativeScatter::setAxisX(QValue3DAxis *axis) { m_scatterController->setAxisX(axis); } -Q3DValueAxis *DeclarativeScatter::axisY() const +QValue3DAxis *DeclarativeScatter::axisY() const { - return static_cast<Q3DValueAxis *>(m_scatterController->axisY()); + return static_cast<QValue3DAxis *>(m_scatterController->axisY()); } -void DeclarativeScatter::setAxisY(Q3DValueAxis *axis) +void DeclarativeScatter::setAxisY(QValue3DAxis *axis) { m_scatterController->setAxisY(axis); } -Q3DValueAxis *DeclarativeScatter::axisZ() const +QValue3DAxis *DeclarativeScatter::axisZ() const { - return static_cast<Q3DValueAxis *>(m_scatterController->axisZ()); + return static_cast<QValue3DAxis *>(m_scatterController->axisZ()); } -void DeclarativeScatter::setAxisZ(Q3DValueAxis *axis) +void DeclarativeScatter::setAxisZ(QValue3DAxis *axis) { m_scatterController->setAxisZ(axis); } @@ -123,4 +112,19 @@ void DeclarativeScatter::removeSeries(QScatter3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } -QT_DATAVISUALIZATION_END_NAMESPACE +void DeclarativeScatter::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit axisXChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeScatter::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit axisYChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeScatter::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit axisZChanged(static_cast<QValue3DAxis *>(axis)); +} + +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativescatter_p.h b/src/datavisualizationqml2/declarativescatter_p.h index b9f5a3b7..bca44085 100644 --- a/src/datavisualizationqml2/declarativescatter_p.h +++ b/src/datavisualizationqml2/declarativescatter_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -33,7 +33,7 @@ #include "abstractdeclarative_p.h" #include "scatter3dcontroller_p.h" #include "declarativescatter_p.h" -#include "q3dvalueaxis.h" +#include "qvalue3daxis.h" #include "qscatterdataproxy.h" #include "qscatter3dseries.h" @@ -41,14 +41,14 @@ #include <QQuickItem> #include <QObject> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION class DeclarativeScatter : public AbstractDeclarative { Q_OBJECT - Q_PROPERTY(Q3DValueAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) - Q_PROPERTY(Q3DValueAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) - Q_PROPERTY(Q3DValueAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + 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) Q_PROPERTY(QQmlListProperty<QScatter3DSeries> seriesList READ seriesList) Q_CLASSINFO("DefaultProperty", "seriesList") @@ -56,12 +56,12 @@ public: explicit DeclarativeScatter(QQuickItem *parent = 0); ~DeclarativeScatter(); - Q3DValueAxis *axisX() const; - void setAxisX(Q3DValueAxis *axis); - Q3DValueAxis *axisY() const; - void setAxisY(Q3DValueAxis *axis); - Q3DValueAxis *axisZ() const; - void setAxisZ(Q3DValueAxis *axis); + QValue3DAxis *axisX() const; + void setAxisX(QValue3DAxis *axis); + QValue3DAxis *axisY() const; + void setAxisY(QValue3DAxis *axis); + QValue3DAxis *axisZ() const; + void setAxisZ(QValue3DAxis *axis); QQmlListProperty<QScatter3DSeries> seriesList(); static void appendSeriesFunc(QQmlListProperty<QScatter3DSeries> *list, QScatter3DSeries *series); @@ -71,15 +71,20 @@ 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(Q3DValueAxis *axis); - void axisYChanged(Q3DValueAxis *axis); - void axisZChanged(Q3DValueAxis *axis); + void axisXChanged(QValue3DAxis *axis); + void axisYChanged(QValue3DAxis *axis); + void axisZChanged(QValue3DAxis *axis); protected: Scatter3DController *m_scatterController; }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/declarativescene.cpp b/src/datavisualizationqml2/declarativescene.cpp new file mode 100644 index 00000000..7fb2450c --- /dev/null +++ b/src/datavisualizationqml2/declarativescene.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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_BEGIN_NAMESPACE_DATAVISUALIZATION + +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_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativescene_p.h b/src/datavisualizationqml2/declarativescene_p.h new file mode 100644 index 00000000..60867cdf --- /dev/null +++ b/src/datavisualizationqml2/declarativescene_p.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2014 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_BEGIN_NAMESPACE_DATAVISUALIZATION + +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_END_NAMESPACE_DATAVISUALIZATION + +#endif diff --git a/src/datavisualizationqml2/declarativeseries.cpp b/src/datavisualizationqml2/declarativeseries.cpp index 35f6e315..1a762152 100644 --- a/src/datavisualizationqml2/declarativeseries.cpp +++ b/src/datavisualizationqml2/declarativeseries.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -22,7 +22,7 @@ #include "qsurfacedataproxy.h" #include <QMetaMethod> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION static void setSeriesGradient(QAbstract3DSeries *series, const ColorGradient &gradient, GradientType type) { @@ -235,6 +235,11 @@ ColorGradient *DeclarativeScatter3DSeries::multiHighlightGradient() const return m_multiHighlightGradient; } +int DeclarativeScatter3DSeries::invalidSelectionIndex() const +{ + return QScatter3DSeries::invalidSelectionIndex(); +} + void DeclarativeScatter3DSeries::handleBaseGradientUpdate() { if (m_baseGradient) @@ -343,4 +348,4 @@ void DeclarativeSurface3DSeries::handleMultiHighlightGradientUpdate() setSeriesGradient(this, *m_multiHighlightGradient, GradientTypeMulti); } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativeseries_p.h b/src/datavisualizationqml2/declarativeseries_p.h index c9c3dc7a..f196e311 100644 --- a/src/datavisualizationqml2/declarativeseries_p.h +++ b/src/datavisualizationqml2/declarativeseries_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -36,7 +36,7 @@ #include "colorgradient_p.h" #include <QQmlListProperty> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION enum GradientType { GradientTypeBase, @@ -48,13 +48,16 @@ class DeclarativeBar3DSeries : public QBar3DSeries { Q_OBJECT Q_PROPERTY(QQmlListProperty<QObject> 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<QObject> 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<QObject> seriesChildren(); static void appendSeriesChildren(QQmlListProperty<QObject> *list, QObject *element); @@ -172,6 +185,6 @@ private: ColorGradient *m_multiHighlightGradient; // Not owned }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/declarativesurface.cpp b/src/datavisualizationqml2/declarativesurface.cpp index 3ba5f923..c0e1ddcc 100644 --- a/src/datavisualizationqml2/declarativesurface.cpp +++ b/src/datavisualizationqml2/declarativesurface.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -17,10 +17,11 @@ ****************************************************************************/ #include "declarativesurface_p.h" -#include "q3dvalueaxis.h" +#include "qvalue3daxis.h" #include "qitemmodelsurfacedataproxy.h" +#include "declarativescene_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION DeclarativeSurface::DeclarativeSurface(QQuickItem *parent) : AbstractDeclarative(parent), @@ -28,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()); + 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() @@ -50,32 +39,32 @@ DeclarativeSurface::~DeclarativeSurface() delete m_surfaceController; } -Q3DValueAxis *DeclarativeSurface::axisX() const +QValue3DAxis *DeclarativeSurface::axisX() const { - return static_cast<Q3DValueAxis *>(m_surfaceController->axisX()); + return static_cast<QValue3DAxis *>(m_surfaceController->axisX()); } -void DeclarativeSurface::setAxisX(Q3DValueAxis *axis) +void DeclarativeSurface::setAxisX(QValue3DAxis *axis) { m_surfaceController->setAxisX(axis); } -Q3DValueAxis *DeclarativeSurface::axisY() const +QValue3DAxis *DeclarativeSurface::axisY() const { - return static_cast<Q3DValueAxis *>(m_surfaceController->axisY()); + return static_cast<QValue3DAxis *>(m_surfaceController->axisY()); } -void DeclarativeSurface::setAxisY(Q3DValueAxis *axis) +void DeclarativeSurface::setAxisY(QValue3DAxis *axis) { m_surfaceController->setAxisY(axis); } -Q3DValueAxis *DeclarativeSurface::axisZ() const +QValue3DAxis *DeclarativeSurface::axisZ() const { - return static_cast<Q3DValueAxis *>(m_surfaceController->axisZ()); + return static_cast<QValue3DAxis *>(m_surfaceController->axisZ()); } -void DeclarativeSurface::setAxisZ(Q3DValueAxis *axis) +void DeclarativeSurface::setAxisZ(QValue3DAxis *axis) { m_surfaceController->setAxisZ(axis); } @@ -124,4 +113,19 @@ void DeclarativeSurface::removeSeries(QSurface3DSeries *series) series->setParent(this); // Reparent as removing will leave series parentless } -QT_DATAVISUALIZATION_END_NAMESPACE +void DeclarativeSurface::handleAxisXChanged(QAbstract3DAxis *axis) +{ + emit axisXChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeSurface::handleAxisYChanged(QAbstract3DAxis *axis) +{ + emit axisYChanged(static_cast<QValue3DAxis *>(axis)); +} + +void DeclarativeSurface::handleAxisZChanged(QAbstract3DAxis *axis) +{ + emit axisZChanged(static_cast<QValue3DAxis *>(axis)); +} + +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativesurface_p.h b/src/datavisualizationqml2/declarativesurface_p.h index 2c9c2803..b354fe59 100644 --- a/src/datavisualizationqml2/declarativesurface_p.h +++ b/src/datavisualizationqml2/declarativesurface_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -33,7 +33,7 @@ #include "abstractdeclarative_p.h" #include "surface3dcontroller_p.h" #include "declarativesurface_p.h" -#include "q3dvalueaxis.h" +#include "qvalue3daxis.h" #include "qsurfacedataproxy.h" #include "qsurface3dseries.h" @@ -42,14 +42,14 @@ #include <QObject> #include <QQuickWindow> -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION class DeclarativeSurface : public AbstractDeclarative { Q_OBJECT - Q_PROPERTY(Q3DValueAxis *axisX READ axisX WRITE setAxisX NOTIFY axisXChanged) - Q_PROPERTY(Q3DValueAxis *axisY READ axisY WRITE setAxisY NOTIFY axisYChanged) - Q_PROPERTY(Q3DValueAxis *axisZ READ axisZ WRITE setAxisZ NOTIFY axisZChanged) + 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) Q_PROPERTY(QQmlListProperty<QSurface3DSeries> seriesList READ seriesList) Q_CLASSINFO("DefaultProperty", "seriesList") @@ -57,12 +57,12 @@ public: explicit DeclarativeSurface(QQuickItem *parent = 0); ~DeclarativeSurface(); - Q3DValueAxis *axisX() const; - void setAxisX(Q3DValueAxis *axis); - Q3DValueAxis *axisY() const; - void setAxisY(Q3DValueAxis *axis); - Q3DValueAxis *axisZ() const; - void setAxisZ(Q3DValueAxis *axis); + QValue3DAxis *axisX() const; + void setAxisX(QValue3DAxis *axis); + QValue3DAxis *axisY() const; + void setAxisY(QValue3DAxis *axis); + QValue3DAxis *axisZ() const; + void setAxisZ(QValue3DAxis *axis); QQmlListProperty<QSurface3DSeries> seriesList(); static void appendSeriesFunc(QQmlListProperty<QSurface3DSeries> *list, QSurface3DSeries *series); @@ -72,15 +72,20 @@ 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(Q3DValueAxis *axis); - void axisYChanged(Q3DValueAxis *axis); - void axisZChanged(Q3DValueAxis *axis); + void axisXChanged(QValue3DAxis *axis); + void axisYChanged(QValue3DAxis *axis); + void axisZChanged(QValue3DAxis *axis); private: Surface3DController *m_surfaceController; }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/declarativetheme.cpp b/src/datavisualizationqml2/declarativetheme.cpp index 6c804397..5aec2408 100644 --- a/src/datavisualizationqml2/declarativetheme.cpp +++ b/src/datavisualizationqml2/declarativetheme.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -18,7 +18,7 @@ #include "declarativetheme_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +QT_BEGIN_NAMESPACE_DATAVISUALIZATION DeclarativeTheme3D::DeclarativeTheme3D(QObject *parent) : Q3DTheme(parent), @@ -29,6 +29,7 @@ DeclarativeTheme3D::DeclarativeTheme3D(QObject *parent) m_dummyGradients(false), m_dummyColors(false) { + connect(this, &Q3DTheme::typeChanged, this, &DeclarativeTheme3D::handleTypeChange); } DeclarativeTheme3D::~DeclarativeTheme3D() @@ -48,6 +49,23 @@ void DeclarativeTheme3D::appendSeriesChildren(QQmlListProperty<QObject> *list, Q // Nothing to do, seriesChildren is there only to enable scoping gradient items in Theme3D item. } +void DeclarativeTheme3D::handleTypeChange(Theme themeType) +{ + Q_UNUSED(themeType) + + // Theme changed, disconnect base color/gradient connections + if (!m_colors.isEmpty()) { + foreach (DeclarativeColor *item, m_colors) + disconnect(item, 0, this, 0); + m_colors.clear(); + } + if (!m_gradients.isEmpty()) { + foreach (ColorGradient *item, m_gradients) + disconnect(item, 0, this, 0); + m_gradients.clear(); + } +} + void DeclarativeTheme3D::handleBaseColorUpdate() { int colorCount = m_colors.size(); @@ -150,6 +168,19 @@ ColorGradient *DeclarativeTheme3D::multiHighlightGradient() const return m_multiHLGradient; } +void DeclarativeTheme3D::classBegin() +{ + // Turn off predefined type forcing for the duration of initial class construction + // so that predefined type customization can be done. + d_ptr->setForcePredefinedType(false); +} + +void DeclarativeTheme3D::componentComplete() +{ + d_ptr->setForcePredefinedType(true); +} + + void DeclarativeTheme3D::setThemeGradient(ColorGradient *gradient, GradientType type) { QLinearGradient newGradient = convertGradient(gradient); @@ -217,7 +248,7 @@ void DeclarativeTheme3D::addColor(DeclarativeColor *color) QList<DeclarativeColor *> DeclarativeTheme3D::colorList() { if (m_colors.isEmpty()) { - // Create dummy ThemeColors from theme's gradients + // Create dummy ThemeColors from theme's colors m_dummyColors = true; QList<QColor> list = Q3DTheme::baseColors(); foreach (QColor item, list) { @@ -359,4 +390,4 @@ void DeclarativeTheme3D::clearBaseGradientsFunc(QQmlListProperty<ColorGradient> reinterpret_cast<DeclarativeTheme3D *>(list->data)->clearGradients(); } -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualizationqml2/declarativetheme_p.h b/src/datavisualizationqml2/declarativetheme_p.h index 79c1f5c9..8101cf71 100644 --- a/src/datavisualizationqml2/declarativetheme_p.h +++ b/src/datavisualizationqml2/declarativetheme_p.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc +** Copyright (C) 2014 Digia Plc ** All rights reserved. ** For any questions to Digia, please use contact form at http://qt.digia.com ** @@ -32,13 +32,16 @@ #include "datavisualizationglobal_p.h" #include "declarativecolor_p.h" #include "colorgradient_p.h" -#include "q3dtheme.h" +#include "q3dtheme_p.h" -QT_DATAVISUALIZATION_BEGIN_NAMESPACE +#include <QtQml/qqmlparserstatus.h> -class DeclarativeTheme3D : public Q3DTheme +QT_BEGIN_NAMESPACE_DATAVISUALIZATION + +class DeclarativeTheme3D : public Q3DTheme, public QQmlParserStatus { Q_OBJECT + Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QQmlListProperty<QObject> seriesChildren READ seriesChildren) Q_PROPERTY(QQmlListProperty<DeclarativeColor> baseColors READ baseColors) Q_PROPERTY(QQmlListProperty<ColorGradient> baseGradients READ baseGradients) @@ -73,11 +76,16 @@ public: void setMultiHighlightGradient(ColorGradient *gradient); ColorGradient *multiHighlightGradient() const; + // From QQmlParserStatus + virtual void classBegin(); + virtual void componentComplete(); + signals: void singleHighlightGradientChanged(ColorGradient *gradient); void multiHighlightGradientChanged(ColorGradient *gradient); protected: + void handleTypeChange(Theme themeType); void handleBaseColorUpdate(); void handleBaseGradientUpdate(); void handleSingleHLGradientUpdate(); @@ -113,6 +121,6 @@ private: bool m_dummyColors; }; -QT_DATAVISUALIZATION_END_NAMESPACE +QT_END_NAMESPACE_DATAVISUALIZATION #endif diff --git a/src/datavisualizationqml2/qmldir b/src/datavisualizationqml2/qmldir index 601861d8..bbd17868 100644 --- a/src/datavisualizationqml2/qmldir +++ b/src/datavisualizationqml2/qmldir @@ -1,3 +1,4 @@ module QtDataVisualization plugin datavisualizationqml2 +classname QtDataVisualizationQml2Plugin |