From 4573d111a2454863a76da922b1229b3bc05eee66 Mon Sep 17 00:00:00 2001 From: Tannin Date: Thu, 3 Sep 2015 21:35:48 +0200 Subject: better sorting on the flag-column --- src/modlistsortproxy.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/modlistsortproxy.cpp') diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index 4045d743..435967c9 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -103,6 +103,18 @@ void ModListSortProxy::disableAllVisible() invalidate(); } +unsigned long ModListSortProxy::flagsId(const std::vector &flags) const +{ + unsigned long result = 0; + for (ModInfo::EFlag flag : flags) { + if ((flag != ModInfo::FLAG_FOREIGN) + && (flag != ModInfo::FLAG_OVERWRITE)) { + result += 1 << (int)flag; + } + } + return result; +} + bool ModListSortProxy::lessThan(const QModelIndex &left, const QModelIndex &right) const { @@ -135,8 +147,13 @@ bool ModListSortProxy::lessThan(const QModelIndex &left, switch (left.column()) { case ModList::COL_FLAGS: { - if (leftMod->getFlags().size() != rightMod->getFlags().size()) - lt = leftMod->getFlags().size() < rightMod->getFlags().size(); + std::vector leftFlags = leftMod->getFlags(); + std::vector rightFlags = rightMod->getFlags(); + if (leftFlags.size() != rightFlags.size()) { + lt = leftFlags.size() < rightFlags.size(); + } else { + lt = flagsId(leftFlags) < flagsId(rightFlags); + } } break; case ModList::COL_CONTENT: { std::vector lContent = leftMod->getContents(); -- cgit v1.3.1