diff options
| author | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-04 23:42:20 -0400 |
|---|---|---|
| committer | isanae <14251494+isanae@users.noreply.github.com> | 2019-06-04 23:42:20 -0400 |
| commit | 75f59b68a5d82139b97dae9a7ab762f563a55676 (patch) | |
| tree | 212ffe2897c7d135768085b4b7a65bf052f0f62b /src/modinfodialog.cpp | |
| parent | aedddb10f820dc61cc9aeb164b3318871ac5a15d (diff) | |
natural sort for conflict items
Diffstat (limited to 'src/modinfodialog.cpp')
| -rw-r--r-- | src/modinfodialog.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
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); + } }; |
