diff --git a/cockatrice/src/filtertree.cpp b/cockatrice/src/filtertree.cpp index 84020876..fa1ef7b9 100644 --- a/cockatrice/src/filtertree.cpp +++ b/cockatrice/src/filtertree.cpp @@ -231,19 +231,19 @@ bool FilterItem::acceptManaCost(const CardInfoPtr info) const bool FilterItem::acceptCmc(const CardInfoPtr info) const { - return (info->getCmc() == term); + return relationCheck(info->getCmc().toInt()); } bool FilterItem::acceptPower(const CardInfoPtr info) const { int slash = info->getPowTough().indexOf("/"); - return (slash != -1) ? (info->getPowTough().mid(0, slash) == term) : false; + return (slash != -1) ? (relationCheck(info->getPowTough().mid(0, slash).toInt())) : false; } bool FilterItem::acceptToughness(const CardInfoPtr info) const { int slash = info->getPowTough().indexOf("/"); - return (slash != -1) ? (info->getPowTough().mid(slash + 1) == term) : false; + return (slash != -1) ? (relationCheck(info->getPowTough().mid(slash + 1).toInt())) : false; } bool FilterItem::acceptRarity(const CardInfoPtr info) const @@ -295,6 +295,39 @@ bool FilterItem::acceptRarity(const CardInfoPtr info) const return false; } +bool FilterItem::relationCheck(int cardInfo) const +{ + bool result, conversion; + + // if int conversion fails, there must be either an operator at the start + result = (cardInfo == term.toInt(&conversion)); + if (!conversion) { + // leading whitespaces could cause indexing to fail + QString trimmedTerm = term.trimmed(); + // check whether it's a 2 char operator (<=, >=, or ==) + if (trimmedTerm[1] == '=') { + int termInt = trimmedTerm.mid(2).toInt(); + if (trimmedTerm.startsWith('<')) { + result = (cardInfo <= termInt); + } else if (trimmedTerm.startsWith('>')) { + result = (cardInfo >= termInt); + } else { + result = (cardInfo == termInt); + } + } else { + int termInt = trimmedTerm.mid(1).toInt(); + if (trimmedTerm.startsWith('<')) { + result = (cardInfo < termInt); + } else if (trimmedTerm.startsWith('>')) { + result = (cardInfo > termInt); + } else { + result = (cardInfo == termInt); + } + } + } + return result; +} + bool FilterItem::acceptCardAttr(const CardInfoPtr info, CardFilter::Attr attr) const { switch (attr) { diff --git a/cockatrice/src/filtertree.h b/cockatrice/src/filtertree.h index f38f00e5..7e6f5e8d 100644 --- a/cockatrice/src/filtertree.h +++ b/cockatrice/src/filtertree.h @@ -214,6 +214,7 @@ public: bool acceptToughness(const CardInfoPtr info) const; bool acceptRarity(const CardInfoPtr info) const; bool acceptCardAttr(const CardInfoPtr info, CardFilter::Attr attr) const; + bool relationCheck(int cardInfo) const; }; class FilterTree : public QObject, public FilterTreeBranch