mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-18 00:12:15 -07:00
Refactor say and utility menu.
Took 54 minutes Took 2 minutes Took 5 minutes Took 11 minutes
This commit is contained in:
parent
8bc2127b4d
commit
6c7871af5b
9 changed files with 232 additions and 130 deletions
|
|
@ -241,6 +241,8 @@ set(cockatrice_SOURCES
|
||||||
src/game/player/player_menu/player_menu.cpp
|
src/game/player/player_menu/player_menu.cpp
|
||||||
src/game/player/player_menu/pt_menu.cpp
|
src/game/player/player_menu/pt_menu.cpp
|
||||||
src/game/player/player_menu/rfg_menu.cpp
|
src/game/player/player_menu/rfg_menu.cpp
|
||||||
|
src/game/player/player_menu/say_menu.cpp
|
||||||
|
src/game/player/player_menu/utility_menu.cpp
|
||||||
src/game/replay.cpp
|
src/game/replay.cpp
|
||||||
src/game/zones/card_zone.cpp
|
src/game/zones/card_zone.cpp
|
||||||
src/game/zones/hand_zone.cpp
|
src/game/zones/hand_zone.cpp
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,6 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, A
|
||||||
|
|
||||||
connect(this, &Player::activeChanged, graphicsItem, &PlayerGraphicsItem::onPlayerActiveChanged);
|
connect(this, &Player::activeChanged, graphicsItem, &PlayerGraphicsItem::onPlayerActiveChanged);
|
||||||
|
|
||||||
connect(this, &Player::deckChanged, playerMenu, &PlayerMenu::populatePredefinedTokensMenu);
|
|
||||||
|
|
||||||
connect(this, &Player::openDeckEditor, game->getTab(), &TabGame::openDeckEditor);
|
connect(this, &Player::openDeckEditor, game->getTab(), &TabGame::openDeckEditor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -833,7 +833,7 @@ void PlayerActions::actRollDie()
|
||||||
|
|
||||||
void PlayerActions::actCreateToken()
|
void PlayerActions::actCreateToken()
|
||||||
{
|
{
|
||||||
DlgCreateToken dlg(player->getPlayerMenu()->getPredefinedTokens(), player->getGame()->getTab());
|
DlgCreateToken dlg(player->getPlayerMenu()->getUtilityMenu()->getPredefinedTokens(), player->getGame()->getTab());
|
||||||
if (!dlg.exec()) {
|
if (!dlg.exec()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -850,7 +850,7 @@ void PlayerActions::actCreateToken()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
player->getPlayerMenu()->setAndEnableCreateAnotherTokenAction(
|
player->getPlayerMenu()->getUtilityMenu()->setAndEnableCreateAnotherTokenAction(
|
||||||
tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
||||||
actCreateAnotherToken();
|
actCreateAnotherToken();
|
||||||
}
|
}
|
||||||
|
|
@ -878,7 +878,7 @@ void PlayerActions::actCreateAnotherToken()
|
||||||
|
|
||||||
void PlayerActions::setLastToken(CardInfoPtr cardInfo)
|
void PlayerActions::setLastToken(CardInfoPtr cardInfo)
|
||||||
{
|
{
|
||||||
if (cardInfo == nullptr || !player->getPlayerMenu()->createAnotherTokenActionExists()) {
|
if (cardInfo == nullptr || !player->getPlayerMenu()->getUtilityMenu()->createAnotherTokenActionExists()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -892,7 +892,7 @@ void PlayerActions::setLastToken(CardInfoPtr cardInfo)
|
||||||
|
|
||||||
lastTokenTableRow = TableZone::clampValidTableRow(2 - cardInfo->getTableRow());
|
lastTokenTableRow = TableZone::clampValidTableRow(2 - cardInfo->getTableRow());
|
||||||
|
|
||||||
player->getPlayerMenu()->setAndEnableCreateAnotherTokenAction(
|
player->getPlayerMenu()->getUtilityMenu()->setAndEnableCreateAnotherTokenAction(
|
||||||
tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
tr("C&reate another %1 token").arg(lastTokenInfo.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,58 +57,21 @@ PlayerMenu::PlayerMenu(Player *_player) : player(_player)
|
||||||
mCustomZones = playerMenu->addMenu(QString());
|
mCustomZones = playerMenu->addMenu(QString());
|
||||||
mCustomZones->menuAction()->setVisible(false);
|
mCustomZones->menuAction()->setVisible(false);
|
||||||
|
|
||||||
aUntapAll = new QAction(this);
|
|
||||||
connect(aUntapAll, &QAction::triggered, playerActions, &PlayerActions::actUntapAll);
|
|
||||||
|
|
||||||
aRollDie = new QAction(this);
|
|
||||||
connect(aRollDie, &QAction::triggered, playerActions, &PlayerActions::actRollDie);
|
|
||||||
|
|
||||||
aCreateToken = new QAction(this);
|
|
||||||
connect(aCreateToken, &QAction::triggered, playerActions, &PlayerActions::actCreateToken);
|
|
||||||
|
|
||||||
aCreateAnotherToken = new QAction(this);
|
|
||||||
connect(aCreateAnotherToken, &QAction::triggered, playerActions, &PlayerActions::actCreateAnotherToken);
|
|
||||||
aCreateAnotherToken->setEnabled(false);
|
|
||||||
|
|
||||||
aIncrementAllCardCounters = new QAction(this);
|
|
||||||
connect(aIncrementAllCardCounters, &QAction::triggered, player, &Player::incrementAllCardCounters);
|
|
||||||
|
|
||||||
createPredefinedTokenMenu = new QMenu(QString());
|
|
||||||
createPredefinedTokenMenu->setEnabled(false);
|
|
||||||
|
|
||||||
playerMenu->addSeparator();
|
playerMenu->addSeparator();
|
||||||
countersMenu = playerMenu->addMenu(QString());
|
countersMenu = playerMenu->addMenu(QString());
|
||||||
playerMenu->addAction(aIncrementAllCardCounters);
|
|
||||||
playerMenu->addSeparator();
|
utilityMenu = new UtilityMenu(player, playerMenu);
|
||||||
playerMenu->addAction(aUntapAll);
|
|
||||||
playerMenu->addSeparator();
|
|
||||||
playerMenu->addAction(aRollDie);
|
|
||||||
playerMenu->addSeparator();
|
|
||||||
playerMenu->addAction(aCreateToken);
|
|
||||||
playerMenu->addAction(aCreateAnotherToken);
|
|
||||||
playerMenu->addMenu(createPredefinedTokenMenu);
|
|
||||||
playerMenu->addSeparator();
|
|
||||||
} else {
|
} else {
|
||||||
countersMenu = nullptr;
|
countersMenu = nullptr;
|
||||||
sbMenu = nullptr;
|
sbMenu = nullptr;
|
||||||
mCustomZones = nullptr;
|
mCustomZones = nullptr;
|
||||||
aCreateToken = nullptr;
|
|
||||||
aCreateAnotherToken = nullptr;
|
|
||||||
createPredefinedTokenMenu = nullptr;
|
|
||||||
aIncrementAllCardCounters = nullptr;
|
|
||||||
|
|
||||||
aViewSideboard = nullptr;
|
aViewSideboard = nullptr;
|
||||||
sbMenu = nullptr;
|
utilityMenu = nullptr;
|
||||||
|
|
||||||
aUntapAll = nullptr;
|
|
||||||
aRollDie = nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->getPlayerInfo()->getLocal()) {
|
if (player->getPlayerInfo()->getLocal()) {
|
||||||
sayMenu = playerMenu->addMenu(QString());
|
sayMenu = new SayMenu(player);
|
||||||
connect(&SettingsCache::instance().messages(), &MessageSettings::messageMacrosChanged, this,
|
playerMenu->addMenu(sayMenu);
|
||||||
&PlayerMenu::initSayMenu);
|
|
||||||
initSayMenu();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
||||||
|
|
@ -270,30 +233,6 @@ void PlayerMenu::addViewCustomZoneActionToCustomZoneMenu(QString zoneName)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMenu::populatePredefinedTokensMenu()
|
|
||||||
{
|
|
||||||
DeckLoader *_deck = player->getDeck();
|
|
||||||
createPredefinedTokenMenu->clear();
|
|
||||||
createPredefinedTokenMenu->setEnabled(false);
|
|
||||||
predefinedTokens.clear();
|
|
||||||
InnerDecklistNode *tokenZone = dynamic_cast<InnerDecklistNode *>(_deck->getRoot()->findChild(DECK_ZONE_TOKENS));
|
|
||||||
|
|
||||||
if (tokenZone) {
|
|
||||||
if (!tokenZone->empty())
|
|
||||||
createPredefinedTokenMenu->setEnabled(true);
|
|
||||||
|
|
||||||
for (int i = 0; i < tokenZone->size(); ++i) {
|
|
||||||
const QString tokenName = tokenZone->at(i)->getName();
|
|
||||||
predefinedTokens.append(tokenName);
|
|
||||||
QAction *a = createPredefinedTokenMenu->addAction(tokenName);
|
|
||||||
if (i < 10) {
|
|
||||||
a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10)));
|
|
||||||
}
|
|
||||||
connect(a, &QAction::triggered, player->getPlayerActions(), &PlayerActions::actCreatePredefinedToken);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void PlayerMenu::retranslateUi()
|
void PlayerMenu::retranslateUi()
|
||||||
{
|
{
|
||||||
playerMenu->setTitle(tr("Player \"%1\"").arg(player->getPlayerInfo()->getName()));
|
playerMenu->setTitle(tr("Player \"%1\"").arg(player->getPlayerInfo()->getName()));
|
||||||
|
|
@ -306,6 +245,7 @@ void PlayerMenu::retranslateUi()
|
||||||
handMenu->retranslateUi();
|
handMenu->retranslateUi();
|
||||||
sbMenu->setTitle(tr("&Sideboard"));
|
sbMenu->setTitle(tr("&Sideboard"));
|
||||||
libraryMenu->retranslateUi();
|
libraryMenu->retranslateUi();
|
||||||
|
utilityMenu->retranslateUi();
|
||||||
countersMenu->setTitle(tr("&Counters"));
|
countersMenu->setTitle(tr("&Counters"));
|
||||||
mCustomZones->setTitle(tr("C&ustom Zones"));
|
mCustomZones->setTitle(tr("C&ustom Zones"));
|
||||||
|
|
||||||
|
|
@ -313,13 +253,6 @@ void PlayerMenu::retranslateUi()
|
||||||
aViewZone->setText(tr("View custom zone '%1'").arg(aViewZone->data().toString()));
|
aViewZone->setText(tr("View custom zone '%1'").arg(aViewZone->data().toString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
aIncrementAllCardCounters->setText(tr("Increment all card counters"));
|
|
||||||
aUntapAll->setText(tr("&Untap all permanents"));
|
|
||||||
aRollDie->setText(tr("R&oll die..."));
|
|
||||||
aCreateToken->setText(tr("&Create token..."));
|
|
||||||
aCreateAnotherToken->setText(tr("C&reate another token"));
|
|
||||||
createPredefinedTokenMenu->setTitle(tr("Cr&eate predefined token"));
|
|
||||||
|
|
||||||
for (auto &allPlayersAction : allPlayersActions) {
|
for (auto &allPlayersAction : allPlayersActions) {
|
||||||
allPlayersAction->setText(tr("&All players"));
|
allPlayersAction->setText(tr("&All players"));
|
||||||
}
|
}
|
||||||
|
|
@ -356,18 +289,16 @@ void PlayerMenu::setShortcutsActive()
|
||||||
libraryMenu->setShortcutsActive();
|
libraryMenu->setShortcutsActive();
|
||||||
}
|
}
|
||||||
graveMenu->setShortcutsActive();
|
graveMenu->setShortcutsActive();
|
||||||
|
if (utilityMenu) {
|
||||||
|
utilityMenu->setShortcutsActive();
|
||||||
|
}
|
||||||
|
|
||||||
QMapIterator<int, AbstractCounter *> counterIterator(player->getCounters());
|
QMapIterator<int, AbstractCounter *> counterIterator(player->getCounters());
|
||||||
while (counterIterator.hasNext()) {
|
while (counterIterator.hasNext()) {
|
||||||
counterIterator.next().value()->setShortcutsActive();
|
counterIterator.next().value()->setShortcutsActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
setShortcutIfItExists(aIncrementAllCardCounters, shortcuts.getShortcut("Player/aIncrementAllCardCounters"));
|
|
||||||
setShortcutIfItExists(aViewSideboard, shortcuts.getShortcut("Player/aViewSideboard"));
|
setShortcutIfItExists(aViewSideboard, shortcuts.getShortcut("Player/aViewSideboard"));
|
||||||
setShortcutIfItExists(aUntapAll, shortcuts.getShortcut("Player/aUntapAll"));
|
|
||||||
setShortcutIfItExists(aRollDie, shortcuts.getShortcut("Player/aRollDie"));
|
|
||||||
setShortcutIfItExists(aCreateToken, shortcuts.getShortcut("Player/aCreateToken"));
|
|
||||||
setShortcutIfItExists(aCreateAnotherToken, shortcuts.getShortcut("Player/aCreateAnotherToken"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMenu::setShortcutsInactive()
|
void PlayerMenu::setShortcutsInactive()
|
||||||
|
|
@ -375,31 +306,9 @@ void PlayerMenu::setShortcutsInactive()
|
||||||
shortcutsActive = false;
|
shortcutsActive = false;
|
||||||
|
|
||||||
clearShortcutIfItExists(aViewSideboard);
|
clearShortcutIfItExists(aViewSideboard);
|
||||||
clearShortcutIfItExists(aUntapAll);
|
|
||||||
clearShortcutIfItExists(aRollDie);
|
|
||||||
clearShortcutIfItExists(aCreateToken);
|
|
||||||
clearShortcutIfItExists(aCreateAnotherToken);
|
|
||||||
clearShortcutIfItExists(aIncrementAllCardCounters);
|
|
||||||
|
|
||||||
QMapIterator<int, AbstractCounter *> counterIterator(player->getCounters());
|
QMapIterator<int, AbstractCounter *> counterIterator(player->getCounters());
|
||||||
while (counterIterator.hasNext()) {
|
while (counterIterator.hasNext()) {
|
||||||
counterIterator.next().value()->setShortcutsInactive();
|
counterIterator.next().value()->setShortcutsInactive();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMenu::initSayMenu()
|
|
||||||
{
|
|
||||||
sayMenu->clear();
|
|
||||||
|
|
||||||
int count = SettingsCache::instance().messages().getCount();
|
|
||||||
sayMenu->setEnabled(count > 0);
|
|
||||||
|
|
||||||
for (int i = 0; i < count; ++i) {
|
|
||||||
auto *newAction = new QAction(SettingsCache::instance().messages().getMessageAt(i), sayMenu);
|
|
||||||
if (i < 10) {
|
|
||||||
newAction->setShortcut(QKeySequence("Ctrl+" + QString::number((i + 1) % 10)));
|
|
||||||
}
|
|
||||||
connect(newAction, &QAction::triggered, player->getPlayerActions(), &PlayerActions::actSayMessage);
|
|
||||||
sayMenu->addAction(newAction);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,8 @@
|
||||||
#include "hand_menu.h"
|
#include "hand_menu.h"
|
||||||
#include "library_menu.h"
|
#include "library_menu.h"
|
||||||
#include "rfg_menu.h"
|
#include "rfg_menu.h"
|
||||||
|
#include "say_menu.h"
|
||||||
|
#include "utility_menu.h"
|
||||||
|
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
@ -19,7 +21,6 @@ signals:
|
||||||
void cardMenuUpdated(QMenu *cardMenu);
|
void cardMenuUpdated(QMenu *cardMenu);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void populatePredefinedTokensMenu();
|
|
||||||
void setMenusForGraphicItems();
|
void setMenusForGraphicItems();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
@ -39,22 +40,6 @@ public:
|
||||||
|
|
||||||
QMenu *updateCardMenu(const CardItem *card);
|
QMenu *updateCardMenu(const CardItem *card);
|
||||||
|
|
||||||
[[nodiscard]] bool createAnotherTokenActionExists() const
|
|
||||||
{
|
|
||||||
return aCreateAnotherToken != nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setAndEnableCreateAnotherTokenAction(QString text)
|
|
||||||
{
|
|
||||||
aCreateAnotherToken->setText(text);
|
|
||||||
aCreateAnotherToken->setEnabled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
QStringList getPredefinedTokens() const
|
|
||||||
{
|
|
||||||
return predefinedTokens;
|
|
||||||
}
|
|
||||||
|
|
||||||
[[nodiscard]] QMenu *getPlayerMenu() const
|
[[nodiscard]] QMenu *getPlayerMenu() const
|
||||||
{
|
{
|
||||||
return playerMenu;
|
return playerMenu;
|
||||||
|
|
@ -70,6 +55,11 @@ public:
|
||||||
return libraryMenu;
|
return libraryMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] UtilityMenu *getUtilityMenu() const
|
||||||
|
{
|
||||||
|
return utilityMenu;
|
||||||
|
}
|
||||||
|
|
||||||
bool getShortcutsActive() const
|
bool getShortcutsActive() const
|
||||||
{
|
{
|
||||||
return shortcutsActive;
|
return shortcutsActive;
|
||||||
|
|
@ -82,20 +72,19 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Player *player;
|
Player *player;
|
||||||
QMenu *sbMenu, *countersMenu, *sayMenu, *createPredefinedTokenMenu, *mCustomZones;
|
TearOffMenu *playerMenu;
|
||||||
|
QMenu *sbMenu, *countersMenu, *mCustomZones;
|
||||||
HandMenu *handMenu;
|
HandMenu *handMenu;
|
||||||
LibraryMenu *libraryMenu;
|
LibraryMenu *libraryMenu;
|
||||||
GraveyardMenu *graveMenu;
|
GraveyardMenu *graveMenu;
|
||||||
RfgMenu *rfgMenu;
|
RfgMenu *rfgMenu;
|
||||||
TearOffMenu *playerMenu;
|
UtilityMenu *utilityMenu;
|
||||||
|
SayMenu *sayMenu;
|
||||||
QList<QMenu *> playerLists;
|
QList<QMenu *> playerLists;
|
||||||
QList<QAction *> allPlayersActions;
|
QList<QAction *> allPlayersActions;
|
||||||
QAction *aViewSideboard, *aUntapAll, *aRollDie, *aCreateToken, *aCreateAnotherToken;
|
QAction *aViewSideboard;
|
||||||
|
|
||||||
QAction *aIncrementAllCardCounters;
|
|
||||||
|
|
||||||
bool shortcutsActive;
|
bool shortcutsActive;
|
||||||
QStringList predefinedTokens;
|
|
||||||
|
|
||||||
void initSayMenu();
|
void initSayMenu();
|
||||||
};
|
};
|
||||||
|
|
|
||||||
28
cockatrice/src/game/player/player_menu/say_menu.cpp
Normal file
28
cockatrice/src/game/player/player_menu/say_menu.cpp
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include "say_menu.h"
|
||||||
|
|
||||||
|
#include "../../../settings/cache_settings.h"
|
||||||
|
#include "../player.h"
|
||||||
|
#include "../player_actions.h"
|
||||||
|
|
||||||
|
SayMenu::SayMenu(Player *_player) : player(_player)
|
||||||
|
{
|
||||||
|
connect(&SettingsCache::instance().messages(), &MessageSettings::messageMacrosChanged, this, &SayMenu::initSayMenu);
|
||||||
|
initSayMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SayMenu::initSayMenu()
|
||||||
|
{
|
||||||
|
clear();
|
||||||
|
|
||||||
|
int count = SettingsCache::instance().messages().getCount();
|
||||||
|
setEnabled(count > 0);
|
||||||
|
|
||||||
|
for (int i = 0; i < count; ++i) {
|
||||||
|
auto *newAction = new QAction(SettingsCache::instance().messages().getMessageAt(i), this);
|
||||||
|
if (i < 10) {
|
||||||
|
newAction->setShortcut(QKeySequence("Ctrl+" + QString::number((i + 1) % 10)));
|
||||||
|
}
|
||||||
|
connect(newAction, &QAction::triggered, player->getPlayerActions(), &PlayerActions::actSayMessage);
|
||||||
|
addAction(newAction);
|
||||||
|
}
|
||||||
|
}
|
||||||
18
cockatrice/src/game/player/player_menu/say_menu.h
Normal file
18
cockatrice/src/game/player/player_menu/say_menu.h
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef COCKATRICE_SAY_MENU_H
|
||||||
|
#define COCKATRICE_SAY_MENU_H
|
||||||
|
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
class Player;
|
||||||
|
class SayMenu : public QMenu
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit SayMenu(Player *player);
|
||||||
|
void initSayMenu();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Player *player;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCKATRICE_SAY_MENU_H
|
||||||
112
cockatrice/src/game/player/player_menu/utility_menu.cpp
Normal file
112
cockatrice/src/game/player/player_menu/utility_menu.cpp
Normal file
|
|
@ -0,0 +1,112 @@
|
||||||
|
#include "utility_menu.h"
|
||||||
|
|
||||||
|
#include "../player.h"
|
||||||
|
#include "../player_actions.h"
|
||||||
|
#include "player_menu.h"
|
||||||
|
|
||||||
|
UtilityMenu::UtilityMenu(Player *_player, QMenu *playerMenu) : QMenu(playerMenu), player(_player)
|
||||||
|
{
|
||||||
|
PlayerActions *playerActions = player->getPlayerActions();
|
||||||
|
|
||||||
|
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
||||||
|
aUntapAll = new QAction(this);
|
||||||
|
connect(aUntapAll, &QAction::triggered, playerActions, &PlayerActions::actUntapAll);
|
||||||
|
|
||||||
|
aRollDie = new QAction(this);
|
||||||
|
connect(aRollDie, &QAction::triggered, playerActions, &PlayerActions::actRollDie);
|
||||||
|
|
||||||
|
aCreateToken = new QAction(this);
|
||||||
|
connect(aCreateToken, &QAction::triggered, playerActions, &PlayerActions::actCreateToken);
|
||||||
|
|
||||||
|
aCreateAnotherToken = new QAction(this);
|
||||||
|
connect(aCreateAnotherToken, &QAction::triggered, playerActions, &PlayerActions::actCreateAnotherToken);
|
||||||
|
aCreateAnotherToken->setEnabled(false);
|
||||||
|
|
||||||
|
aIncrementAllCardCounters = new QAction(this);
|
||||||
|
connect(aIncrementAllCardCounters, &QAction::triggered, player, &Player::incrementAllCardCounters);
|
||||||
|
|
||||||
|
createPredefinedTokenMenu = new QMenu(QString());
|
||||||
|
createPredefinedTokenMenu->setEnabled(false);
|
||||||
|
connect(player, &Player::deckChanged, this, &UtilityMenu::populatePredefinedTokensMenu);
|
||||||
|
|
||||||
|
playerMenu->addAction(aIncrementAllCardCounters);
|
||||||
|
playerMenu->addSeparator();
|
||||||
|
playerMenu->addAction(aUntapAll);
|
||||||
|
playerMenu->addSeparator();
|
||||||
|
playerMenu->addAction(aRollDie);
|
||||||
|
playerMenu->addSeparator();
|
||||||
|
playerMenu->addAction(aCreateToken);
|
||||||
|
playerMenu->addAction(aCreateAnotherToken);
|
||||||
|
playerMenu->addMenu(createPredefinedTokenMenu);
|
||||||
|
playerMenu->addSeparator();
|
||||||
|
} else {
|
||||||
|
aCreateToken = nullptr;
|
||||||
|
aCreateAnotherToken = nullptr;
|
||||||
|
createPredefinedTokenMenu = nullptr;
|
||||||
|
aIncrementAllCardCounters = nullptr;
|
||||||
|
aUntapAll = nullptr;
|
||||||
|
aRollDie = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
retranslateUi();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilityMenu::populatePredefinedTokensMenu()
|
||||||
|
{
|
||||||
|
DeckLoader *_deck = player->getDeck();
|
||||||
|
clear();
|
||||||
|
setEnabled(false);
|
||||||
|
predefinedTokens.clear();
|
||||||
|
InnerDecklistNode *tokenZone = dynamic_cast<InnerDecklistNode *>(_deck->getRoot()->findChild(DECK_ZONE_TOKENS));
|
||||||
|
|
||||||
|
if (tokenZone) {
|
||||||
|
if (!tokenZone->empty())
|
||||||
|
setEnabled(true);
|
||||||
|
|
||||||
|
for (int i = 0; i < tokenZone->size(); ++i) {
|
||||||
|
const QString tokenName = tokenZone->at(i)->getName();
|
||||||
|
predefinedTokens.append(tokenName);
|
||||||
|
QAction *a = addAction(tokenName);
|
||||||
|
if (i < 10) {
|
||||||
|
a->setShortcut(QKeySequence("Alt+" + QString::number((i + 1) % 10)));
|
||||||
|
}
|
||||||
|
connect(a, &QAction::triggered, player->getPlayerActions(), &PlayerActions::actCreatePredefinedToken);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilityMenu::retranslateUi()
|
||||||
|
{
|
||||||
|
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
||||||
|
aIncrementAllCardCounters->setText(tr("Increment all card counters"));
|
||||||
|
aUntapAll->setText(tr("&Untap all permanents"));
|
||||||
|
aRollDie->setText(tr("R&oll die..."));
|
||||||
|
aCreateToken->setText(tr("&Create token..."));
|
||||||
|
aCreateAnotherToken->setText(tr("C&reate another token"));
|
||||||
|
createPredefinedTokenMenu->setTitle(tr("Cr&eate predefined token"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilityMenu::setShortcutsActive()
|
||||||
|
{
|
||||||
|
ShortcutsSettings &shortcuts = SettingsCache::instance().shortcuts();
|
||||||
|
|
||||||
|
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
||||||
|
aIncrementAllCardCounters->setShortcuts(shortcuts.getShortcut("Player/aIncrementAllCardCounters"));
|
||||||
|
aUntapAll->setShortcuts(shortcuts.getShortcut("Player/aUntapAll"));
|
||||||
|
aRollDie->setShortcuts(shortcuts.getShortcut("Player/aRollDie"));
|
||||||
|
aCreateToken->setShortcuts(shortcuts.getShortcut("Player/aCreateToken"));
|
||||||
|
aCreateAnotherToken->setShortcuts(shortcuts.getShortcut("Player/aCreateAnotherToken"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UtilityMenu::setShortcutsInactive()
|
||||||
|
{
|
||||||
|
if (player->getPlayerInfo()->getLocalOrJudge()) {
|
||||||
|
aUntapAll->setShortcut(QKeySequence());
|
||||||
|
aRollDie->setShortcut(QKeySequence());
|
||||||
|
aCreateToken->setShortcut(QKeySequence());
|
||||||
|
aCreateAnotherToken->setShortcut(QKeySequence());
|
||||||
|
aIncrementAllCardCounters->setShortcut(QKeySequence());
|
||||||
|
}
|
||||||
|
}
|
||||||
46
cockatrice/src/game/player/player_menu/utility_menu.h
Normal file
46
cockatrice/src/game/player/player_menu/utility_menu.h
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
#ifndef COCKATRICE_UTILITY_MENU_H
|
||||||
|
#define COCKATRICE_UTILITY_MENU_H
|
||||||
|
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
class Player;
|
||||||
|
class UtilityMenu : public QMenu
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public slots:
|
||||||
|
void populatePredefinedTokensMenu();
|
||||||
|
void retranslateUi();
|
||||||
|
void setShortcutsActive();
|
||||||
|
void setShortcutsInactive();
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit UtilityMenu(Player *player, QMenu *playerMenu);
|
||||||
|
|
||||||
|
[[nodiscard]] bool createAnotherTokenActionExists() const
|
||||||
|
{
|
||||||
|
return aCreateAnotherToken != nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setAndEnableCreateAnotherTokenAction(QString text)
|
||||||
|
{
|
||||||
|
aCreateAnotherToken->setText(text);
|
||||||
|
aCreateAnotherToken->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList getPredefinedTokens() const
|
||||||
|
{
|
||||||
|
return predefinedTokens;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
Player *player;
|
||||||
|
QStringList predefinedTokens;
|
||||||
|
|
||||||
|
QMenu *createPredefinedTokenMenu;
|
||||||
|
|
||||||
|
QAction *aIncrementAllCardCounters;
|
||||||
|
QAction *aUntapAll, *aRollDie;
|
||||||
|
QAction *aCreateToken, *aCreateAnotherToken;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COCKATRICE_UTILITY_MENU_H
|
||||||
Loading…
Add table
Add a link
Reference in a new issue