StringUtils: Use natural sorting in caseFriendlyCompare()

Seems to be the right choice in the contexts we use it in.
Supersedes db1d12f69a.

Task-number: QTCREATORBUG-29509
Change-Id: I3816ec57d8484404420c7bee1c2b12e8df224cb8
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Christian Kandeler
2023-09-04 15:40:05 +02:00
parent 6888d93385
commit c8ecacb335
2 changed files with 13 additions and 15 deletions

View File

@@ -14,6 +14,7 @@
#include <QClipboard>
#endif
#include <QCollator>
#include <QDir>
#include <QFontMetrics>
#include <QJsonArray>
@@ -325,10 +326,18 @@ QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line
int caseFriendlyCompare(const QString &a, const QString &b)
{
int result = a.compare(b, Qt::CaseInsensitive);
static const auto makeCollator = [](Qt::CaseSensitivity caseSensitivity) {
QCollator collator;
collator.setNumericMode(true);
collator.setCaseSensitivity(caseSensitivity);
return collator;
};
static const QCollator insensitiveCollator = makeCollator(Qt::CaseInsensitive);
const int result = insensitiveCollator.compare(a, b);
if (result != 0)
return result;
return a.compare(b, Qt::CaseSensitive);
static const QCollator sensitiveCollator = makeCollator(Qt::CaseSensitive);
return sensitiveCollator.compare(a, b);
}
QString quoteAmpersands(const QString &text)

View File

@@ -32,7 +32,6 @@
#include <coreplugin/modemanager.h>
#include <QAction>
#include <QCollator>
#include <QGuiApplication>
#include <QItemDelegate>
#include <QKeyEvent>
@@ -141,18 +140,8 @@ private:
static bool compareItems(const TreeItem *ti1, const TreeItem *ti2)
{
static const QCollator collator = [] {
QCollator collator;
collator.setNumericMode(true);
collator.setCaseSensitivity(Qt::CaseInsensitive);
return collator;
}();
const int result = collator.compare(static_cast<const GenericItem *>(ti1)->rawDisplayName(),
static_cast<const GenericItem *>(ti2)->rawDisplayName());
if (result != 0)
return result < 0;
return ti1 < ti2;
return caseFriendlyCompare(static_cast<const GenericItem *>(ti1)->rawDisplayName(),
static_cast<const GenericItem *>(ti2)->rawDisplayName()) < 0;
}
class GenericModel : public TreeModel<GenericItem, GenericItem>