diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-27 11:04:58 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-27 11:39:25 +0300 |
commit | d4d99e49c147f4f61c0d5e84e59c023789fae17d (patch) | |
tree | ba01feecf4a818b95b5260d6419589c7b5536768 /src/datavisualization/data/surfaceitemmodelhandler.cpp | |
parent | 2d9dbd6bcb2c1a75f0a4230868854c495b2d530a (diff) |
Allow resetting with existing array for bars and scatter
Improves performance when array dimensions do not change
Task-number: QTRD-2335
Change-Id: I2733ff3552009a19cf285bc91426f595b64795dd
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/data/surfaceitemmodelhandler.cpp')
-rw-r--r-- | src/datavisualization/data/surfaceitemmodelhandler.cpp | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/src/datavisualization/data/surfaceitemmodelhandler.cpp b/src/datavisualization/data/surfaceitemmodelhandler.cpp index d32b442b..a9882040 100644 --- a/src/datavisualization/data/surfaceitemmodelhandler.cpp +++ b/src/datavisualization/data/surfaceitemmodelhandler.cpp @@ -38,12 +38,14 @@ void SurfaceItemModelHandler::resolveModel() QItemModelSurfaceDataMapping *mapping = static_cast<QItemModelSurfaceDataMapping *>(m_activeMapping); if (m_itemModel.isNull() || !mapping) { m_proxy->resetArray(0); + m_proxyArray = 0; return; } if (!mapping->useModelCategories() && (mapping->rowRole().isEmpty() || mapping->columnRole().isEmpty())) { m_proxy->resetArray(0); + m_proxyArray = 0; return; } @@ -61,14 +63,12 @@ void SurfaceItemModelHandler::resolveModel() if (mapping->useModelCategories()) { // If dimensions have changed, recreate the array - if (!m_proxyArray || columnCount != m_proxy->columnCount() + if (m_proxyArray != m_proxy->array() || columnCount != m_proxy->columnCount() || rowCount != m_proxyArray->size()) { m_proxyArray = new QSurfaceDataArray; m_proxyArray->reserve(rowCount); - for (int i = 0; i < rowCount; i++) { - QSurfaceDataRow *newProxyRow = new QSurfaceDataRow(columnCount); - m_proxyArray->append(newProxyRow); - } + for (int i = 0; i < rowCount; i++) + m_proxyArray->append(new QSurfaceDataRow(columnCount)); } for (int i = 0; i < rowCount; i++) { QSurfaceDataRow &newProxyRow = *m_proxyArray->at(i); @@ -128,14 +128,12 @@ void SurfaceItemModelHandler::resolveModel() columnList = mapping->columnCategories(); // If dimensions have changed, recreate the array - if (!m_proxyArray || columnList.size() != m_proxy->columnCount() + if (m_proxyArray != m_proxy->array() || columnList.size() != m_proxy->columnCount() || rowList.size() != m_proxyArray->size()) { m_proxyArray = new QSurfaceDataArray; m_proxyArray->reserve(rowList.size()); - for (int i = 0; i < rowList.size(); i++) { - QSurfaceDataRow *newProxyRow = new QSurfaceDataRow(columnList.size()); - m_proxyArray->append(newProxyRow); - } + for (int i = 0; i < rowList.size(); i++) + m_proxyArray->append(new QSurfaceDataRow(columnList.size())); } // Create data array from itemValueMap for (int i = 0; i < rowList.size(); i++) { |