summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/surface3dcontroller.cpp
diff options
context:
space:
mode:
authorMika Salmela <mika.salmela@digia.com>2013-12-03 14:00:23 +0200
committerMika Salmela <mika.salmela@digia.com>2013-12-03 14:06:59 +0200
commit344870fb79e647b87aa79b9433eef8237c901e10 (patch)
treef0ccaa5991d9f0304bc6f6f91ce3ffd45232384d /src/datavisualization/engine/surface3dcontroller.cpp
parent2af35db1a112c49991a80f48e3cd8d8814deb321 (diff)
Better proxy API for surface
Part 2, item change. More is on the way. Change-Id: Ic41f3a90b5a47502b741391ace990117ef2eaf80 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/surface3dcontroller.cpp')
-rw-r--r--src/datavisualization/engine/surface3dcontroller.cpp66
1 files changed, 56 insertions, 10 deletions
diff --git a/src/datavisualization/engine/surface3dcontroller.cpp b/src/datavisualization/engine/surface3dcontroller.cpp
index b1586a78..a9c5f508 100644
--- a/src/datavisualization/engine/surface3dcontroller.cpp
+++ b/src/datavisualization/engine/surface3dcontroller.cpp
@@ -37,8 +37,6 @@ Surface3DController::Surface3DController(QRect rect)
m_renderer(0),
m_selectedPoint(invalidSelectionPosition()),
m_selectedSeries(0),
- m_rowsChangeStartId(0),
- m_rowsChangeCount(0),
m_flatShadingSupported(true)
{
// Setting a null axis creates a new default axis according to orientation and graph type.
@@ -84,8 +82,15 @@ void Surface3DController::synchDataToRenderer()
}
if (m_changeTracker.rowsChanged) {
- m_renderer->updateRows(m_rowsChangeStartId, m_rowsChangeCount);
+ m_renderer->updateRows(m_changedRows);
m_changeTracker.rowsChanged = false;
+ m_changedRows.clear();
+ }
+
+ if (m_changeTracker.itemChanged) {
+ m_renderer->updateItem(m_changedItems);
+ m_changeTracker.itemChanged = false;
+ m_changedItems.clear();
}
if (m_changeTracker.selectedPointChanged) {
@@ -320,16 +325,57 @@ void Surface3DController::handleFlatShadingSupportedChange(bool supported)
void Surface3DController::handleRowsChanged(int startIndex, int count)
{
QSurfaceDataProxy *sender = static_cast<QSurfaceDataProxy *>(QObject::sender());
+ if (m_changedRows.size() == 0)
+ m_changedRows.reserve(sender->rowCount());
+
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;
+ int oldChangeCount = m_changedRows.size();
+ for (int i = 0; i < count; i++) {
+ bool newItem = true;
+ int candidate = startIndex + i;
+ for (int i = 0; i < oldChangeCount; i++) {
+ if (m_changedRows.at(i) == candidate) {
+ newItem = false;
+ break;
+ }
+ }
+ if (newItem)
+ m_changedRows.append(candidate);
+ }
+ if (m_changedRows.size()) {
+ m_changeTracker.rowsChanged = true;
- adjustValueAxisRange();
- // Clear selection unless still valid
- setSelectedPoint(m_selectedPoint, m_selectedSeries);
- emitNeedRender();
+ adjustValueAxisRange();
+ // Clear selection unless still valid
+ setSelectedPoint(m_selectedPoint, m_selectedSeries);
+ emitNeedRender();
+ }
+ }
+}
+
+void Surface3DController::handleItemChanged(int rowIndex, int columnIndex)
+{
+ 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
+ bool newItem = true;
+ QPoint candidate(columnIndex, rowIndex);
+ foreach (QPoint item, m_changedItems) {
+ if (item == candidate) {
+ newItem = false;
+ break;
+ }
+ }
+ if (newItem) {
+ m_changedItems.append(candidate);
+ m_changeTracker.itemChanged = true;
+
+ adjustValueAxisRange();
+ // Clear selection unless still valid
+ setSelectedPoint(m_selectedPoint, m_selectedSeries);
+ emitNeedRender();
+ }
}
}