summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/abstract3dcontroller.cpp
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-11 13:22:54 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2013-11-15 08:24:15 +0200
commit999ffa01d20f75a457da62d41c0fabfc32e5e1bb (patch)
treec5267f6831d5ff61444f85b2110f7150e20d3451 /src/datavisualization/engine/abstract3dcontroller.cpp
parentbbb874d0591215164b2030db60dc9d6a95f4c8fe (diff)
Basic multiseries support
Task-number: QTRD-2548 Change-Id: Iba324c0e8be56f2b3f8f6c6a992883c134a51a9d Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com> Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp109
1 files changed, 50 insertions, 59 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index ab2d0ac2..c1f3a4b7 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -27,6 +27,7 @@
#include "qabstractdataproxy_p.h"
#include "qabstract3dinputhandler_p.h"
#include "qtouch3dinputhandler.h"
+#include "qabstract3dseries_p.h"
#include <QThread>
@@ -50,7 +51,6 @@ Abstract3DController::Abstract3DController(QRect boundRect, QObject *parent) :
m_axisZ(0),
m_renderer(0),
m_isDataDirty(true),
- m_data(0),
m_renderPending(false)
{
// Set initial theme
@@ -82,11 +82,39 @@ Abstract3DController::~Abstract3DController()
delete m_scene;
}
+/**
+ * @brief setRenderer Sets the renderer to be used. isInitialized returns true from this point onwards.
+ * @param renderer Renderer to be used.
+ */
void Abstract3DController::setRenderer(Abstract3DRenderer *renderer)
{
m_renderer = renderer;
}
+void Abstract3DController::addSeries(QAbstract3DSeries *series)
+{
+ if (series && !m_seriesList.contains(series)) {
+ m_seriesList.append(series);
+ series->d_ptr->setController(this);
+ }
+}
+
+void Abstract3DController::removeSeries(QAbstract3DSeries *series)
+{
+ if (series && series->d_ptr->m_controller == this) {
+ m_seriesList.removeAll(series);
+ series->d_ptr->setController(0);
+ }
+}
+
+QList<QAbstract3DSeries *> Abstract3DController::seriesList()
+{
+ return m_seriesList;
+}
+
+/**
+ * @brief synchDataToRenderer Called on the render thread while main GUI thread is blocked before rendering.
+ */
void Abstract3DController::synchDataToRenderer()
{
// If we don't have a renderer, don't do anything
@@ -334,6 +362,12 @@ void Abstract3DController::synchDataToRenderer()
valueAxisZ->labelFormat());
}
}
+
+ // TODO: Another (per-series?) flag about series visuals being dirty?
+ if (m_isDataDirty) {
+ m_renderer->updateSeriesData(m_seriesList);
+ m_isDataDirty = false;
+ }
}
void Abstract3DController::render(const GLuint defaultFboHandle)
@@ -582,64 +616,6 @@ QList<Q3DAbstractAxis *> Abstract3DController::axes() const
return m_axes;
}
-QAbstractDataProxy *Abstract3DController::activeDataProxy() const
-{
- return m_data;
-}
-
-void Abstract3DController::addDataProxy(QAbstractDataProxy *proxy)
-{
- Q_ASSERT(proxy);
- Abstract3DController *owner = qobject_cast<Abstract3DController *>(proxy->parent());
- if (owner != this) {
- Q_ASSERT_X(!owner, "addDataProxy", "Proxy already attached to a graph.");
- proxy->setParent(this);
- }
- if (!m_dataProxies.contains(proxy))
- m_dataProxies.append(proxy);
-}
-
-void Abstract3DController::releaseDataProxy(QAbstractDataProxy *proxy)
-{
- if (proxy && m_dataProxies.contains(proxy)) {
- // Clear the default status from released default proxies
- if (proxy->d_ptr->isDefaultProxy())
- proxy->d_ptr->setDefaultProxy(false);
-
- // If the proxy is in use, replace it with a temporary one
- if (m_data == proxy)
- setActiveDataProxy(0);
-
- m_dataProxies.removeAll(proxy);
- proxy->setParent(0);
- }
-}
-
-QList<QAbstractDataProxy *> Abstract3DController::dataProxies() const
-{
- return m_dataProxies;
-}
-
-void Abstract3DController::setActiveDataProxy(QAbstractDataProxy *proxy)
-{
- // If existing proxy is the default proxy, delete it
- if (m_data) {
- if (m_data->d_ptr->isDefaultProxy()) {
- m_dataProxies.removeAll(m_data);
- delete m_data;
- } else {
- // Disconnect the old proxy from use
- QObject::disconnect(m_data, 0, this, 0);
- }
- }
-
- // Assume ownership and activate
- addDataProxy(proxy);
- m_data = proxy;
- m_isDataDirty = true;
- emitNeedRender();
-}
-
void Abstract3DController::addInputHandler(QAbstract3DInputHandler *inputHandler)
{
Q_ASSERT(inputHandler);
@@ -1113,6 +1089,13 @@ void Abstract3DController::handleInputPositionChanged(const QPoint &position)
emitNeedRender();
}
+void Abstract3DController::handleSeriesVisibilityChanged(bool visible)
+{
+ Q_UNUSED(visible)
+
+ handleSeriesVisibilityChangedBySender(sender());
+}
+
void Abstract3DController::handleRequestShadowQuality(QDataVis::ShadowQuality quality)
{
setShadowQuality(quality);
@@ -1136,6 +1119,14 @@ void Abstract3DController::handleAxisLabelFormatChangedBySender(QObject *sender)
emitNeedRender();
}
+void Abstract3DController::handleSeriesVisibilityChangedBySender(QObject *sender)
+{
+ Q_UNUSED(sender)
+
+ m_isDataDirty = true;
+ emitNeedRender();
+}
+
void Abstract3DController::setAxisHelper(Q3DAbstractAxis::AxisOrientation orientation,
Q3DAbstractAxis *axis, Q3DAbstractAxis **axisPtr)
{