diff --git a/cockatrice/src/game/cards/card_list.cpp b/cockatrice/src/game/cards/card_list.cpp index 5d5e5dbef..6e6e0815d 100644 --- a/cockatrice/src/game/cards/card_list.cpp +++ b/cockatrice/src/game/cards/card_list.cpp @@ -69,13 +69,25 @@ std::function CardList::getExtractorFor(SortOption option) switch (option) { case NoSort: return [](CardItem *) { return ""; }; - case SortByName: - return [](CardItem *c) { return c->getName(); }; - case SortByType: + case SortByMainType: return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getMainCardType() : ""; }; case SortByManaValue: // getCmc returns the int as a string. We pad with 0's so that string comp also works on it return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getCmc().rightJustified(4, '0') : ""; }; + case SortByName: + return [](CardItem *c) { return c->getName(); }; + case SortByType: + return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getCardType() : ""; }; + case SortByManaCost: + return [](CardItem *c) { + auto info = c->getInfo(); + if (!info) + return QString(""); + + // calculation copied from CardDatabaseModel. + // we pad the cmc and also append the mana cost to the end so same cmc cards still have a sort order + return QString("%1%2").arg(info->getCmc(), 4, QChar('0')).arg(info->getManaCost()); + }; } // this line should never be reached diff --git a/cockatrice/src/game/cards/card_list.h b/cockatrice/src/game/cards/card_list.h index cbfb3ecff..266e7a494 100644 --- a/cockatrice/src/game/cards/card_list.h +++ b/cockatrice/src/game/cards/card_list.h @@ -14,9 +14,17 @@ public: enum SortOption { NoSort, + + // Options that are used by groupBy + // Should partition all cards into a reasonable number of buckets + SortByMainType, + SortByManaValue, + + // Options that are used by sortBy + // We don't care about buckets; we want as many distinct values as possible. SortByName, SortByType, - SortByManaValue + SortByManaCost, }; CardList(bool _contentsKnown); CardItem *findCard(const int cardId) const; diff --git a/cockatrice/src/game/zones/view_zone_widget.cpp b/cockatrice/src/game/zones/view_zone_widget.cpp index e23a714b8..472ad5f7e 100644 --- a/cockatrice/src/game/zones/view_zone_widget.cpp +++ b/cockatrice/src/game/zones/view_zone_widget.cpp @@ -193,7 +193,7 @@ void ZoneViewWidget::retranslateUi() int oldIndex = groupBySelector.currentIndex(); groupBySelector.clear(); groupBySelector.addItem(tr("Group by ---"), CardList::NoSort); - groupBySelector.addItem(tr("Group by Type"), CardList::SortByType); + groupBySelector.addItem(tr("Group by Type"), CardList::SortByMainType); groupBySelector.addItem(tr("Group by Mana Value"), CardList::SortByManaValue); groupBySelector.setCurrentIndex(oldIndex); } @@ -204,7 +204,7 @@ void ZoneViewWidget::retranslateUi() sortBySelector.addItem(tr("Sort by ---"), CardList::NoSort); sortBySelector.addItem(tr("Sort by Name"), CardList::SortByName); sortBySelector.addItem(tr("Sort by Type"), CardList::SortByType); - sortBySelector.addItem(tr("Sort by Mana Value"), CardList::SortByManaValue); + sortBySelector.addItem(tr("Sort by Mana Cost"), CardList::SortByManaCost); sortBySelector.setCurrentIndex(oldIndex); }