Add menu option and hotkey to sort hand (#6057)

* Add sort hand shortcut

* add function to sort hand by type and name

* rig up the sort hand to the player

* fix sorting param

* use getShortcut instead of getSingleShortcut

* use correct method

* change default sorting

---------

Co-authored-by: Zach H <zahalpern+github@gmail.com>
This commit is contained in:
Paul Carroll
2025-08-02 00:40:17 -04:00
committed by GitHub
parent d6243a2dd2
commit 06738cae93
5 changed files with 26 additions and 2 deletions

View File

@@ -210,6 +210,8 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
connect(aViewLibrary, &QAction::triggered, this, &Player::actViewLibrary);
aViewHand = new QAction(this);
connect(aViewHand, &QAction::triggered, this, &Player::actViewHand);
aSortHand = new QAction(this);
connect(aSortHand, &QAction::triggered, this, &Player::actSortHand);
aViewTopCards = new QAction(this);
connect(aViewTopCards, &QAction::triggered, this, &Player::actViewTopCards);
@@ -298,6 +300,7 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
if (local || judge) {
handMenu = playerMenu->addTearOffMenu(QString());
handMenu->addAction(aViewHand);
handMenu->addAction(aSortHand);
playerLists.append(mRevealHand = handMenu->addMenu(QString()));
playerLists.append(mRevealRandomHandCard = handMenu->addMenu(QString()));
handMenu->addSeparator();
@@ -795,6 +798,7 @@ void Player::retranslateUi()
aViewLibrary->setText(tr("&View library"));
aViewHand->setText(tr("&View hand"));
aSortHand->setText(tr("&Sort hand"));
aViewTopCards->setText(tr("View &top cards of library..."));
aViewBottomCards->setText(tr("View bottom cards of library..."));
mRevealLibrary->setTitle(tr("Reveal &library to..."));
@@ -959,6 +963,7 @@ void Player::setShortcutsActive()
aMoveToHand->setShortcuts(shortcuts.getShortcut("Player/aMoveToHand"));
aMoveToGraveyard->setShortcuts(shortcuts.getShortcut("Player/aMoveToGraveyard"));
aMoveToExile->setShortcuts(shortcuts.getShortcut("Player/aMoveToExile"));
aSortHand->setShortcuts(shortcuts.getShortcut("Player/aSortHand"));
aSelectAll->setShortcuts(shortcuts.getShortcut("Player/aSelectAll"));
aSelectRow->setShortcuts(shortcuts.getShortcut("Player/aSelectRow"));
@@ -1064,6 +1069,7 @@ void Player::setShortcutsInactive()
aMoveBottomCardToExile->setShortcut(QKeySequence());
aMoveBottomCardsToExile->setShortcut(QKeySequence());
aIncrementAllCardCounters->setShortcut(QKeySequence());
aSortHand->setShortcut(QKeySequence());
QMapIterator<int, AbstractCounter *> counterIterator(counters);
while (counterIterator.hasNext()) {
@@ -1134,6 +1140,11 @@ void Player::actViewHand()
static_cast<GameScene *>(scene())->toggleZoneView(this, "hand", -1);
}
void Player::actSortHand()
{
hand->sortHand();
}
void Player::actViewTopCards()
{
int deckSize = zones.value("deck")->getCards().size();

View File

@@ -239,7 +239,7 @@ private slots:
void actSetAnnotation();
void actReveal(QAction *action);
void refreshShortcuts();
void actSortHand();
void initSayMenu();
public:
@@ -276,7 +276,7 @@ private:
QAction *aPlay, *aPlayFacedown, *aHide, *aTap, *aDoesntUntap, *aAttach, *aUnattach, *aDrawArrow, *aSetPT, *aResetPT,
*aIncP, *aDecP, *aIncT, *aDecT, *aIncPT, *aDecPT, *aFlowP, *aFlowT, *aSetAnnotation, *aFlip, *aPeek, *aClone,
*aMoveToTopLibrary, *aMoveToBottomLibrary, *aMoveToHand, *aMoveToGraveyard, *aMoveToExile,
*aMoveToXfromTopOfLibrary, *aSelectAll, *aSelectRow, *aSelectColumn, *aIncrementAllCardCounters;
*aMoveToXfromTopOfLibrary, *aSelectAll, *aSelectRow, *aSelectColumn, *aSortHand, *aIncrementAllCardCounters;
bool movingCardsUntil;
QTimer *moveTopCardTimer;

View File

@@ -127,6 +127,15 @@ void HandZone::reorganizeCards()
update();
}
void HandZone::sortHand()
{
if (cards.isEmpty()) {
return;
}
cards.sortBy({CardList::SortByMainType, CardList::SortByManaValue, CardList::SortByColorGrouping});
reorganizeCards();
}
void HandZone::setWidth(qreal _width)
{
if (SettingsCache::instance().getHorizontalHand()) {

View File

@@ -19,6 +19,7 @@ public:
QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
void reorganizeCards() override;
void sortHand();
void setWidth(qreal _width);
protected:

View File

@@ -556,6 +556,9 @@ private:
ShortcutGroup::Move_selected)},
{"Player/aViewHand",
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Hand"), parseSequenceString(""), ShortcutGroup::View)},
{"Player/aSortHand", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Sort Hand"),
parseSequenceString("Ctrl+Shift+H"),
ShortcutGroup::View)},
{"Player/aViewGraveyard",
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Graveyard"), parseSequenceString("F4"), ShortcutGroup::View)},
{"Player/aViewLibrary",