forked from qt-creator/qt-creator
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:
@@ -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)
|
||||
|
@@ -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>
|
||||
|
Reference in New Issue
Block a user