diff options
| author | Tannin <devnull@localhost> | 2015-09-03 21:35:48 +0200 |
|---|---|---|
| committer | Tannin <devnull@localhost> | 2015-09-03 21:35:48 +0200 |
| commit | 4573d111a2454863a76da922b1229b3bc05eee66 (patch) | |
| tree | ad821b874354c651db64193b9ed10df13bbc1a7f /src/modlistsortproxy.cpp | |
| parent | 84ec954073ff9e3230d222c1cdc0f3a5dd0c1476 (diff) | |
better sorting on the flag-column
Diffstat (limited to 'src/modlistsortproxy.cpp')
| -rw-r--r-- | src/modlistsortproxy.cpp | 21 |
1 files changed, 19 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();
|
