diff options
author | Mika Salmela <mika.salmela@digia.com> | 2013-12-03 14:00:23 +0200 |
---|---|---|
committer | Mika Salmela <mika.salmela@digia.com> | 2013-12-03 14:06:59 +0200 |
commit | 344870fb79e647b87aa79b9433eef8237c901e10 (patch) | |
tree | f0ccaa5991d9f0304bc6f6f91ce3ffd45232384d /src/datavisualization/engine/surface3dcontroller.cpp | |
parent | 2af35db1a112c49991a80f48e3cd8d8814deb321 (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.cpp | 66 |
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(); + } } } |