summaryrefslogtreecommitdiffstats
path: root/src/datavisualizationqml/abstractdeclarative_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualizationqml/abstractdeclarative_p.h')
-rw-r--r--src/datavisualizationqml/abstractdeclarative_p.h297
1 files changed, 297 insertions, 0 deletions
diff --git a/src/datavisualizationqml/abstractdeclarative_p.h b/src/datavisualizationqml/abstractdeclarative_p.h
new file mode 100644
index 00000000..090738c5
--- /dev/null
+++ b/src/datavisualizationqml/abstractdeclarative_p.h
@@ -0,0 +1,297 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+//
+// 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 ABSTRACTDECLARATIVE_P_H
+#define ABSTRACTDECLARATIVE_P_H
+
+#include "declarativescene_p.h"
+
+#include <private/datavisualizationglobal_p.h>
+#include <private/abstract3dcontroller_p.h>
+#include <QtDataVisualization/private/abstractdeclarativeinterface_p.h>
+
+#include <QtQuick/QQuickItem>
+#include <QtCore/QPointer>
+#include <QtCore/QThread>
+#include <QtCore/QMutex>
+#include <QtCore/QSharedPointer>
+
+class GLStateStore;
+
+QT_BEGIN_NAMESPACE
+
+class AbstractDeclarative : public QQuickItem, public AbstractDeclarativeInterface
+{
+ Q_OBJECT
+ Q_PROPERTY(SelectionFlags selectionMode READ selectionMode WRITE setSelectionMode NOTIFY selectionModeChanged)
+ Q_PROPERTY(ShadowQuality shadowQuality READ shadowQuality WRITE setShadowQuality NOTIFY shadowQualityChanged)
+ Q_PROPERTY(bool shadowsSupported READ shadowsSupported NOTIFY shadowsSupportedChanged)
+ Q_PROPERTY(int msaaSamples READ msaaSamples WRITE setMsaaSamples NOTIFY msaaSamplesChanged)
+ 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(RenderingMode renderingMode READ renderingMode WRITE setRenderingMode NOTIFY renderingModeChanged)
+ Q_PROPERTY(bool measureFps READ measureFps WRITE setMeasureFps NOTIFY measureFpsChanged REVISION(1, 1))
+ Q_PROPERTY(qreal currentFps READ currentFps NOTIFY currentFpsChanged REVISION(1, 1))
+ Q_PROPERTY(QQmlListProperty<QCustom3DItem> customItemList READ customItemList REVISION(1, 1))
+ Q_PROPERTY(bool orthoProjection READ isOrthoProjection WRITE setOrthoProjection NOTIFY orthoProjectionChanged REVISION(1, 1))
+ Q_PROPERTY(ElementType selectedElement READ selectedElement NOTIFY selectedElementChanged REVISION(1, 1))
+ Q_PROPERTY(qreal aspectRatio READ aspectRatio WRITE setAspectRatio NOTIFY aspectRatioChanged REVISION(1, 1))
+ Q_PROPERTY(OptimizationHints optimizationHints READ optimizationHints WRITE setOptimizationHints NOTIFY optimizationHintsChanged REVISION(1, 1))
+ Q_PROPERTY(bool polar READ isPolar WRITE setPolar NOTIFY polarChanged REVISION(1, 2))
+ Q_PROPERTY(float radialLabelOffset READ radialLabelOffset WRITE setRadialLabelOffset NOTIFY radialLabelOffsetChanged REVISION(1, 2))
+ Q_PROPERTY(qreal horizontalAspectRatio READ horizontalAspectRatio WRITE setHorizontalAspectRatio NOTIFY horizontalAspectRatioChanged REVISION(1, 2))
+ Q_PROPERTY(bool reflection READ isReflection WRITE setReflection NOTIFY reflectionChanged REVISION(1, 2))
+ Q_PROPERTY(qreal reflectivity READ reflectivity WRITE setReflectivity NOTIFY reflectivityChanged REVISION(1, 2))
+ Q_PROPERTY(QLocale locale READ locale WRITE setLocale NOTIFY localeChanged REVISION(1, 2))
+ Q_PROPERTY(QVector3D queriedGraphPosition READ queriedGraphPosition NOTIFY queriedGraphPositionChanged REVISION(1, 2))
+ Q_PROPERTY(qreal margin READ margin WRITE setMargin NOTIFY marginChanged REVISION(1, 2))
+
+ QML_NAMED_ELEMENT(AbstractGraph3D)
+ QML_ADDED_IN_VERSION(1, 0)
+ QML_UNCREATABLE("Trying to create uncreatable: AbstractGraph3D.")
+
+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
+ };
+
+ enum ElementType {
+ ElementNone = 0,
+ ElementSeries,
+ ElementAxisXLabel,
+ ElementAxisYLabel,
+ ElementAxisZLabel,
+ ElementCustomItem
+ };
+
+ enum RenderingMode {
+ RenderDirectToBackground = 0,
+ RenderDirectToBackground_NoClear,
+ RenderIndirect
+ };
+
+ enum OptimizationHint {
+ OptimizationDefault = 0,
+ OptimizationStatic = 1
+ };
+ Q_DECLARE_FLAGS(OptimizationHints, OptimizationHint)
+
+ Q_ENUM(ShadowQuality)
+ Q_ENUM(RenderingMode)
+ Q_ENUM(ElementType)
+ Q_ENUM(SelectionFlag)
+ Q_ENUM(OptimizationHint)
+ Q_FLAGS(SelectionFlag SelectionFlags)
+ Q_FLAGS(OptimizationHint OptimizationHints)
+
+public:
+ explicit AbstractDeclarative(QQuickItem *parent = 0);
+ virtual ~AbstractDeclarative();
+
+ virtual void setRenderingMode(RenderingMode mode);
+ virtual AbstractDeclarative::RenderingMode renderingMode() const;
+
+ virtual void setSelectionMode(SelectionFlags mode);
+ virtual AbstractDeclarative::SelectionFlags selectionMode() const;
+
+ virtual void setShadowQuality(ShadowQuality quality);
+ virtual AbstractDeclarative::ShadowQuality shadowQuality() const;
+
+ virtual AbstractDeclarative::ElementType selectedElement() const;
+
+ virtual bool shadowsSupported() const;
+
+ virtual void setMsaaSamples(int samples);
+ virtual int msaaSamples() const;
+
+ virtual Declarative3DScene *scene() const;
+
+ virtual QAbstract3DInputHandler *inputHandler() const;
+ virtual void setInputHandler(QAbstract3DInputHandler *inputHandler);
+
+ virtual void setTheme(Q3DTheme *theme);
+ virtual Q3DTheme *theme() const;
+
+ Q_INVOKABLE virtual void clearSelection();
+
+ Q_REVISION(6, 3) Q_INVOKABLE virtual bool hasSeries(QAbstract3DSeries *series);
+
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int addCustomItem(QCustom3DItem *item);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItems();
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItem(QCustom3DItem *item);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void removeCustomItemAt(const QVector3D &position);
+ Q_REVISION(1, 1) Q_INVOKABLE virtual void releaseCustomItem(QCustom3DItem *item);
+
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int selectedLabelIndex() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual QAbstract3DAxis *selectedAxis() const;
+
+ Q_REVISION(1, 1) Q_INVOKABLE virtual int selectedCustomItemIndex() const;
+ Q_REVISION(1, 1) Q_INVOKABLE virtual QCustom3DItem *selectedCustomItem() const;
+
+ QQmlListProperty<QCustom3DItem> customItemList();
+ static void appendCustomItemFunc(QQmlListProperty<QCustom3DItem> *list,
+ QCustom3DItem *item);
+ static qsizetype countCustomItemFunc(QQmlListProperty<QCustom3DItem> *list);
+ static QCustom3DItem *atCustomItemFunc(QQmlListProperty<QCustom3DItem> *list, qsizetype index);
+ static void clearCustomItemFunc(QQmlListProperty<QCustom3DItem> *list);
+
+ void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
+
+ void setSharedController(Abstract3DController *controller);
+ // Used to synch up data model from controller to renderer while main thread is locked
+ void synchDataToRenderer();
+ void render();
+
+ void activateOpenGLContext(QQuickWindow *window);
+ void doneOpenGLContext(QQuickWindow *window);
+
+ void checkWindowList(QQuickWindow *window);
+
+ void setMeasureFps(bool enable);
+ bool measureFps() const;
+ qreal currentFps() const;
+
+ void setOrthoProjection(bool enable);
+ bool isOrthoProjection() const;
+
+ void setAspectRatio(qreal ratio);
+ qreal aspectRatio() const;
+
+ void setOptimizationHints(OptimizationHints hints);
+ OptimizationHints optimizationHints() const;
+
+ void setPolar(bool enable);
+ bool isPolar() const;
+
+ void setRadialLabelOffset(float offset);
+ float radialLabelOffset() const;
+
+ void setHorizontalAspectRatio(qreal ratio);
+ qreal horizontalAspectRatio() const;
+
+ void setReflection(bool enable);
+ bool isReflection() const;
+
+ void setReflectivity(qreal reflectivity);
+ qreal reflectivity() const;
+
+ void setLocale(const QLocale &locale);
+ QLocale locale() const;
+
+ QVector3D queriedGraphPosition() const;
+
+ void setMargin(qreal margin);
+ qreal margin() const;
+
+ QMutex *mutex() { return &m_mutex; }
+
+ bool isReady() const override { return isComponentComplete(); }
+
+public Q_SLOTS:
+ virtual void handleAxisXChanged(QAbstract3DAxis *axis) = 0;
+ virtual void handleAxisYChanged(QAbstract3DAxis *axis) = 0;
+ virtual void handleAxisZChanged(QAbstract3DAxis *axis) = 0;
+ void windowDestroyed(QObject *obj);
+ void destroyContext();
+
+protected:
+ void mouseDoubleClickEvent(QMouseEvent *event) override;
+ void touchEvent(QTouchEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+#if QT_CONFIG(wheelevent)
+ void wheelEvent(QWheelEvent *event) override;
+#endif
+ virtual void handleWindowChanged(QQuickWindow *win);
+ void itemChange(ItemChange change, const ItemChangeData &value) override;
+ virtual void updateWindowParameters();
+ virtual void handleSelectionModeChange(QAbstract3DGraph::SelectionFlags mode);
+ virtual void handleShadowQualityChange(QAbstract3DGraph::ShadowQuality quality);
+ virtual void handleSelectedElementChange(QAbstract3DGraph::ElementType type);
+ virtual void handleOptimizationHintChange(QAbstract3DGraph::OptimizationHints hints);
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+Q_SIGNALS:
+ void selectionModeChanged(AbstractDeclarative::SelectionFlags mode);
+ void shadowQualityChanged(AbstractDeclarative::ShadowQuality quality);
+ void shadowsSupportedChanged(bool supported);
+ void msaaSamplesChanged(int samples);
+ void sceneChanged(Q3DScene *scene);
+ void inputHandlerChanged(QAbstract3DInputHandler *inputHandler);
+ void themeChanged(Q3DTheme *theme);
+ void renderingModeChanged(AbstractDeclarative::RenderingMode mode);
+ Q_REVISION(1, 1) void measureFpsChanged(bool enabled);
+ Q_REVISION(1, 1) void currentFpsChanged(qreal fps);
+ Q_REVISION(1, 1) void selectedElementChanged(AbstractDeclarative::ElementType type);
+ Q_REVISION(1, 1) void orthoProjectionChanged(bool enabled);
+ Q_REVISION(1, 1) void aspectRatioChanged(qreal ratio);
+ Q_REVISION(1, 1) void optimizationHintsChanged(AbstractDeclarative::OptimizationHints hints);
+ Q_REVISION(1, 2) void polarChanged(bool enabled);
+ Q_REVISION(1, 2) void radialLabelOffsetChanged(float offset);
+ Q_REVISION(1, 2) void horizontalAspectRatioChanged(qreal ratio);
+ Q_REVISION(1, 2) void reflectionChanged(bool enabled);
+ Q_REVISION(1, 2) void reflectivityChanged(qreal reflectivity);
+ Q_REVISION(1, 2) void localeChanged(const QLocale &locale);
+ Q_REVISION(1, 2) void queriedGraphPositionChanged(const QVector3D &data);
+ Q_REVISION(1, 2) void marginChanged(qreal margin);
+
+protected:
+ QSharedPointer<QMutex> m_nodeMutex;
+
+private:
+ QPointer<Abstract3DController> m_controller;
+ QRectF m_cachedGeometry;
+ QPointer<QQuickWindow> m_contextWindow;
+ AbstractDeclarative::RenderingMode m_renderMode;
+ int m_samples;
+ int m_windowSamples;
+ QSize m_initialisedSize;
+ union {
+ QObject *m_contextOrStateStore;
+ QOpenGLContext *m_context;
+ GLStateStore *m_stateStore;
+ };
+ QPointer<QOpenGLContext> m_qtContext;
+ QThread *m_mainThread;
+ QThread *m_contextThread;
+ bool m_runningInDesigner;
+ QMutex m_mutex;
+};
+Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::SelectionFlags)
+Q_DECLARE_OPERATORS_FOR_FLAGS(AbstractDeclarative::OptimizationHints)
+
+QT_END_NAMESPACE
+
+#endif