summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/surface3dcontroller.cpp
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2013-11-26 15:48:51 +0200
committerMika Salmela <mika.salmela@digia.com>2013-11-27 11:30:44 +0200
commitde3661089cb85701d7444bbf517711783df3aa49 (patch)
treee833426f16198da680101c9720c00ab4bcd2a678 /src/datavisualization/engine/surface3dcontroller.cpp
parent7c942cc0f497fe7e61ce6a10fce45771c0858e09 (diff)
Better proxy API for surface
Part 1, row change. More is on the way. Change-Id: I4e152a5160275f2d629e7793d4d40b85082a2fc2 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/surface3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index 54614576..5b603a62 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -38,7 +38,9 @@ Surface3DController::Surface3DController(QRect rect)
m_isSurfaceEnabled(true),
m_isSurfaceGridEnabled(true),
m_selectedPoint(invalidSelectionPosition()),
- m_selectedSeries(0)
+ m_selectedSeries(0),
+ m_rowsChangeStartId(0),
+ m_rowsChangeCount(0)
{
// Setting a null axis creates a new default axis according to orientation and graph type.
// Note: these cannot be set in the Abstract3DController constructor, as they will call virtual
@@ -97,10 +99,16 @@ void Surface3DController::synchDataToRenderer()
emit smoothSurfaceEnabledChanged(m_isSmoothSurfaceEnabled);
}
+ if (m_changeTracker.rowsChanged) {
+ m_renderer->updateRows(m_rowsChangeStartId, m_rowsChangeCount);
+ m_changeTracker.rowsChanged = false;
+ }
+
if (m_changeTracker.selectedPointChanged) {
m_renderer->updateSelectedPoint(m_selectedPoint, m_selectedSeries);
m_changeTracker.selectedPointChanged = false;
}
+
}
void Surface3DController::handleAxisAutoAdjustRangeChangedInOrientation(Q3DAbstractAxis::AxisOrientation orientation, bool autoAdjust)
@@ -339,6 +347,22 @@ void Surface3DController::handlePointClicked(const QPoint &position, QSurface3DS
// TODO: Also hover needed? (QTRD-2131)
}
+void Surface3DController::handleRowsChanged(int startIndex, int count)
+{
+ QSurfaceDataProxy *sender = static_cast<QSurfaceDataProxy *>(QObject::sender());
+ if (static_cast<QSurface3DSeries *>(m_seriesList.at(0)) == sender->series()) {
+ // Change is for the visible series, put the change to queue
+ m_rowsChangeStartId = startIndex;
+ m_rowsChangeCount = count;
+ m_changeTracker.rowsChanged = true;
+
+ adjustValueAxisRange();
+ // Clear selection unless still valid
+ setSelectedPoint(m_selectedPoint, m_selectedSeries);
+ emitNeedRender();
+ }
+}
+
void Surface3DController::handleRequestSmoothSurface(bool enable)
{
setSmoothSurface(enable);
@@ -352,7 +376,7 @@ void Surface3DController::adjustValueAxisRange()
QVector3D maxLimits;
QSurface3DSeries *series = static_cast<QSurface3DSeries *>(m_seriesList.at(0));
static_cast<QSurfaceDataProxy *>(series->dataProxy())->dptrc()->limitValues(minLimits,
- maxLimits);
+ maxLimits);
Q3DValueAxis *valueAxis = static_cast<Q3DValueAxis *>(m_axisX);
if (valueAxis && valueAxis->isAutoAdjustRange()) {
if (minLimits.x() != maxLimits.x())