diff options
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); + } }; |
