From 89296a98a01a1fcdd84624ead9a9454e653b9e08 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 12 Aug 2020 09:40:51 +0200 Subject: [PATCH] Qt6: Adapt to removed QMap functionality QMap::iterator::operator+() was removed in 14090760a8, necessitating extra code using std::next/prev to workaround. QMap::unite is gone, the replacement QMap::insert was only introduced in 5.15. QMap key values need to have an operator==() available. Task-number: QTCREATORBUG-24098 Change-Id: Ic4cf429ab18cad58b1218180de40eb65586afd77 Reviewed-by: Marco Bubke --- src/libs/utils/namevaluedictionary.h | 5 +++++ src/libs/utils/namevaluemodel.cpp | 7 ++++--- .../coreplugin/find/highlightscrollbarcontroller.cpp | 4 ++-- src/plugins/diffeditor/sidebysidediffeditorwidget.cpp | 2 +- src/plugins/diffeditor/unifieddiffeditorwidget.cpp | 2 +- src/plugins/fakevim/fakevimplugin.cpp | 10 ++++++++++ src/plugins/texteditor/texteditoroverlay.cpp | 8 ++++---- 7 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/libs/utils/namevaluedictionary.h b/src/libs/utils/namevaluedictionary.h index bbd80b1f99c..8023c97dfd1 100644 --- a/src/libs/utils/namevaluedictionary.h +++ b/src/libs/utils/namevaluedictionary.h @@ -36,6 +36,11 @@ class QTCREATOR_UTILS_EXPORT DictKey public: DictKey(const QString &name, Qt::CaseSensitivity cs) : name(name), caseSensitivity(cs) {} + friend bool operator==(const DictKey &k1, const DictKey &k2) + { + return k1.name.compare(k2.name, k1.caseSensitivity) == 0; + } + QString name; Qt::CaseSensitivity caseSensitivity; }; diff --git a/src/libs/utils/namevaluemodel.cpp b/src/libs/utils/namevaluemodel.cpp index 462cef4e2a7..0283bd9ba78 100644 --- a/src/libs/utils/namevaluemodel.cpp +++ b/src/libs/utils/namevaluemodel.cpp @@ -106,8 +106,8 @@ NameValueModel::~NameValueModel() = default; QString NameValueModel::indexToVariable(const QModelIndex &index) const { - return d->m_resultNameValueDictionary.key(d->m_resultNameValueDictionary.constBegin() - + index.row()); + const auto it = std::next(d->m_resultNameValueDictionary.constBegin(), index.row()); + return d->m_resultNameValueDictionary.key(it); } void NameValueModel::setBaseNameValueDictionary(const NameValueDictionary &dictionary) @@ -150,7 +150,8 @@ QVariant NameValueModel::data(const QModelIndex &index, int role) const if (!index.isValid()) return QVariant(); - const auto resultIterator = d->m_resultNameValueDictionary.constBegin() + index.row(); + const auto resultIterator = std::next(d->m_resultNameValueDictionary.constBegin(), index.row()); + switch (role) { case Qt::DisplayRole: case Qt::EditRole: diff --git a/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp b/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp index a6edc2a7814..65666b5bccb 100644 --- a/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp +++ b/src/plugins/coreplugin/find/highlightscrollbarcontroller.cpp @@ -267,7 +267,7 @@ static void insertPosition(QMap *map, int position) bool gluedWithPrev = false; if (itNext != map->begin()) { - auto itPrev = itNext - 1; + auto itPrev = std::prev(itNext); const int keyStart = itPrev.key(); const int keyEnd = itPrev.value(); if (position >= keyStart && position <= keyEnd) @@ -285,7 +285,7 @@ static void insertPosition(QMap *map, int position) itNext = map->erase(itNext); if (gluedWithPrev) { // glue with prev and next - auto itPrev = itNext - 1; + auto itPrev = std::prev(itNext); *itPrev = keyEnd; } else { // glue with next diff --git a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp index d9b593befa0..bf411463c00 100644 --- a/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp +++ b/src/plugins/diffeditor/sidebysidediffeditorwidget.cpp @@ -328,7 +328,7 @@ int SideDiffEditorWidget::blockNumberForFileIndex(int fileIndex) const if (fileIndex < 0 || fileIndex >= m_fileInfo.count()) return -1; - return (m_fileInfo.constBegin() + fileIndex).key(); + return std::next(m_fileInfo.constBegin(), fileIndex).key(); } int SideDiffEditorWidget::fileIndexForBlockNumber(int blockNumber) const diff --git a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp index c924b668eb6..adc8c108a48 100644 --- a/src/plugins/diffeditor/unifieddiffeditorwidget.cpp +++ b/src/plugins/diffeditor/unifieddiffeditorwidget.cpp @@ -587,7 +587,7 @@ int UnifiedDiffEditorWidget::blockNumberForFileIndex(int fileIndex) const if (fileIndex < 0 || fileIndex >= m_fileInfo.count()) return -1; - return (m_fileInfo.constBegin() + fileIndex).key(); + return std::next(m_fileInfo.constBegin(), fileIndex).key(); } int UnifiedDiffEditorWidget::fileIndexForBlockNumber(int blockNumber) const diff --git a/src/plugins/fakevim/fakevimplugin.cpp b/src/plugins/fakevim/fakevimplugin.cpp index 827c5083d3a..b98ba199308 100644 --- a/src/plugins/fakevim/fakevimplugin.cpp +++ b/src/plugins/fakevim/fakevimplugin.cpp @@ -697,8 +697,13 @@ void FakeVimExCommandsPage::apply() } settings->endArray(); globalCommandMapping.clear(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + globalCommandMapping.insert(defaultMap); + globalCommandMapping.insert(newMapping); +#else globalCommandMapping.unite(defaultMap); globalCommandMapping.unite(newMapping); +#endif } } @@ -950,8 +955,13 @@ void FakeVimUserCommandsPage::apply() } settings->endArray(); userMap.clear(); +#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0) + userMap.insert(dd->m_defaultUserCommandMap); + userMap.insert(current); +#else userMap.unite(dd->m_defaultUserCommandMap); userMap.unite(current); +#endif } } diff --git a/src/plugins/texteditor/texteditoroverlay.cpp b/src/plugins/texteditor/texteditoroverlay.cpp index b923b257c3d..863db175c9a 100644 --- a/src/plugins/texteditor/texteditoroverlay.cpp +++ b/src/plugins/texteditor/texteditoroverlay.cpp @@ -486,16 +486,16 @@ void TextEditorOverlay::mapEquivalentSelections() m_equivalentSelections.clear(); m_equivalentSelections.resize(m_selections.size()); - QMap all; + QMultiMap all; for (int i = 0; i < m_selections.size(); ++i) - all.insertMulti(selectionText(i).toLower(), i); + all.insert(selectionText(i).toLower(), i); const QList &uniqueKeys = all.uniqueKeys(); foreach (const QString &key, uniqueKeys) { QList indexes; const auto cAll = all; - QMap::const_iterator lbit = cAll.lowerBound(key); - QMap::const_iterator ubit = cAll.upperBound(key); + QMultiMap::const_iterator lbit = cAll.lowerBound(key); + QMultiMap::const_iterator ubit = cAll.upperBound(key); while (lbit != ubit) { indexes.append(lbit.value()); ++lbit;