summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2019-10-16 09:38:32 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2019-10-16 09:38:32 +0200
commit73d797cda0579f18ef4ef837a6384315619b50be (patch)
treed6ef7b983ff14f68a32808fd4b49c08730380092 /src
parent88e67e7686fa564e81a770a18879cc281e620222 (diff)
parentfe9066461afd36fc9611db11f95f4c43f645b96e (diff)
Merge remote-tracking branch 'origin/5.13' into 5.14v5.14.0-beta2
Diffstat (limited to 'src')
-rw-r--r--src/charts/candlestickchart/qcandlestickmodelmapper.cpp33
1 files changed, 24 insertions, 9 deletions
diff --git a/src/charts/candlestickchart/qcandlestickmodelmapper.cpp b/src/charts/candlestickchart/qcandlestickmodelmapper.cpp
index 8f876cd3..95a53b52 100644
--- a/src/charts/candlestickchart/qcandlestickmodelmapper.cpp
+++ b/src/charts/candlestickchart/qcandlestickmodelmapper.cpp
@@ -33,6 +33,8 @@
#include <QtCore/QAbstractItemModel>
#include <private/qcandlestickmodelmapper_p.h>
+#include <algorithm>
+
QT_CHARTS_BEGIN_NAMESPACE
/*!
@@ -590,20 +592,33 @@ void QCandlestickModelMapperPrivate::candlestickSetsRemoved(const QList<QCandles
if (sets.isEmpty())
return;
- int firstIndex = m_sets.indexOf(sets.at(0));
- if (firstIndex == -1)
+ QVector<int> removedIndices;
+ for (auto &set : sets) {
+ int index = m_sets.indexOf(set);
+ if (index != -1)
+ removedIndices << index;
+ }
+
+ if (removedIndices.isEmpty())
return;
- m_lastSetSection -= sets.count();
+ std::sort(removedIndices.begin(), removedIndices.end());
- for (int i = firstIndex + sets.count() - 1; i >= firstIndex; --i)
- m_sets.removeAt(i);
+ for (int i = removedIndices.size() - 1; i >= 0; --i) {
+ m_sets.removeAt(removedIndices[i]);
+ --m_lastSetSection;
+ }
blockModelSignals();
- if (q->orientation() == Qt::Vertical)
- m_model->removeColumns(firstIndex + m_firstSetSection, sets.count());
- else
- m_model->removeRows(firstIndex + m_firstSetSection, sets.count());
+
+ // There is no guarantee removed sets are continuous, so remove them one by one
+ for (int i = removedIndices.size() - 1; i >= 0; --i) {
+ if (q->orientation() == Qt::Vertical)
+ m_model->removeColumns(removedIndices[i] + m_firstSetSection, 1);
+ else
+ m_model->removeRows(removedIndices[i] + m_firstSetSection, 1);
+ }
+
blockModelSignals(false);
initializeCandlestickFromModel();
}