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>
|
#include <QClipboard>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <QCollator>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QFontMetrics>
|
#include <QFontMetrics>
|
||||||
#include <QJsonArray>
|
#include <QJsonArray>
|
||||||
@@ -325,10 +326,18 @@ QTCREATOR_UTILS_EXPORT int parseUsedPortFromNetstatOutput(const QByteArray &line
|
|||||||
|
|
||||||
int caseFriendlyCompare(const QString &a, const QString &b)
|
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)
|
if (result != 0)
|
||||||
return result;
|
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)
|
QString quoteAmpersands(const QString &text)
|
||||||
|
@@ -32,7 +32,6 @@
|
|||||||
#include <coreplugin/modemanager.h>
|
#include <coreplugin/modemanager.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
#include <QCollator>
|
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QItemDelegate>
|
#include <QItemDelegate>
|
||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
@@ -141,18 +140,8 @@ private:
|
|||||||
|
|
||||||
static bool compareItems(const TreeItem *ti1, const TreeItem *ti2)
|
static bool compareItems(const TreeItem *ti1, const TreeItem *ti2)
|
||||||
{
|
{
|
||||||
static const QCollator collator = [] {
|
return caseFriendlyCompare(static_cast<const GenericItem *>(ti1)->rawDisplayName(),
|
||||||
QCollator collator;
|
static_cast<const GenericItem *>(ti2)->rawDisplayName()) < 0;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class GenericModel : public TreeModel<GenericItem, GenericItem>
|
class GenericModel : public TreeModel<GenericItem, GenericItem>
|
||||||
|
Reference in New Issue
Block a user