mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-23 10:52:16 -07:00
add more sort options
This commit is contained in:
parent
aa0c5032ee
commit
13b5676f29
3 changed files with 66 additions and 0 deletions
|
|
@ -61,6 +61,55 @@ void CardList::sortBy(const QList<SortOption> &option)
|
||||||
std::sort(begin(), end(), comparator);
|
std::sort(begin(), end(), comparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a String for the card such that when sorting cards using that string, it will result in the
|
||||||
|
* following sort order:
|
||||||
|
* - Unrecognized colors
|
||||||
|
* - Land cards
|
||||||
|
* - Colorless cards
|
||||||
|
* - Monocolor cards, in wubrg order
|
||||||
|
* - Monocolor cards of any custom colors
|
||||||
|
* - 2C cards (no internal order)
|
||||||
|
* - 3C cards (no internal order)
|
||||||
|
* - 4C cards (no internal order)
|
||||||
|
* - 5C cards (no internal order)
|
||||||
|
*
|
||||||
|
* @param c The card info
|
||||||
|
* @param appendAtEnd For multicolor cards, whether to also append the entire color string at the end.
|
||||||
|
*/
|
||||||
|
static QString getColorSortString(CardInfoPtr c, bool appendAtEnd)
|
||||||
|
{
|
||||||
|
QString colors = c->getColors();
|
||||||
|
switch (colors.size()) {
|
||||||
|
case 0: {
|
||||||
|
if (c->getCardType().contains("Land")) {
|
||||||
|
return "a_land";
|
||||||
|
} else {
|
||||||
|
return "b_colorless";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
// force wubrg order
|
||||||
|
switch (colors.at(0).toLatin1()) {
|
||||||
|
case 'W':
|
||||||
|
return "c_W";
|
||||||
|
case 'U':
|
||||||
|
return "d_U";
|
||||||
|
case 'B':
|
||||||
|
return "e_B";
|
||||||
|
case 'R':
|
||||||
|
return "f_R";
|
||||||
|
case 'G':
|
||||||
|
return "g_G";
|
||||||
|
default:
|
||||||
|
// handle any custom colors
|
||||||
|
return QString("h_%1").arg(colors.at(0));
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return QString("i%1_%2").arg(colors.size()).arg(appendAtEnd ? colors : "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief returns the function that extracts the given property from the CardItem.
|
* @brief returns the function that extracts the given property from the CardItem.
|
||||||
*/
|
*/
|
||||||
|
|
@ -74,6 +123,8 @@ std::function<QString(CardItem *)> CardList::getExtractorFor(SortOption option)
|
||||||
case SortByManaValue:
|
case SortByManaValue:
|
||||||
// getCmc returns the int as a string. We pad with 0's so that string comp also works on it
|
// 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') : ""; };
|
return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getCmc().rightJustified(4, '0') : ""; };
|
||||||
|
case SortByColorGrouping:
|
||||||
|
return [](CardItem *c) { return c->getInfo() ? getColorSortString(c->getInfo(), false) : ""; };
|
||||||
case SortByName:
|
case SortByName:
|
||||||
return [](CardItem *c) { return c->getName(); };
|
return [](CardItem *c) { return c->getName(); };
|
||||||
case SortByType:
|
case SortByType:
|
||||||
|
|
@ -88,6 +139,13 @@ std::function<QString(CardItem *)> CardList::getExtractorFor(SortOption option)
|
||||||
// we pad the cmc and also append the mana cost to the end so same cmc cards still have a sort order
|
// 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());
|
return QString("%1%2").arg(info->getCmc(), 4, QChar('0')).arg(info->getManaCost());
|
||||||
};
|
};
|
||||||
|
case SortByColors:
|
||||||
|
return [](CardItem *c) { return c->getInfo() ? getColorSortString(c->getInfo(), true) : ""; };
|
||||||
|
case SortByPt:
|
||||||
|
// do the same padding trick as above
|
||||||
|
return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getPowTough().rightJustified(10, '0') : ""; };
|
||||||
|
case SortBySet:
|
||||||
|
return [](CardItem *c) { return c->getInfo() ? c->getInfo()->getSetsNames() : ""; };
|
||||||
}
|
}
|
||||||
|
|
||||||
// this line should never be reached
|
// this line should never be reached
|
||||||
|
|
|
||||||
|
|
@ -19,12 +19,16 @@ public:
|
||||||
// Should partition all cards into a reasonable number of buckets
|
// Should partition all cards into a reasonable number of buckets
|
||||||
SortByMainType,
|
SortByMainType,
|
||||||
SortByManaValue,
|
SortByManaValue,
|
||||||
|
SortByColorGrouping,
|
||||||
|
|
||||||
// Options that are used by sortBy
|
// Options that are used by sortBy
|
||||||
// We don't care about buckets; we want as many distinct values as possible.
|
// We don't care about buckets; we want as many distinct values as possible.
|
||||||
SortByName,
|
SortByName,
|
||||||
SortByType,
|
SortByType,
|
||||||
SortByManaCost,
|
SortByManaCost,
|
||||||
|
SortByColors,
|
||||||
|
SortByPt,
|
||||||
|
SortBySet
|
||||||
};
|
};
|
||||||
CardList(bool _contentsKnown);
|
CardList(bool _contentsKnown);
|
||||||
CardItem *findCard(const int cardId) const;
|
CardItem *findCard(const int cardId) const;
|
||||||
|
|
|
||||||
|
|
@ -195,6 +195,7 @@ void ZoneViewWidget::retranslateUi()
|
||||||
groupBySelector.addItem(tr("Group by ---"), CardList::NoSort);
|
groupBySelector.addItem(tr("Group by ---"), CardList::NoSort);
|
||||||
groupBySelector.addItem(tr("Group by Type"), CardList::SortByMainType);
|
groupBySelector.addItem(tr("Group by Type"), CardList::SortByMainType);
|
||||||
groupBySelector.addItem(tr("Group by Mana Value"), CardList::SortByManaValue);
|
groupBySelector.addItem(tr("Group by Mana Value"), CardList::SortByManaValue);
|
||||||
|
groupBySelector.addItem(tr("Group by Color"), CardList::SortByColorGrouping);
|
||||||
groupBySelector.setCurrentIndex(oldIndex);
|
groupBySelector.setCurrentIndex(oldIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -205,6 +206,9 @@ void ZoneViewWidget::retranslateUi()
|
||||||
sortBySelector.addItem(tr("Sort by Name"), CardList::SortByName);
|
sortBySelector.addItem(tr("Sort by Name"), CardList::SortByName);
|
||||||
sortBySelector.addItem(tr("Sort by Type"), CardList::SortByType);
|
sortBySelector.addItem(tr("Sort by Type"), CardList::SortByType);
|
||||||
sortBySelector.addItem(tr("Sort by Mana Cost"), CardList::SortByManaCost);
|
sortBySelector.addItem(tr("Sort by Mana Cost"), CardList::SortByManaCost);
|
||||||
|
sortBySelector.addItem(tr("Sort by Colors"), CardList::SortByColors);
|
||||||
|
sortBySelector.addItem(tr("Sort by P/T"), CardList::SortByPt);
|
||||||
|
sortBySelector.addItem(tr("Sort by Set"), CardList::SortBySet);
|
||||||
sortBySelector.setCurrentIndex(oldIndex);
|
sortBySelector.setCurrentIndex(oldIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue