summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTannin <devnull@localhost>2015-09-03 21:35:48 +0200
committerTannin <devnull@localhost>2015-09-03 21:35:48 +0200
commit4573d111a2454863a76da922b1229b3bc05eee66 (patch)
treead821b874354c651db64193b9ed10df13bbc1a7f /src
parent84ec954073ff9e3230d222c1cdc0f3a5dd0c1476 (diff)
better sorting on the flag-column
Diffstat (limited to 'src')
-rw-r--r--src/modlistsortproxy.cpp21
-rw-r--r--src/modlistsortproxy.h1
2 files changed, 20 insertions, 2 deletions
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<ModInfo::EFlag> &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<ModInfo::EFlag> leftFlags = leftMod->getFlags();
+ std::vector<ModInfo::EFlag> 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<ModInfo::EContent> lContent = leftMod->getContents();
diff --git a/src/modlistsortproxy.h b/src/modlistsortproxy.h
index ce7e5eb5..b3c01fea 100644
--- a/src/modlistsortproxy.h
+++ b/src/modlistsortproxy.h
@@ -109,6 +109,7 @@ protected:
private:
+ unsigned long flagsId(const std::vector<ModInfo::EFlag> &flags) const;
bool hasConflictFlag(const std::vector<ModInfo::EFlag> &flags) const;
void updateFilterActive();
bool filterMatchesModAnd(ModInfo::Ptr info, bool enabled) const;