summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/scatter3dcontroller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/scatter3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/scatter3dcontroller.cpp70
1 files changed, 38 insertions, 32 deletions
diff --git a/src/datavisualization/engine/scatter3dcontroller.cpp b/src/datavisualization/engine/scatter3dcontroller.cpp
index a894101f..11a2d03f 100644
--- a/src/datavisualization/engine/scatter3dcontroller.cpp
+++ b/src/datavisualization/engine/scatter3dcontroller.cpp
@@ -22,6 +22,7 @@
#include "q3dabstractaxis_p.h"
#include "q3dvalueaxis_p.h"
#include "qscatterdataproxy_p.h"
+#include "qscatter3dseries_p.h"
#include <QMatrix4x4>
#include <qmath.h>
@@ -36,8 +37,6 @@ Scatter3DController::Scatter3DController(QRect boundRect)
// Default object type; specific to scatter
setObjectType(QDataVis::MeshStyleSpheres, false);
- setActiveDataProxy(new QScatterDataProxy);
-
// Setting a null axis creates a new default axis according to orientation and graph type.
// Note: These cannot be set in Abstract3DController constructor, as they will call virtual
// functions implemented by subclasses.
@@ -77,42 +76,47 @@ void Scatter3DController::synchDataToRenderer()
m_renderer->updateSelectedItemIndex(m_selectedItemIndex);
m_changeTracker.selectedItemIndexChanged = false;
}
-
- if (m_isDataDirty) {
- m_renderer->updateSeriesData(static_cast<QScatterDataProxy *>(m_data));
- m_isDataDirty = false;
- }
}
-void Scatter3DController::setActiveDataProxy(QAbstractDataProxy *proxy)
+void Scatter3DController::addSeries(QAbstract3DSeries *series)
{
- // Setting null proxy indicates default proxy
- if (!proxy) {
- proxy = new QScatterDataProxy;
- proxy->d_ptr->setDefaultProxy(true);
+ Q_ASSERT(series && series->type() == QAbstract3DSeries::SeriesTypeScatter);
+
+ bool firstAdded = !m_seriesList.size();
+
+ Abstract3DController::addSeries(series);
+
+ if (firstAdded) {
+ adjustValueAxisRange();
+ // TODO: Temp until selection by series is properly implemented
+ setSelectedItemIndex(noSelectionIndex());
}
+}
- Q_ASSERT(proxy->type() == QAbstractDataProxy::DataTypeScatter);
+void Scatter3DController::removeSeries(QAbstract3DSeries *series)
+{
+ bool firstRemoved = (m_seriesList.size() && m_seriesList.at(0) == series);
- Abstract3DController::setActiveDataProxy(proxy);
+ Abstract3DController::removeSeries(series);
- QScatterDataProxy *scatterDataProxy = static_cast<QScatterDataProxy *>(m_data);
+ if (firstRemoved) {
+ adjustValueAxisRange();
+ // TODO: Temp until selection by series is properly implemented
+ setSelectedItemIndex(noSelectionIndex());
+ }
+}
- QObject::connect(scatterDataProxy, &QScatterDataProxy::arrayReset,
- this, &Scatter3DController::handleArrayReset);
- QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsAdded,
- this, &Scatter3DController::handleItemsAdded);
- QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsChanged,
- this, &Scatter3DController::handleItemsChanged);
- QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsRemoved,
- this, &Scatter3DController::handleItemsRemoved);
- QObject::connect(scatterDataProxy, &QScatterDataProxy::itemsInserted,
- this, &Scatter3DController::handleItemsInserted);
+QList<QScatter3DSeries *> Scatter3DController::scatterSeriesList()
+{
+ QList<QAbstract3DSeries *> abstractSeriesList = seriesList();
+ QList<QScatter3DSeries *> scatterSeriesList;
+ foreach (QAbstract3DSeries *abstractSeries, abstractSeriesList) {
+ QScatter3DSeries *scatterSeries = qobject_cast<QScatter3DSeries *>(abstractSeries);
+ if (scatterSeries)
+ scatterSeriesList.append(scatterSeries);
+ }
- adjustValueAxisRange();
- setSelectedItemIndex(noSelectionIndex());
- m_isDataDirty = true;
- emitNeedRender();
+ return scatterSeriesList;
}
void Scatter3DController::handleArrayReset()
@@ -150,7 +154,8 @@ void Scatter3DController::handleItemsRemoved(int startIndex, int count)
// TODO should dirty only affected values?
adjustValueAxisRange();
m_isDataDirty = true;
- if (startIndex >= static_cast<QScatterDataProxy *>(m_data)->itemCount())
+ QScatterDataProxy *proxy = qobject_cast<QScatterDataProxy *>(sender());
+ if (!proxy || startIndex >= proxy->itemCount())
setSelectedItemIndex(noSelectionIndex());
emitNeedRender();
}
@@ -243,8 +248,9 @@ void Scatter3DController::adjustValueAxisRange()
{
QVector3D minLimits;
QVector3D maxLimits;
- if (m_data) {
- static_cast<QScatterDataProxy *>(m_data)->dptr()->limitValues(minLimits, maxLimits);
+ if (m_seriesList.size()) {
+ const QScatterDataProxy *proxy = static_cast<QScatter3DSeries *>(m_seriesList.at(0))->dataProxy();
+ proxy->dptrc()->limitValues(minLimits, maxLimits);
Q3DValueAxis *valueAxis = static_cast<Q3DValueAxis *>(m_axisX);
if (valueAxis && valueAxis->isAutoAdjustRange()) {
if (minLimits.x() != maxLimits.x())