From 75f59b68a5d82139b97dae9a7ab762f563a55676 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Tue, 4 Jun 2019 23:42:20 -0400 Subject: natural sort for conflict items --- src/modinfodialog.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/modinfodialog.cpp') diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp index ce15f5db..2be8e481 100644 --- a/src/modinfodialog.cpp +++ b/src/modinfodialog.cpp @@ -381,6 +381,19 @@ bool canUnhideFile(bool isArchive, const QString& filename) } +int naturalCompare(const QString& a, const QString& b) +{ + static QCollator c = []{ + QCollator c; + c.setNumericMode(true); + c.setCaseSensitivity(Qt::CaseInsensitive); + return c; + }(); + + return c.compare(a, b); +} + + class ConflictItem : public QTreeWidgetItem { public: @@ -456,6 +469,19 @@ public: { return canPreviewFile(pluginContainer, isArchive(), fileName()); } + + bool operator<(const QTreeWidgetItem& other) const + { + const int column = treeWidget()->sortColumn(); + + if (column >= columnCount() || column >= other.columnCount()) { + // shouldn't happen + qWarning().nospace() << "ConflictItem::operator<() mistmatch in column count"; + return false; + } + + return (naturalCompare(text(column), other.text(column)) < 0); + } }; -- cgit v1.3.1