summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3dcontroller_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller_p.h')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h141
1 files changed, 111 insertions, 30 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index 06be450e..0e4d1add 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -33,25 +33,25 @@
#include "qabstract3daxis.h"
#include "drawer_p.h"
#include "qabstract3dinputhandler.h"
-#include "qabstractdataproxy.h"
+#include "qabstract3dgraph.h"
#include "q3dscene_p.h"
+#include "qcustom3ditem.h"
#include <QtGui/QLinearGradient>
+#include <QtCore/QTime>
-class QFont;
+class QOpenGLFramebufferObject;
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
-class CameraHelper;
class Abstract3DRenderer;
class QAbstract3DSeries;
class ThemeManager;
struct Abstract3DChangeBitField {
- bool zoomLevelChanged : 1;
bool themeChanged : 1;
bool shadowQualityChanged : 1;
bool selectionModeChanged : 1;
- bool objFileChanged : 1;
+ bool optimizationHintChanged : 1;
bool axisXTypeChanged : 1;
bool axisYTypeChanged : 1;
bool axisZTypeChanged : 1;
@@ -73,15 +73,29 @@ struct Abstract3DChangeBitField {
bool axisXLabelFormatChanged : 1;
bool axisYLabelFormatChanged : 1;
bool axisZLabelFormatChanged : 1;
- bool inputViewChanged : 1;
- bool inputPositionChanged : 1;
+ bool axisXReversedChanged : 1;
+ bool axisYReversedChanged : 1;
+ bool axisZReversedChanged : 1;
+ bool axisXFormatterChanged : 1;
+ bool axisYFormatterChanged : 1;
+ bool axisZFormatterChanged : 1;
+ bool projectionChanged : 1;
+ bool axisXLabelAutoRotationChanged : 1;
+ bool axisYLabelAutoRotationChanged : 1;
+ bool axisZLabelAutoRotationChanged : 1;
+ bool aspectRatioChanged : 1;
+ bool axisXTitleVisibilityChanged : 1;
+ bool axisYTitleVisibilityChanged : 1;
+ bool axisZTitleVisibilityChanged : 1;
+ bool axisXTitleFixedChanged : 1;
+ bool axisYTitleFixedChanged : 1;
+ bool axisZTitleFixedChanged : 1;
Abstract3DChangeBitField() :
- zoomLevelChanged(true),
themeChanged(true),
shadowQualityChanged(true),
selectionModeChanged(true),
- objFileChanged(true),
+ optimizationHintChanged(true),
axisXTypeChanged(true),
axisYTypeChanged(true),
axisZTypeChanged(true),
@@ -102,7 +116,24 @@ struct Abstract3DChangeBitField {
axisZSubSegmentCountChanged(true),
axisXLabelFormatChanged(true),
axisYLabelFormatChanged(true),
- axisZLabelFormatChanged(true)
+ axisZLabelFormatChanged(true),
+ axisXReversedChanged(true),
+ axisYReversedChanged(true),
+ axisZReversedChanged(true),
+ axisXFormatterChanged(true),
+ axisYFormatterChanged(true),
+ axisZFormatterChanged(true),
+ projectionChanged(true),
+ axisXLabelAutoRotationChanged(true),
+ axisYLabelAutoRotationChanged(true),
+ axisZLabelAutoRotationChanged(true),
+ aspectRatioChanged(true),
+ axisXTitleVisibilityChanged(true),
+ axisYTitleVisibilityChanged(true),
+ axisZTitleVisibilityChanged(true),
+ axisXTitleFixedChanged(true),
+ axisYTitleFixedChanged(true),
+ axisZTitleFixedChanged(true)
{
}
};
@@ -119,28 +150,19 @@ public:
SelectionColumn
};
- enum MouseState {
- MouseNone = 0,
- MouseOnScene,
- MouseOnOverview,
- MouseOnZoom,
- MouseRotating,
- MouseOnPinch
- };
-
private:
Abstract3DChangeBitField m_changeTracker;
- GLfloat m_horizontalRotation;
- GLfloat m_verticalRotation;
ThemeManager *m_themeManager;
QAbstract3DGraph::SelectionFlags m_selectionMode;
QAbstract3DGraph::ShadowQuality m_shadowQuality;
+ bool m_useOrthoProjection;
+ float m_aspectRatio;
+ QAbstract3DGraph::OptimizationHints m_optimizationHints;
protected:
Q3DScene *m_scene;
QList<QAbstract3DInputHandler *> m_inputHandlers; // List of all added input handlers
QAbstract3DInputHandler *m_activeInputHandler;
- CameraHelper *m_cameraHelper;
// Active axes
QAbstract3DAxis *m_axisX;
QAbstract3DAxis *m_axisY;
@@ -149,12 +171,22 @@ protected:
QList<QAbstract3DAxis *> m_axes; // List of all added axes
Abstract3DRenderer *m_renderer;
bool m_isDataDirty;
- bool m_isSeriesVisibilityDirty;
+ bool m_isCustomDataDirty;
+ bool m_isCustomItemDirty;
bool m_isSeriesVisualsDirty;
bool m_renderPending;
QList<QAbstract3DSeries *> m_seriesList;
+ bool m_measureFps;
+ QTime m_frameTimer;
+ int m_numFrames;
+ qreal m_currentFps;
+
+ QVector<QAbstract3DSeries *> m_changedSeriesList;
+
+ QList<QCustom3DItem *> m_customItems;
+
explicit Abstract3DController(QRect initialViewport, Q3DScene *scene, QObject *parent = 0);
public:
@@ -173,11 +205,11 @@ public:
QList<QAbstract3DSeries *> seriesList();
virtual void setAxisX(QAbstract3DAxis *axis);
- virtual QAbstract3DAxis *axisX();
+ virtual QAbstract3DAxis *axisX() const;
virtual void setAxisY(QAbstract3DAxis *axis);
- virtual QAbstract3DAxis *axisY();
+ virtual QAbstract3DAxis *axisY() const;
virtual void setAxisZ(QAbstract3DAxis *axis);
- virtual QAbstract3DAxis *axisZ();
+ virtual QAbstract3DAxis *axisZ() const;
virtual void addAxis(QAbstract3DAxis *axis);
virtual void releaseAxis(QAbstract3DAxis *axis);
virtual QList<QAbstract3DAxis *> axes() const; // Omits default axes
@@ -188,12 +220,9 @@ public:
virtual QAbstract3DInputHandler *activeInputHandler();
virtual QList<QAbstract3DInputHandler *> inputHandlers() const;
- virtual int zoomLevel();
- virtual void setZoomLevel(int zoomLevel);
-
virtual void addTheme(Q3DTheme *theme);
virtual void releaseTheme(Q3DTheme *theme);
- virtual void setActiveTheme(Q3DTheme *theme);
+ virtual void setActiveTheme(Q3DTheme *theme, bool force = true);
virtual Q3DTheme *activeTheme() const;
virtual QList<Q3DTheme *> themes() const;
@@ -201,9 +230,13 @@ public:
virtual QAbstract3DGraph::SelectionFlags selectionMode() const;
virtual void setShadowQuality(QAbstract3DGraph::ShadowQuality quality);
+ virtual void doSetShadowQuality(QAbstract3DGraph::ShadowQuality quality);
virtual QAbstract3DGraph::ShadowQuality shadowQuality() const;
virtual bool shadowsSupported() const;
+ void setOptimizationHints(QAbstract3DGraph::OptimizationHints hints);
+ QAbstract3DGraph::OptimizationHints optimizationHints() const;
+
bool isSlicingActive() const;
void setSlicingActive(bool isSlicing);
@@ -212,6 +245,22 @@ public:
void markDataDirty();
void markSeriesVisualsDirty();
+ void requestRender(QOpenGLFramebufferObject *fbo);
+
+ int addCustomItem(QCustom3DItem *item);
+ void deleteCustomItems();
+ void deleteCustomItem(QCustom3DItem *item);
+ void deleteCustomItem(const QVector3D &position);
+ void releaseCustomItem(QCustom3DItem *item);
+
+ int selectedLabelIndex() const;
+ QAbstract3DAxis *selectedAxis() const;
+ int selectedCustomItemIndex() const;
+ QCustom3DItem *selectedCustomItem() const;
+
+ void setOrthoProjection(bool enable);
+ bool isOrthoProjection() const;
+
void emitNeedRender();
virtual void clearSelection() = 0;
@@ -231,8 +280,16 @@ public:
virtual void handleAxisAutoAdjustRangeChangedInOrientation(
QAbstract3DAxis::AxisOrientation orientation, bool autoAdjust) = 0;
virtual void handleAxisLabelFormatChangedBySender(QObject *sender);
+ virtual void handleAxisReversedChangedBySender(QObject *sender);
+ virtual void handleAxisFormatterDirtyBySender(QObject *sender);
+ virtual void handleAxisLabelAutoRotationChangedBySender(QObject *sender);
+ virtual void handleAxisTitleVisibilityChangedBySender(QObject *sender);
+ virtual void handleAxisTitleFixedChangedBySender(QObject *sender);
virtual void handleSeriesVisibilityChangedBySender(QObject *sender);
virtual void handlePendingClick() = 0;
+ virtual void adjustAxisRanges() = 0;
+
+ void markSeriesItemLabelsDirty();
public slots:
void handleAxisTitleChanged(const QString &title);
@@ -242,6 +299,11 @@ public slots:
void handleAxisSubSegmentCountChanged(int count);
void handleAxisAutoAdjustRangeChanged(bool autoAdjust);
void handleAxisLabelFormatChanged(const QString &format);
+ void handleAxisReversedChanged(bool enable);
+ void handleAxisFormatterDirty();
+ void handleAxisLabelAutoRotationChanged(float angle);
+ void handleAxisTitleVisibilityChanged(bool visible);
+ void handleAxisTitleFixedChanged(bool fixed);
void handleInputViewChanged(QAbstract3DInputHandler::InputView view);
void handleInputPositionChanged(const QPoint &position);
void handleSeriesVisibilityChanged(bool visible);
@@ -258,6 +320,17 @@ public slots:
// Renderer callback handlers
void handleRequestShadowQuality(QAbstract3DGraph::ShadowQuality quality);
+ void setMeasureFps(bool enable);
+ inline bool measureFps() const { return m_measureFps; }
+ inline qreal currentFps() const { return m_currentFps; }
+
+ QAbstract3DGraph::ElementType selectedElement() const;
+
+ void updateCustomItem();
+
+ void setAspectRatio(float ratio);
+ float aspectRatio();
+
signals:
void shadowQualityChanged(QAbstract3DGraph::ShadowQuality quality);
void activeInputHandlerChanged(QAbstract3DInputHandler *inputHandler);
@@ -267,6 +340,12 @@ signals:
void axisXChanged(QAbstract3DAxis *axis);
void axisYChanged(QAbstract3DAxis *axis);
void axisZChanged(QAbstract3DAxis *axis);
+ void elementSelected(QAbstract3DGraph::ElementType type);
+ void measureFpsChanged(bool enabled);
+ void currentFpsChanged(qreal fps);
+ void orthoProjectionChanged(bool enabled);
+ void aspectRatioChanged(float ratio);
+ void optimizationHintsChanged(QAbstract3DGraph::OptimizationHints hints);
protected:
virtual QAbstract3DAxis *createDefaultAxis(QAbstract3DAxis::AxisOrientation orientation);
@@ -278,7 +357,9 @@ private:
void setAxisHelper(QAbstract3DAxis::AxisOrientation orientation, QAbstract3DAxis *axis,
QAbstract3DAxis **axisPtr);
+ friend class AbstractDeclarative;
friend class Bars3DController;
+ friend class QAbstract3DGraphPrivate;
};
QT_END_NAMESPACE_DATAVISUALIZATION