From 7adeaafd9338259f6cd1e8e34af42a15c1002d78 Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 4 Sep 2023 17:18:44 +0200 Subject: [PATCH] QtSupport: Use natural sorting for Qt versions in settings widget Change-Id: I4ef14a575c536e9f789fedf24937bd0f9e118f91 Reviewed-by: Reviewed-by: Eike Ziller --- src/libs/utils/treemodel.cpp | 9 +++++++++ src/libs/utils/treemodel.h | 16 +++++++++++++++- src/plugins/qtsupport/qtoptionspage.cpp | 6 ++---- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/libs/utils/treemodel.cpp b/src/libs/utils/treemodel.cpp index 2691525441a..1c82ac0244a 100644 --- a/src/libs/utils/treemodel.cpp +++ b/src/libs/utils/treemodel.cpp @@ -4,6 +4,7 @@ #include "treemodel.h" #include "qtcassert.h" +#include "stringutils.h" #include #include @@ -1199,4 +1200,12 @@ Qt::ItemFlags StaticTreeItem::flags(int column) const return Qt::ItemIsEnabled; } +bool SortModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const +{ + if (m_lessThan) + return lessThan(source_left, source_right); + return caseFriendlyCompare(sourceModel()->data(source_left).toString(), + sourceModel()->data(source_right).toString()) < 0; +} + } // namespace Utils diff --git a/src/libs/utils/treemodel.h b/src/libs/utils/treemodel.h index 46832ff9d94..8fe66d61d45 100644 --- a/src/libs/utils/treemodel.h +++ b/src/libs/utils/treemodel.h @@ -7,7 +7,7 @@ #include "indexedcontainerproxyconstiterator.h" -#include +#include #include @@ -344,6 +344,20 @@ public: } }; +// By default, does natural sorting by display name. Call setLessThan() to customize. +class QTCREATOR_UTILS_EXPORT SortModel : public QSortFilterProxyModel +{ +public: + using QSortFilterProxyModel::QSortFilterProxyModel; + using LessThan = std::function; + void setLessThan(const LessThan &lessThan) { m_lessThan = lessThan; } + +private: + bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; + + LessThan m_lessThan; +}; + } // namespace Utils Q_DECLARE_METATYPE(Utils::TreeItem *) diff --git a/src/plugins/qtsupport/qtoptionspage.cpp b/src/plugins/qtsupport/qtoptionspage.cpp index a139d853fed..8d3a27464e7 100644 --- a/src/plugins/qtsupport/qtoptionspage.cpp +++ b/src/plugins/qtsupport/qtoptionspage.cpp @@ -41,7 +41,6 @@ #include #include #include -#include #include #include @@ -197,7 +196,7 @@ private: void updateVersionItem(QtVersionItem *item); TreeModel *m_model; - QSortFilterProxyModel *m_filterModel; + SortModel *m_filterModel; TreeItem *m_autoItem; TreeItem *m_manualItem; @@ -314,9 +313,8 @@ QtOptionsPageWidget::QtOptionsPageWidget() m_model->rootItem()->appendChild(m_autoItem); m_model->rootItem()->appendChild(m_manualItem); - m_filterModel = new QSortFilterProxyModel(this); + m_filterModel = new SortModel(this); m_filterModel->setSourceModel(m_model); - m_filterModel->setSortCaseSensitivity(Qt::CaseInsensitive); m_qtdirList->setModel(m_filterModel); m_qtdirList->setSortingEnabled(true);