mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-17 07:52:16 -07:00
Merge branch 'master' into game-time-part2-checkbox
This commit is contained in:
commit
b1465c3701
11 changed files with 169 additions and 35 deletions
|
|
@ -39,16 +39,15 @@ DeckEditorMenu::DeckEditorMenu(QWidget *parent, AbstractTabDeckEditor *_deckEdit
|
||||||
aSaveDeckToClipboard = new QAction(QString(), this);
|
aSaveDeckToClipboard = new QAction(QString(), this);
|
||||||
connect(aSaveDeckToClipboard, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboard()));
|
connect(aSaveDeckToClipboard, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboard()));
|
||||||
|
|
||||||
aSaveDeckToClipboardNoSetNameAndNumber = new QAction(QString(), this);
|
aSaveDeckToClipboardNoSetInfo = new QAction(QString(), this);
|
||||||
connect(aSaveDeckToClipboardNoSetNameAndNumber, SIGNAL(triggered()), deckEditor,
|
connect(aSaveDeckToClipboardNoSetInfo, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboardNoSetInfo()));
|
||||||
SLOT(actSaveDeckToClipboardNoSetNameAndNumber()));
|
|
||||||
|
|
||||||
aSaveDeckToClipboardRaw = new QAction(QString(), this);
|
aSaveDeckToClipboardRaw = new QAction(QString(), this);
|
||||||
connect(aSaveDeckToClipboardRaw, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboardRaw()));
|
connect(aSaveDeckToClipboardRaw, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboardRaw()));
|
||||||
|
|
||||||
aSaveDeckToClipboardRawNoSetNameAndNumber = new QAction(QString(), this);
|
aSaveDeckToClipboardRawNoSetInfo = new QAction(QString(), this);
|
||||||
connect(aSaveDeckToClipboardRawNoSetNameAndNumber, SIGNAL(triggered()), deckEditor,
|
connect(aSaveDeckToClipboardRawNoSetInfo, SIGNAL(triggered()), deckEditor,
|
||||||
SLOT(actSaveDeckToClipboardRawNoSetNameAndNumber()));
|
SLOT(actSaveDeckToClipboardRawNoSetInfo()));
|
||||||
|
|
||||||
aPrintDeck = new QAction(QString(), this);
|
aPrintDeck = new QAction(QString(), this);
|
||||||
connect(aPrintDeck, SIGNAL(triggered()), deckEditor, SLOT(actPrintDeck()));
|
connect(aPrintDeck, SIGNAL(triggered()), deckEditor, SLOT(actPrintDeck()));
|
||||||
|
|
@ -76,9 +75,9 @@ DeckEditorMenu::DeckEditorMenu(QWidget *parent, AbstractTabDeckEditor *_deckEdit
|
||||||
|
|
||||||
saveDeckToClipboardMenu = new QMenu(this);
|
saveDeckToClipboardMenu = new QMenu(this);
|
||||||
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboard);
|
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboard);
|
||||||
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardNoSetNameAndNumber);
|
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardNoSetInfo);
|
||||||
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRaw);
|
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRaw);
|
||||||
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRawNoSetNameAndNumber);
|
saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRawNoSetInfo);
|
||||||
|
|
||||||
addAction(aNewDeck);
|
addAction(aNewDeck);
|
||||||
addAction(aLoadDeck);
|
addAction(aLoadDeck);
|
||||||
|
|
@ -108,9 +107,9 @@ void DeckEditorMenu::setSaveStatus(bool newStatus)
|
||||||
aSaveDeck->setEnabled(newStatus);
|
aSaveDeck->setEnabled(newStatus);
|
||||||
aSaveDeckAs->setEnabled(newStatus);
|
aSaveDeckAs->setEnabled(newStatus);
|
||||||
aSaveDeckToClipboard->setEnabled(newStatus);
|
aSaveDeckToClipboard->setEnabled(newStatus);
|
||||||
aSaveDeckToClipboardNoSetNameAndNumber->setEnabled(newStatus);
|
aSaveDeckToClipboardNoSetInfo->setEnabled(newStatus);
|
||||||
aSaveDeckToClipboardRaw->setEnabled(newStatus);
|
aSaveDeckToClipboardRaw->setEnabled(newStatus);
|
||||||
aSaveDeckToClipboardRawNoSetNameAndNumber->setEnabled(newStatus);
|
aSaveDeckToClipboardRawNoSetInfo->setEnabled(newStatus);
|
||||||
saveDeckToClipboardMenu->setEnabled(newStatus);
|
saveDeckToClipboardMenu->setEnabled(newStatus);
|
||||||
aPrintDeck->setEnabled(newStatus);
|
aPrintDeck->setEnabled(newStatus);
|
||||||
analyzeDeckMenu->setEnabled(newStatus);
|
analyzeDeckMenu->setEnabled(newStatus);
|
||||||
|
|
@ -153,9 +152,9 @@ void DeckEditorMenu::retranslateUi()
|
||||||
|
|
||||||
saveDeckToClipboardMenu->setTitle(tr("Save deck to clipboard"));
|
saveDeckToClipboardMenu->setTitle(tr("Save deck to clipboard"));
|
||||||
aSaveDeckToClipboard->setText(tr("Annotated"));
|
aSaveDeckToClipboard->setText(tr("Annotated"));
|
||||||
aSaveDeckToClipboardNoSetNameAndNumber->setText(tr("Annotated (No set name or number)"));
|
aSaveDeckToClipboardNoSetInfo->setText(tr("Annotated (No set info)"));
|
||||||
aSaveDeckToClipboardRaw->setText(tr("Not Annotated"));
|
aSaveDeckToClipboardRaw->setText(tr("Not Annotated"));
|
||||||
aSaveDeckToClipboardRawNoSetNameAndNumber->setText(tr("Not Annotated (No set name or number)"));
|
aSaveDeckToClipboardRawNoSetInfo->setText(tr("Not Annotated (No set info)"));
|
||||||
|
|
||||||
aPrintDeck->setText(tr("&Print deck..."));
|
aPrintDeck->setText(tr("&Print deck..."));
|
||||||
|
|
||||||
|
|
@ -183,7 +182,10 @@ void DeckEditorMenu::refreshShortcuts()
|
||||||
aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose"));
|
aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose"));
|
||||||
|
|
||||||
aSaveDeckToClipboard->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboard"));
|
aSaveDeckToClipboard->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboard"));
|
||||||
|
aSaveDeckToClipboardNoSetInfo->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardNoSetInfo"));
|
||||||
aSaveDeckToClipboardRaw->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRaw"));
|
aSaveDeckToClipboardRaw->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRaw"));
|
||||||
|
aSaveDeckToClipboardRawNoSetInfo->setShortcuts(
|
||||||
|
shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRawNoSetInfo"));
|
||||||
|
|
||||||
aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose"));
|
aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose"));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ public:
|
||||||
AbstractTabDeckEditor *deckEditor;
|
AbstractTabDeckEditor *deckEditor;
|
||||||
|
|
||||||
QAction *aNewDeck, *aLoadDeck, *aClearRecents, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard,
|
QAction *aNewDeck, *aLoadDeck, *aClearRecents, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard,
|
||||||
*aEditDeckInClipboard, *aEditDeckInClipboardRaw, *aSaveDeckToClipboard, *aSaveDeckToClipboardNoSetNameAndNumber,
|
*aEditDeckInClipboard, *aEditDeckInClipboardRaw, *aSaveDeckToClipboard, *aSaveDeckToClipboardNoSetInfo,
|
||||||
*aSaveDeckToClipboardRaw, *aSaveDeckToClipboardRawNoSetNameAndNumber, *aPrintDeck, *aExportDeckDecklist,
|
*aSaveDeckToClipboardRaw, *aSaveDeckToClipboardRawNoSetInfo, *aPrintDeck, *aExportDeckDecklist,
|
||||||
*aAnalyzeDeckDeckstats, *aAnalyzeDeckTappedout, *aClose;
|
*aAnalyzeDeckDeckstats, *aAnalyzeDeckTappedout, *aClose;
|
||||||
QMenu *loadRecentDeckMenu, *analyzeDeckMenu, *editDeckInClipboardMenu, *saveDeckToClipboardMenu;
|
QMenu *loadRecentDeckMenu, *analyzeDeckMenu, *editDeckInClipboardMenu, *saveDeckToClipboardMenu;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ void AbstractTabDeckEditor::updateCard(CardInfoPtr _card)
|
||||||
|
|
||||||
void AbstractTabDeckEditor::onDeckChanged()
|
void AbstractTabDeckEditor::onDeckChanged()
|
||||||
{
|
{
|
||||||
setModified(isBlankNewDeck());
|
setModified(!isBlankNewDeck());
|
||||||
deckMenu->setSaveStatus(!isBlankNewDeck());
|
deckMenu->setSaveStatus(!isBlankNewDeck());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -128,6 +128,19 @@ void AbstractTabDeckEditor::actSwapCard(CardInfoPtr info, QString zoneName)
|
||||||
deckDockWidget->deckModel->findCard(info->getName(), zoneName, providerId, collectorNumber));
|
deckDockWidget->deckModel->findCard(info->getName(), zoneName, providerId, collectorNumber));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the deck in this tab.
|
||||||
|
* @param deck The deck. Takes ownership of the object
|
||||||
|
*/
|
||||||
|
void AbstractTabDeckEditor::openDeck(DeckLoader *deck)
|
||||||
|
{
|
||||||
|
setDeck(deck);
|
||||||
|
|
||||||
|
if (!deck->getLastFileName().isEmpty()) {
|
||||||
|
SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(deck->getLastFileName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the currently active deck for this tab
|
* Sets the currently active deck for this tab
|
||||||
* @param _deck The deck. Takes ownership of the object
|
* @param _deck The deck. Takes ownership of the object
|
||||||
|
|
@ -290,13 +303,12 @@ void AbstractTabDeckEditor::openDeckFromFile(const QString &fileName, DeckOpenLo
|
||||||
|
|
||||||
auto *l = new DeckLoader;
|
auto *l = new DeckLoader;
|
||||||
if (l->loadFromFile(fileName, fmt, true)) {
|
if (l->loadFromFile(fileName, fmt, true)) {
|
||||||
SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(fileName);
|
|
||||||
if (deckOpenLocation == NEW_TAB) {
|
if (deckOpenLocation == NEW_TAB) {
|
||||||
emit openDeckEditor(l);
|
emit openDeckEditor(l);
|
||||||
l->deleteLater();
|
l->deleteLater();
|
||||||
} else {
|
} else {
|
||||||
deckMenu->setSaveStatus(false);
|
deckMenu->setSaveStatus(false);
|
||||||
setDeck(l);
|
openDeck(l);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
l->deleteLater();
|
l->deleteLater();
|
||||||
|
|
@ -421,7 +433,7 @@ void AbstractTabDeckEditor::actSaveDeckToClipboard()
|
||||||
getDeckList()->saveToClipboard(true, true);
|
getDeckList()->saveToClipboard(true, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractTabDeckEditor::actSaveDeckToClipboardNoSetNameAndNumber()
|
void AbstractTabDeckEditor::actSaveDeckToClipboardNoSetInfo()
|
||||||
{
|
{
|
||||||
getDeckList()->saveToClipboard(true, false);
|
getDeckList()->saveToClipboard(true, false);
|
||||||
}
|
}
|
||||||
|
|
@ -431,7 +443,7 @@ void AbstractTabDeckEditor::actSaveDeckToClipboardRaw()
|
||||||
getDeckList()->saveToClipboard(false, true);
|
getDeckList()->saveToClipboard(false, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractTabDeckEditor::actSaveDeckToClipboardRawNoSetNameAndNumber()
|
void AbstractTabDeckEditor::actSaveDeckToClipboardRawNoSetInfo()
|
||||||
{
|
{
|
||||||
getDeckList()->saveToClipboard(false, false);
|
getDeckList()->saveToClipboard(false, false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ public:
|
||||||
virtual void retranslateUi() override = 0;
|
virtual void retranslateUi() override = 0;
|
||||||
|
|
||||||
// Deck Management
|
// Deck Management
|
||||||
virtual void setDeck(DeckLoader *_deckLoader);
|
void openDeck(DeckLoader *deck);
|
||||||
DeckLoader *getDeckList() const;
|
DeckLoader *getDeckList() const;
|
||||||
void setModified(bool _windowModified);
|
void setModified(bool _windowModified);
|
||||||
|
|
||||||
|
|
@ -95,9 +95,9 @@ protected slots:
|
||||||
void actEditDeckInClipboard();
|
void actEditDeckInClipboard();
|
||||||
void actEditDeckInClipboardRaw();
|
void actEditDeckInClipboardRaw();
|
||||||
void actSaveDeckToClipboard();
|
void actSaveDeckToClipboard();
|
||||||
void actSaveDeckToClipboardNoSetNameAndNumber();
|
void actSaveDeckToClipboardNoSetInfo();
|
||||||
void actSaveDeckToClipboardRaw();
|
void actSaveDeckToClipboardRaw();
|
||||||
void actSaveDeckToClipboardRawNoSetNameAndNumber();
|
void actSaveDeckToClipboardRawNoSetInfo();
|
||||||
void actPrintDeck();
|
void actPrintDeck();
|
||||||
void actExportDeckDecklist();
|
void actExportDeckDecklist();
|
||||||
void actAnalyzeDeckDeckstats();
|
void actAnalyzeDeckDeckstats();
|
||||||
|
|
@ -117,6 +117,7 @@ protected slots:
|
||||||
virtual void dockFloatingTriggered() = 0;
|
virtual void dockFloatingTriggered() = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
virtual void setDeck(DeckLoader *_deck);
|
||||||
void editDeckInClipboard(bool annotated);
|
void editDeckInClipboard(bool annotated);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
||||||
|
|
@ -246,8 +246,6 @@ void TabDeckStorage::actOpenLocalDeck()
|
||||||
if (!deckLoader.loadFromFile(filePath, DeckLoader::CockatriceFormat, true))
|
if (!deckLoader.loadFromFile(filePath, DeckLoader::CockatriceFormat, true))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(filePath);
|
|
||||||
|
|
||||||
emit openDeckEditor(&deckLoader);
|
emit openDeckEditor(&deckLoader);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -772,7 +772,7 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen)
|
||||||
{
|
{
|
||||||
auto *tab = new TabDeckEditor(this);
|
auto *tab = new TabDeckEditor(this);
|
||||||
if (deckToOpen)
|
if (deckToOpen)
|
||||||
tab->setDeck(new DeckLoader(*deckToOpen));
|
tab->openDeck(new DeckLoader(*deckToOpen));
|
||||||
connect(tab, &AbstractTabDeckEditor::deckEditorClosing, this, &TabSupervisor::deckEditorClosed);
|
connect(tab, &AbstractTabDeckEditor::deckEditorClosing, this, &TabSupervisor::deckEditorClosed);
|
||||||
connect(tab, &AbstractTabDeckEditor::openDeckEditor, this, &TabSupervisor::addDeckEditorTab);
|
connect(tab, &AbstractTabDeckEditor::openDeckEditor, this, &TabSupervisor::addDeckEditorTab);
|
||||||
myAddTab(tab);
|
myAddTab(tab);
|
||||||
|
|
|
||||||
|
|
@ -288,6 +288,8 @@ QMenu *DeckPreviewWidget::createRightClickMenu()
|
||||||
connect(menu->addAction(tr("Edit Tags")), &QAction::triggered, deckTagsDisplayWidget,
|
connect(menu->addAction(tr("Edit Tags")), &QAction::triggered, deckTagsDisplayWidget,
|
||||||
&DeckPreviewDeckTagsDisplayWidget::openTagEditDlg);
|
&DeckPreviewDeckTagsDisplayWidget::openTagEditDlg);
|
||||||
|
|
||||||
|
addSetBannerCardMenu(menu);
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|
||||||
connect(menu->addAction(tr("Rename Deck")), &QAction::triggered, this, &DeckPreviewWidget::actRenameDeck);
|
connect(menu->addAction(tr("Rename Deck")), &QAction::triggered, this, &DeckPreviewWidget::actRenameDeck);
|
||||||
|
|
@ -312,6 +314,28 @@ QMenu *DeckPreviewWidget::createRightClickMenu()
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the "Set Banner Card" submenu to the given menu. Does nothing if bannerCardComboBox is null.
|
||||||
|
* @param menu The menu to add the submenu to
|
||||||
|
*/
|
||||||
|
void DeckPreviewWidget::addSetBannerCardMenu(QMenu *menu)
|
||||||
|
{
|
||||||
|
if (!bannerCardComboBox) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto bannerCardMenu = menu->addMenu(tr("Set Banner Card"));
|
||||||
|
|
||||||
|
for (int i = 0; i < bannerCardComboBox->count(); ++i) {
|
||||||
|
auto action = bannerCardMenu->addAction(bannerCardComboBox->itemText(i));
|
||||||
|
connect(action, &QAction::triggered, this, [this, i] { bannerCardComboBox->setCurrentIndex(i); });
|
||||||
|
|
||||||
|
// the checkability is purely for visuals
|
||||||
|
action->setCheckable(true);
|
||||||
|
action->setChecked(bannerCardComboBox->currentIndex() == i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void DeckPreviewWidget::actRenameDeck()
|
void DeckPreviewWidget::actRenameDeck()
|
||||||
{
|
{
|
||||||
// read input
|
// read input
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ public slots:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QMenu *createRightClickMenu();
|
QMenu *createRightClickMenu();
|
||||||
|
void addSetBannerCardMenu(QMenu *menu);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void actRenameDeck();
|
void actRenameDeck();
|
||||||
|
|
|
||||||
|
|
@ -246,8 +246,10 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
connect(aDrawCards, &QAction::triggered, this, &Player::actDrawCards);
|
connect(aDrawCards, &QAction::triggered, this, &Player::actDrawCards);
|
||||||
aUndoDraw = new QAction(this);
|
aUndoDraw = new QAction(this);
|
||||||
connect(aUndoDraw, &QAction::triggered, this, &Player::actUndoDraw);
|
connect(aUndoDraw, &QAction::triggered, this, &Player::actUndoDraw);
|
||||||
|
|
||||||
aShuffle = new QAction(this);
|
aShuffle = new QAction(this);
|
||||||
connect(aShuffle, &QAction::triggered, this, &Player::actShuffle);
|
connect(aShuffle, &QAction::triggered, this, &Player::actShuffle);
|
||||||
|
|
||||||
aMulligan = new QAction(this);
|
aMulligan = new QAction(this);
|
||||||
connect(aMulligan, &QAction::triggered, this, &Player::actMulligan);
|
connect(aMulligan, &QAction::triggered, this, &Player::actMulligan);
|
||||||
|
|
||||||
|
|
@ -268,6 +270,9 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
aMoveTopCardToBottom = new QAction(this);
|
aMoveTopCardToBottom = new QAction(this);
|
||||||
connect(aMoveTopCardToBottom, &QAction::triggered, this, &Player::actMoveTopCardToBottom);
|
connect(aMoveTopCardToBottom, &QAction::triggered, this, &Player::actMoveTopCardToBottom);
|
||||||
|
|
||||||
|
aShuffleTopCards = new QAction(this);
|
||||||
|
connect(aShuffleTopCards, &QAction::triggered, this, &Player::actShuffleTop);
|
||||||
|
|
||||||
aDrawBottomCard = new QAction(this);
|
aDrawBottomCard = new QAction(this);
|
||||||
connect(aDrawBottomCard, &QAction::triggered, this, &Player::actDrawBottomCard);
|
connect(aDrawBottomCard, &QAction::triggered, this, &Player::actDrawBottomCard);
|
||||||
aDrawBottomCards = new QAction(this);
|
aDrawBottomCards = new QAction(this);
|
||||||
|
|
@ -286,6 +291,9 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
connect(aMoveBottomCardsToExile, &QAction::triggered, this, &Player::actMoveBottomCardsToExile);
|
connect(aMoveBottomCardsToExile, &QAction::triggered, this, &Player::actMoveBottomCardsToExile);
|
||||||
aMoveBottomCardToTop = new QAction(this);
|
aMoveBottomCardToTop = new QAction(this);
|
||||||
connect(aMoveBottomCardToTop, &QAction::triggered, this, &Player::actMoveBottomCardToTop);
|
connect(aMoveBottomCardToTop, &QAction::triggered, this, &Player::actMoveBottomCardToTop);
|
||||||
|
|
||||||
|
aShuffleBottomCards = new QAction(this);
|
||||||
|
connect(aShuffleBottomCards, &QAction::triggered, this, &Player::actShuffleBottom);
|
||||||
}
|
}
|
||||||
|
|
||||||
playerMenu = new TearOffMenu();
|
playerMenu = new TearOffMenu();
|
||||||
|
|
@ -330,7 +338,6 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
libraryMenu->addSeparator();
|
libraryMenu->addSeparator();
|
||||||
libraryMenu->addAction(aOpenDeckInDeckEditor);
|
libraryMenu->addAction(aOpenDeckInDeckEditor);
|
||||||
_deck->setMenu(libraryMenu, aDrawCard);
|
_deck->setMenu(libraryMenu, aDrawCard);
|
||||||
|
|
||||||
topLibraryMenu->addAction(aMoveTopToPlay);
|
topLibraryMenu->addAction(aMoveTopToPlay);
|
||||||
topLibraryMenu->addAction(aMoveTopToPlayFaceDown);
|
topLibraryMenu->addAction(aMoveTopToPlayFaceDown);
|
||||||
topLibraryMenu->addAction(aMoveTopCardToBottom);
|
topLibraryMenu->addAction(aMoveTopCardToBottom);
|
||||||
|
|
@ -340,6 +347,8 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
topLibraryMenu->addAction(aMoveTopCardToExile);
|
topLibraryMenu->addAction(aMoveTopCardToExile);
|
||||||
topLibraryMenu->addAction(aMoveTopCardsToExile);
|
topLibraryMenu->addAction(aMoveTopCardsToExile);
|
||||||
topLibraryMenu->addAction(aMoveTopCardsUntil);
|
topLibraryMenu->addAction(aMoveTopCardsUntil);
|
||||||
|
topLibraryMenu->addSeparator();
|
||||||
|
topLibraryMenu->addAction(aShuffleTopCards);
|
||||||
|
|
||||||
bottomLibraryMenu->addAction(aDrawBottomCard);
|
bottomLibraryMenu->addAction(aDrawBottomCard);
|
||||||
bottomLibraryMenu->addAction(aDrawBottomCards);
|
bottomLibraryMenu->addAction(aDrawBottomCards);
|
||||||
|
|
@ -352,6 +361,8 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T
|
||||||
bottomLibraryMenu->addAction(aMoveBottomCardsToGraveyard);
|
bottomLibraryMenu->addAction(aMoveBottomCardsToGraveyard);
|
||||||
bottomLibraryMenu->addAction(aMoveBottomCardToExile);
|
bottomLibraryMenu->addAction(aMoveBottomCardToExile);
|
||||||
bottomLibraryMenu->addAction(aMoveBottomCardsToExile);
|
bottomLibraryMenu->addAction(aMoveBottomCardsToExile);
|
||||||
|
bottomLibraryMenu->addSeparator();
|
||||||
|
bottomLibraryMenu->addAction(aShuffleBottomCards);
|
||||||
}
|
}
|
||||||
|
|
||||||
graveMenu = playerMenu->addTearOffMenu(QString());
|
graveMenu = playerMenu->addTearOffMenu(QString());
|
||||||
|
|
@ -792,7 +803,8 @@ void Player::retranslateUi()
|
||||||
aDrawCards->setText(tr("D&raw cards..."));
|
aDrawCards->setText(tr("D&raw cards..."));
|
||||||
aUndoDraw->setText(tr("&Undo last draw"));
|
aUndoDraw->setText(tr("&Undo last draw"));
|
||||||
aMulligan->setText(tr("Take &mulligan"));
|
aMulligan->setText(tr("Take &mulligan"));
|
||||||
aShuffle->setText(tr("&Shuffle"));
|
|
||||||
|
aShuffle->setText(tr("Shuffle"));
|
||||||
|
|
||||||
aMoveTopToPlay->setText(tr("&Play top card"));
|
aMoveTopToPlay->setText(tr("&Play top card"));
|
||||||
aMoveTopToPlayFaceDown->setText(tr("Play top card &face down"));
|
aMoveTopToPlayFaceDown->setText(tr("Play top card &face down"));
|
||||||
|
|
@ -802,6 +814,7 @@ void Player::retranslateUi()
|
||||||
aMoveTopCardsToGraveyard->setText(tr("Move top cards to &graveyard..."));
|
aMoveTopCardsToGraveyard->setText(tr("Move top cards to &graveyard..."));
|
||||||
aMoveTopCardsToExile->setText(tr("Move top cards to &exile..."));
|
aMoveTopCardsToExile->setText(tr("Move top cards to &exile..."));
|
||||||
aMoveTopCardsUntil->setText(tr("Put top cards on stack &until..."));
|
aMoveTopCardsUntil->setText(tr("Put top cards on stack &until..."));
|
||||||
|
aShuffleTopCards->setText(tr("Shuffle top cards..."));
|
||||||
|
|
||||||
aDrawBottomCard->setText(tr("&Draw bottom card"));
|
aDrawBottomCard->setText(tr("&Draw bottom card"));
|
||||||
aDrawBottomCards->setText(tr("D&raw bottom cards..."));
|
aDrawBottomCards->setText(tr("D&raw bottom cards..."));
|
||||||
|
|
@ -812,6 +825,7 @@ void Player::retranslateUi()
|
||||||
aMoveBottomCardsToGraveyard->setText(tr("Move bottom cards to &graveyard..."));
|
aMoveBottomCardsToGraveyard->setText(tr("Move bottom cards to &graveyard..."));
|
||||||
aMoveBottomCardsToExile->setText(tr("Move bottom cards to &exile..."));
|
aMoveBottomCardsToExile->setText(tr("Move bottom cards to &exile..."));
|
||||||
aMoveBottomCardToTop->setText(tr("Put bottom card on &top"));
|
aMoveBottomCardToTop->setText(tr("Put bottom card on &top"));
|
||||||
|
aShuffleBottomCards->setText(tr("Shuffle bottom cards..."));
|
||||||
|
|
||||||
handMenu->setTitle(tr("&Hand"));
|
handMenu->setTitle(tr("&Hand"));
|
||||||
mRevealHand->setTitle(tr("&Reveal hand to..."));
|
mRevealHand->setTitle(tr("&Reveal hand to..."));
|
||||||
|
|
@ -979,6 +993,8 @@ void Player::setShortcutsActive()
|
||||||
aUndoDraw->setShortcut(shortcuts.getSingleShortcut("Player/aUndoDraw"));
|
aUndoDraw->setShortcut(shortcuts.getSingleShortcut("Player/aUndoDraw"));
|
||||||
aMulligan->setShortcut(shortcuts.getSingleShortcut("Player/aMulligan"));
|
aMulligan->setShortcut(shortcuts.getSingleShortcut("Player/aMulligan"));
|
||||||
aShuffle->setShortcut(shortcuts.getSingleShortcut("Player/aShuffle"));
|
aShuffle->setShortcut(shortcuts.getSingleShortcut("Player/aShuffle"));
|
||||||
|
aShuffleTopCards->setShortcut(shortcuts.getSingleShortcut("Player/aShuffleTopCards"));
|
||||||
|
aShuffleBottomCards->setShortcut(shortcuts.getSingleShortcut("Player/aShuffleBottomCards"));
|
||||||
aUntapAll->setShortcut(shortcuts.getSingleShortcut("Player/aUntapAll"));
|
aUntapAll->setShortcut(shortcuts.getSingleShortcut("Player/aUntapAll"));
|
||||||
aRollDie->setShortcut(shortcuts.getSingleShortcut("Player/aRollDie"));
|
aRollDie->setShortcut(shortcuts.getSingleShortcut("Player/aRollDie"));
|
||||||
aCreateToken->setShortcut(shortcuts.getSingleShortcut("Player/aCreateToken"));
|
aCreateToken->setShortcut(shortcuts.getSingleShortcut("Player/aCreateToken"));
|
||||||
|
|
@ -1029,6 +1045,8 @@ void Player::setShortcutsInactive()
|
||||||
aUndoDraw->setShortcut(QKeySequence());
|
aUndoDraw->setShortcut(QKeySequence());
|
||||||
aMulligan->setShortcut(QKeySequence());
|
aMulligan->setShortcut(QKeySequence());
|
||||||
aShuffle->setShortcut(QKeySequence());
|
aShuffle->setShortcut(QKeySequence());
|
||||||
|
aShuffleTopCards->setShortcut(QKeySequence());
|
||||||
|
aShuffleBottomCards->setShortcut(QKeySequence());
|
||||||
aUntapAll->setShortcut(QKeySequence());
|
aUntapAll->setShortcut(QKeySequence());
|
||||||
aRollDie->setShortcut(QKeySequence());
|
aRollDie->setShortcut(QKeySequence());
|
||||||
aCreateToken->setShortcut(QKeySequence());
|
aCreateToken->setShortcut(QKeySequence());
|
||||||
|
|
@ -1139,9 +1157,9 @@ void Player::actViewBottomCards()
|
||||||
bool ok;
|
bool ok;
|
||||||
int number =
|
int number =
|
||||||
QInputDialog::getInt(game, tr("View bottom cards of library"), tr("Number of cards: (max. %1)").arg(deckSize),
|
QInputDialog::getInt(game, tr("View bottom cards of library"), tr("Number of cards: (max. %1)").arg(deckSize),
|
||||||
defaultNumberTopCards, 1, deckSize, 1, &ok);
|
defaultNumberBottomCards, 1, deckSize, 1, &ok);
|
||||||
if (ok) {
|
if (ok) {
|
||||||
defaultNumberTopCards = number;
|
defaultNumberBottomCards = number;
|
||||||
static_cast<GameScene *>(scene())->toggleZoneView(this, "deck", number, true);
|
static_cast<GameScene *>(scene())->toggleZoneView(this, "deck", number, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1202,6 +1220,64 @@ void Player::actShuffle()
|
||||||
sendGameCommand(Command_Shuffle());
|
sendGameCommand(Command_Shuffle());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Player::actShuffleTop()
|
||||||
|
{
|
||||||
|
const int maxCards = zones.value("deck")->getCards().size();
|
||||||
|
if (maxCards == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
int number =
|
||||||
|
QInputDialog::getInt(game, tr("Shuffle top cards of library"), tr("Number of cards: (max. %1)").arg(maxCards),
|
||||||
|
defaultNumberTopCards, 1, maxCards, 1, &ok);
|
||||||
|
if (!ok) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number > maxCards) {
|
||||||
|
number = maxCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultNumberTopCards = number;
|
||||||
|
|
||||||
|
Command_Shuffle cmd;
|
||||||
|
cmd.set_zone_name("deck");
|
||||||
|
cmd.set_start(0);
|
||||||
|
cmd.set_end(number - 1); // inclusive, the indexed card at end will be shuffled
|
||||||
|
|
||||||
|
sendGameCommand(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::actShuffleBottom()
|
||||||
|
{
|
||||||
|
const int maxCards = zones.value("deck")->getCards().size();
|
||||||
|
if (maxCards == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
int number = QInputDialog::getInt(game, tr("Shuffle bottom cards of library"),
|
||||||
|
tr("Number of cards: (max. %1)").arg(maxCards), defaultNumberBottomCards, 1,
|
||||||
|
maxCards, 1, &ok);
|
||||||
|
if (!ok) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (number > maxCards) {
|
||||||
|
number = maxCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultNumberBottomCards = number;
|
||||||
|
|
||||||
|
Command_Shuffle cmd;
|
||||||
|
cmd.set_zone_name("deck");
|
||||||
|
cmd.set_start(-number);
|
||||||
|
cmd.set_end(-1);
|
||||||
|
|
||||||
|
sendGameCommand(cmd);
|
||||||
|
}
|
||||||
|
|
||||||
void Player::actDrawCard()
|
void Player::actDrawCard()
|
||||||
{
|
{
|
||||||
Command_DrawCards cmd;
|
Command_DrawCards cmd;
|
||||||
|
|
@ -2518,8 +2594,12 @@ void Player::eventRevealCards(const Event_RevealCards &event, EventProcessingOpt
|
||||||
auto cardId = event.card_id_size() == 0 ? -1 : event.card_id(0);
|
auto cardId = event.card_id_size() == 0 ? -1 : event.card_id(0);
|
||||||
if (cardList.size() == 1) {
|
if (cardList.size() == 1) {
|
||||||
cardName = QString::fromStdString(cardList.first()->name());
|
cardName = QString::fromStdString(cardList.first()->name());
|
||||||
if ((cardId == 0) && dynamic_cast<PileZone *>(zone)) {
|
|
||||||
zone->getCards().first()->setName(cardName);
|
// Handle case of revealing top card of library in-place
|
||||||
|
if (cardId == 0 && dynamic_cast<PileZone *>(zone)) {
|
||||||
|
auto card = zone->getCards().first();
|
||||||
|
card->setName(cardName);
|
||||||
|
card->setProviderId(QString::fromStdString(cardList.first()->provider_id()));
|
||||||
zone->update();
|
zone->update();
|
||||||
showZoneView = false;
|
showZoneView = false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -161,6 +161,8 @@ public slots:
|
||||||
void actCreateToken();
|
void actCreateToken();
|
||||||
void actCreateAnotherToken();
|
void actCreateAnotherToken();
|
||||||
void actShuffle();
|
void actShuffle();
|
||||||
|
void actShuffleTop();
|
||||||
|
void actShuffleBottom();
|
||||||
void actDrawCard();
|
void actDrawCard();
|
||||||
void actDrawCards();
|
void actDrawCards();
|
||||||
void actUndoDraw();
|
void actUndoDraw();
|
||||||
|
|
@ -263,10 +265,10 @@ private:
|
||||||
*aViewBottomCards, *aAlwaysRevealTopCard, *aAlwaysLookAtTopCard, *aOpenDeckInDeckEditor,
|
*aViewBottomCards, *aAlwaysRevealTopCard, *aAlwaysLookAtTopCard, *aOpenDeckInDeckEditor,
|
||||||
*aMoveTopCardToGraveyard, *aMoveTopCardToExile, *aMoveTopCardsToGraveyard, *aMoveTopCardsToExile,
|
*aMoveTopCardToGraveyard, *aMoveTopCardToExile, *aMoveTopCardsToGraveyard, *aMoveTopCardsToExile,
|
||||||
*aMoveTopCardsUntil, *aMoveTopCardToBottom, *aViewGraveyard, *aViewRfg, *aViewSideboard, *aDrawCard,
|
*aMoveTopCardsUntil, *aMoveTopCardToBottom, *aViewGraveyard, *aViewRfg, *aViewSideboard, *aDrawCard,
|
||||||
*aDrawCards, *aUndoDraw, *aMulligan, *aShuffle, *aMoveTopToPlay, *aMoveTopToPlayFaceDown, *aUntapAll, *aRollDie,
|
*aDrawCards, *aUndoDraw, *aMulligan, *aShuffle, *aShuffleTopCards, *aShuffleBottomCards, *aMoveTopToPlay,
|
||||||
*aCreateToken, *aCreateAnotherToken, *aMoveBottomToPlay, *aMoveBottomToPlayFaceDown, *aMoveBottomCardToTop,
|
*aMoveTopToPlayFaceDown, *aUntapAll, *aRollDie, *aCreateToken, *aCreateAnotherToken, *aMoveBottomToPlay,
|
||||||
*aMoveBottomCardToGraveyard, *aMoveBottomCardToExile, *aMoveBottomCardsToGraveyard, *aMoveBottomCardsToExile,
|
*aMoveBottomToPlayFaceDown, *aMoveBottomCardToTop, *aMoveBottomCardToGraveyard, *aMoveBottomCardToExile,
|
||||||
*aDrawBottomCard, *aDrawBottomCards;
|
*aMoveBottomCardsToGraveyard, *aMoveBottomCardsToExile, *aDrawBottomCard, *aDrawBottomCards;
|
||||||
|
|
||||||
QAction *aCardMenu;
|
QAction *aCardMenu;
|
||||||
QList<QAction *> aAddCounter, aSetCounter, aRemoveCounter;
|
QList<QAction *> aAddCounter, aSetCounter, aRemoveCounter;
|
||||||
|
|
|
||||||
|
|
@ -240,10 +240,18 @@ private:
|
||||||
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated"),
|
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated"),
|
||||||
parseSequenceString("Ctrl+Shift+C"),
|
parseSequenceString("Ctrl+Shift+C"),
|
||||||
ShortcutGroup::Deck_Editor)},
|
ShortcutGroup::Deck_Editor)},
|
||||||
|
{"TabDeckEditor/aSaveDeckToClipboardNoSetInfo",
|
||||||
|
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated (No Set Info)"),
|
||||||
|
parseSequenceString(""),
|
||||||
|
ShortcutGroup::Deck_Editor)},
|
||||||
{"TabDeckEditor/aSaveDeckToClipboardRaw",
|
{"TabDeckEditor/aSaveDeckToClipboardRaw",
|
||||||
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard"),
|
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard"),
|
||||||
parseSequenceString("Ctrl+Shift+R"),
|
parseSequenceString("Ctrl+Shift+R"),
|
||||||
ShortcutGroup::Deck_Editor)},
|
ShortcutGroup::Deck_Editor)},
|
||||||
|
{"TabDeckEditor/aSaveDeckToClipboardRawNoSetInfo",
|
||||||
|
ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard (No Set Info)"),
|
||||||
|
parseSequenceString(""),
|
||||||
|
ShortcutGroup::Deck_Editor)},
|
||||||
{"DeckViewContainer/loadLocalButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Local Deck..."),
|
{"DeckViewContainer/loadLocalButton", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Load Local Deck..."),
|
||||||
parseSequenceString("Ctrl+O"),
|
parseSequenceString("Ctrl+O"),
|
||||||
ShortcutGroup::Game_Lobby)},
|
ShortcutGroup::Game_Lobby)},
|
||||||
|
|
@ -578,6 +586,12 @@ private:
|
||||||
{"Player/aShuffle", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Library"),
|
{"Player/aShuffle", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Library"),
|
||||||
parseSequenceString("Ctrl+S"),
|
parseSequenceString("Ctrl+S"),
|
||||||
ShortcutGroup::Gameplay)},
|
ShortcutGroup::Gameplay)},
|
||||||
|
{"Player/aShuffleTopCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Top Cards of Library"),
|
||||||
|
parseSequenceString(""),
|
||||||
|
ShortcutGroup::Gameplay)},
|
||||||
|
{"Player/aShuffleBottomCards", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Bottom Cards of Library"),
|
||||||
|
parseSequenceString(""),
|
||||||
|
ShortcutGroup::Gameplay)},
|
||||||
{"Player/aMulligan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan"),
|
{"Player/aMulligan", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Mulligan"),
|
||||||
parseSequenceString("Ctrl+M"),
|
parseSequenceString("Ctrl+M"),
|
||||||
ShortcutGroup::Drawing)},
|
ShortcutGroup::Drawing)},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue