From 9134ae6111f0d357428b8a15abc26a727fe465a4 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Wed, 27 Nov 2019 17:41:04 -0500 Subject: implemented not filter --- src/modlistsortproxy.cpp | 99 +++++++++++++++++++++++++++++++++++++----------- 1 file changed, 77 insertions(+), 22 deletions(-) (limited to 'src/modlistsortproxy.cpp') diff --git a/src/modlistsortproxy.cpp b/src/modlistsortproxy.cpp index ddae675c..d2a5e258 100644 --- a/src/modlistsortproxy.cpp +++ b/src/modlistsortproxy.cpp @@ -278,11 +278,11 @@ bool ModListSortProxy::hasConflictFlag(const std::vector &flags) bool ModListSortProxy::filterMatchesModAnd(ModInfo::Ptr info, bool enabled) const { - for (auto iter = m_CategoryFilter.begin(); iter != m_CategoryFilter.end(); ++iter) { - if (info->hasFlag(ModInfo::FLAG_SEPARATOR) && !m_FilterSeparators) { - return false; - } + if (info->hasFlag(ModInfo::FLAG_SEPARATOR) && !m_FilterSeparators) { + return false; + } + for (auto iter = m_CategoryFilter.begin(); iter != m_CategoryFilter.end(); ++iter) { if (!categoryMatchesMod(info, enabled, *iter)) { return false; } @@ -299,82 +299,137 @@ bool ModListSortProxy::filterMatchesModAnd(ModInfo::Ptr info, bool enabled) cons bool ModListSortProxy::filterMatchesModOr(ModInfo::Ptr info, bool enabled) const { - for (auto iter = m_CategoryFilter.begin(); iter != m_CategoryFilter.end(); ++iter) { - if (info->hasFlag(ModInfo::FLAG_SEPARATOR) && !m_FilterSeparators) { - return false; - } + if (info->hasFlag(ModInfo::FLAG_SEPARATOR) && !m_FilterSeparators) { + return false; + } + for (auto iter = m_CategoryFilter.begin(); iter != m_CategoryFilter.end(); ++iter) { if (categoryMatchesMod(info, enabled, *iter)) { return true; } } + if (!m_CategoryFilter.empty()) { + // nothing matched + return false; + } + foreach (int content, m_ContentFilter) { if (contentMatchesMod(info, enabled, content)) { return true; } } - return m_CategoryFilter.empty() && m_ContentFilter.empty(); + if (!m_ContentFilter.empty()) { + // nothing matched + return false; + } + + return true; } bool ModListSortProxy::categoryMatchesMod( ModInfo::Ptr info, bool enabled, int category) const { + bool b = false; + switch (category) { case CategoryFactory::CATEGORY_SPECIAL_CHECKED: - return (enabled || info->alwaysEnabled()); + { + b = (enabled || info->alwaysEnabled()); + break; + } case CategoryFactory::CATEGORY_SPECIAL_UNCHECKED: - return (!enabled && !info->alwaysEnabled()); + { + b = (!enabled && !info->alwaysEnabled()); + break; + } case CategoryFactory::CATEGORY_SPECIAL_UPDATEAVAILABLE: - return (info->updateAvailable() || info->downgradeAvailable()); + { + b = (info->updateAvailable() || info->downgradeAvailable()); + break; + } case CategoryFactory::CATEGORY_SPECIAL_NOCATEGORY: - return (info->getCategories().size() == 0); + { + b = (info->getCategories().size() == 0); + break; + } case CategoryFactory::CATEGORY_SPECIAL_CONFLICT: - return (hasConflictFlag(info->getFlags())); + { + b = (hasConflictFlag(info->getFlags())); + break; + } case CategoryFactory::CATEGORY_SPECIAL_NOTENDORSED: { ModInfo::EEndorsedState state = info->endorsedState(); - return (state != ModInfo::ENDORSED_TRUE); + b = (state != ModInfo::ENDORSED_TRUE); + break; } case CategoryFactory::CATEGORY_SPECIAL_BACKUP: - return (info->hasFlag(ModInfo::FLAG_BACKUP)); + { + b = (info->hasFlag(ModInfo::FLAG_BACKUP)); + break; + } case CategoryFactory::CATEGORY_SPECIAL_MANAGED: - return (!info->hasFlag(ModInfo::FLAG_FOREIGN)); + { + b = (!info->hasFlag(ModInfo::FLAG_FOREIGN)); + break; + } case CategoryFactory::CATEGORY_SPECIAL_UNMANAGED: - return (info->hasFlag(ModInfo::FLAG_FOREIGN)); + { + b = (info->hasFlag(ModInfo::FLAG_FOREIGN)); + break; + } case CategoryFactory::CATEGORY_SPECIAL_NOGAMEDATA: - return (info->hasFlag(ModInfo::FLAG_INVALID)); + { + b = (info->hasFlag(ModInfo::FLAG_INVALID)); + break; + } case CategoryFactory::CATEGORY_SPECIAL_NONEXUSID: { - return ( + b = ( info->getNexusID() == -1 && !info->hasFlag(ModInfo::FLAG_FOREIGN) && !info->hasFlag(ModInfo::FLAG_BACKUP) && !info->hasFlag(ModInfo::FLAG_OVERWRITE)); + + break; } default: { - return (info->categorySet(category)); + b = (info->categorySet(category)); + break; } } + + if (m_FilterNot) { + b = !b; + } + + return b; } bool ModListSortProxy::contentMatchesMod(ModInfo::Ptr info, bool enabled, int content) const { - return info->hasContent(static_cast(content)); + bool b = info->hasContent(static_cast(content)); + + if (m_FilterNot) { + b = !b; + } + + return b; } bool ModListSortProxy::filterMatchesMod(ModInfo::Ptr info, bool enabled) const -- cgit v1.3.1