From 6bb9ae92bf69ef5feead705515b7305d3f3f7175 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Wed, 5 Mar 2025 18:04:53 -0800 Subject: [PATCH 1/8] Update recently opened decks regardless of where the deck is opened from (#5691) --- .../src/client/tabs/abstract_tab_deck_editor.cpp | 16 ++++++++++++++-- .../src/client/tabs/abstract_tab_deck_editor.h | 3 ++- cockatrice/src/client/tabs/tab_deck_storage.cpp | 2 -- cockatrice/src/client/tabs/tab_supervisor.cpp | 2 +- 4 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp index 4dcc57ea6..085638934 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp @@ -128,6 +128,19 @@ void AbstractTabDeckEditor::actSwapCard(CardInfoPtr info, QString zoneName) 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 * @param _deck The deck. Takes ownership of the object @@ -290,13 +303,12 @@ void AbstractTabDeckEditor::openDeckFromFile(const QString &fileName, DeckOpenLo auto *l = new DeckLoader; if (l->loadFromFile(fileName, fmt, true)) { - SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(fileName); if (deckOpenLocation == NEW_TAB) { emit openDeckEditor(l); l->deleteLater(); } else { deckMenu->setSaveStatus(false); - setDeck(l); + openDeck(l); } } else { l->deleteLater(); diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.h b/cockatrice/src/client/tabs/abstract_tab_deck_editor.h index 94fbe9bde..bc7b31917 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.h +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.h @@ -54,7 +54,7 @@ public: virtual void retranslateUi() override = 0; // Deck Management - virtual void setDeck(DeckLoader *_deckLoader); + void openDeck(DeckLoader *deck); DeckLoader *getDeckList() const; void setModified(bool _windowModified); @@ -117,6 +117,7 @@ protected slots: virtual void dockFloatingTriggered() = 0; private: + virtual void setDeck(DeckLoader *_deck); void editDeckInClipboard(bool annotated); protected: diff --git a/cockatrice/src/client/tabs/tab_deck_storage.cpp b/cockatrice/src/client/tabs/tab_deck_storage.cpp index 5fa25be4f..f696f607c 100644 --- a/cockatrice/src/client/tabs/tab_deck_storage.cpp +++ b/cockatrice/src/client/tabs/tab_deck_storage.cpp @@ -246,8 +246,6 @@ void TabDeckStorage::actOpenLocalDeck() if (!deckLoader.loadFromFile(filePath, DeckLoader::CockatriceFormat, true)) continue; - SettingsCache::instance().recents().updateRecentlyOpenedDeckPaths(filePath); - emit openDeckEditor(&deckLoader); } } diff --git a/cockatrice/src/client/tabs/tab_supervisor.cpp b/cockatrice/src/client/tabs/tab_supervisor.cpp index 5b89ab257..e2fb234d7 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.cpp +++ b/cockatrice/src/client/tabs/tab_supervisor.cpp @@ -772,7 +772,7 @@ TabDeckEditor *TabSupervisor::addDeckEditorTab(const DeckLoader *deckToOpen) { auto *tab = new TabDeckEditor(this); if (deckToOpen) - tab->setDeck(new DeckLoader(*deckToOpen)); + tab->openDeck(new DeckLoader(*deckToOpen)); connect(tab, &AbstractTabDeckEditor::deckEditorClosing, this, &TabSupervisor::deckEditorClosed); connect(tab, &AbstractTabDeckEditor::openDeckEditor, this, &TabSupervisor::addDeckEditorTab); myAddTab(tab); From ff7f31ca336b610e6148c148ff5cd18bcfd085b0 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Wed, 5 Mar 2025 18:05:34 -0800 Subject: [PATCH 2/8] add "Set Banner Card" action to VDS right-click menu (#5692) --- .../deck_preview/deck_preview_widget.cpp | 24 +++++++++++++++++++ .../deck_preview/deck_preview_widget.h | 1 + 2 files changed, 25 insertions(+) diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp index a10a2442f..3564a05a9 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.cpp @@ -288,6 +288,8 @@ QMenu *DeckPreviewWidget::createRightClickMenu() connect(menu->addAction(tr("Edit Tags")), &QAction::triggered, deckTagsDisplayWidget, &DeckPreviewDeckTagsDisplayWidget::openTagEditDlg); + addSetBannerCardMenu(menu); + menu->addSeparator(); connect(menu->addAction(tr("Rename Deck")), &QAction::triggered, this, &DeckPreviewWidget::actRenameDeck); @@ -312,6 +314,28 @@ QMenu *DeckPreviewWidget::createRightClickMenu() 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() { // read input diff --git a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h index 4dc5c5aa6..a9df635e5 100644 --- a/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h +++ b/cockatrice/src/client/ui/widgets/visual_deck_storage/deck_preview/deck_preview_widget.h @@ -59,6 +59,7 @@ public slots: private: QMenu *createRightClickMenu(); + void addSetBannerCardMenu(QMenu *menu); private slots: void actRenameDeck(); From 1d11bb19b869b547a9bee7e48fc04b8f420c2a3d Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 7 Mar 2025 13:17:40 -0800 Subject: [PATCH 3/8] Fix view bottom cards using the wrong default (#5696) --- cockatrice/src/game/player/player.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 230f12ad7..b75b4a4a3 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -1139,9 +1139,9 @@ void Player::actViewBottomCards() bool ok; int number = 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) { - defaultNumberTopCards = number; + defaultNumberBottomCards = number; static_cast(scene())->toggleZoneView(this, "deck", number, true); } } From 0ecf6298a340710cdfc42ca010db1bdba70068df Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 7 Mar 2025 17:48:48 -0800 Subject: [PATCH 4/8] Add actions for shuffle top/bottom X cards (#5695) * Add actions for shuffle top/bottom X cards * fix typo * move shuffle actions into existing menus --- cockatrice/src/game/player/player.cpp | 80 +++++++++++++++++++- cockatrice/src/game/player/player.h | 10 ++- cockatrice/src/settings/shortcuts_settings.h | 6 ++ 3 files changed, 90 insertions(+), 6 deletions(-) diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index b75b4a4a3..0080dd472 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -246,8 +246,10 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T connect(aDrawCards, &QAction::triggered, this, &Player::actDrawCards); aUndoDraw = new QAction(this); connect(aUndoDraw, &QAction::triggered, this, &Player::actUndoDraw); + aShuffle = new QAction(this); connect(aShuffle, &QAction::triggered, this, &Player::actShuffle); + aMulligan = new QAction(this); 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); connect(aMoveTopCardToBottom, &QAction::triggered, this, &Player::actMoveTopCardToBottom); + aShuffleTopCards = new QAction(this); + connect(aShuffleTopCards, &QAction::triggered, this, &Player::actShuffleTop); + aDrawBottomCard = new QAction(this); connect(aDrawBottomCard, &QAction::triggered, this, &Player::actDrawBottomCard); 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); aMoveBottomCardToTop = new QAction(this); connect(aMoveBottomCardToTop, &QAction::triggered, this, &Player::actMoveBottomCardToTop); + + aShuffleBottomCards = new QAction(this); + connect(aShuffleBottomCards, &QAction::triggered, this, &Player::actShuffleBottom); } playerMenu = new TearOffMenu(); @@ -330,7 +338,6 @@ Player::Player(const ServerInfo_User &info, int _id, bool _local, bool _judge, T libraryMenu->addSeparator(); libraryMenu->addAction(aOpenDeckInDeckEditor); _deck->setMenu(libraryMenu, aDrawCard); - topLibraryMenu->addAction(aMoveTopToPlay); topLibraryMenu->addAction(aMoveTopToPlayFaceDown); 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(aMoveTopCardsToExile); topLibraryMenu->addAction(aMoveTopCardsUntil); + topLibraryMenu->addSeparator(); + topLibraryMenu->addAction(aShuffleTopCards); bottomLibraryMenu->addAction(aDrawBottomCard); 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(aMoveBottomCardToExile); bottomLibraryMenu->addAction(aMoveBottomCardsToExile); + bottomLibraryMenu->addSeparator(); + bottomLibraryMenu->addAction(aShuffleBottomCards); } graveMenu = playerMenu->addTearOffMenu(QString()); @@ -792,7 +803,8 @@ void Player::retranslateUi() aDrawCards->setText(tr("D&raw cards...")); aUndoDraw->setText(tr("&Undo last draw")); aMulligan->setText(tr("Take &mulligan")); - aShuffle->setText(tr("&Shuffle")); + + aShuffle->setText(tr("Shuffle")); aMoveTopToPlay->setText(tr("&Play top card")); aMoveTopToPlayFaceDown->setText(tr("Play top card &face down")); @@ -802,6 +814,7 @@ void Player::retranslateUi() aMoveTopCardsToGraveyard->setText(tr("Move top cards to &graveyard...")); aMoveTopCardsToExile->setText(tr("Move top cards to &exile...")); aMoveTopCardsUntil->setText(tr("Put top cards on stack &until...")); + aShuffleTopCards->setText(tr("Shuffle top cards...")); aDrawBottomCard->setText(tr("&Draw bottom card")); aDrawBottomCards->setText(tr("D&raw bottom cards...")); @@ -812,6 +825,7 @@ void Player::retranslateUi() aMoveBottomCardsToGraveyard->setText(tr("Move bottom cards to &graveyard...")); aMoveBottomCardsToExile->setText(tr("Move bottom cards to &exile...")); aMoveBottomCardToTop->setText(tr("Put bottom card on &top")); + aShuffleBottomCards->setText(tr("Shuffle bottom cards...")); handMenu->setTitle(tr("&Hand")); mRevealHand->setTitle(tr("&Reveal hand to...")); @@ -979,6 +993,8 @@ void Player::setShortcutsActive() aUndoDraw->setShortcut(shortcuts.getSingleShortcut("Player/aUndoDraw")); aMulligan->setShortcut(shortcuts.getSingleShortcut("Player/aMulligan")); aShuffle->setShortcut(shortcuts.getSingleShortcut("Player/aShuffle")); + aShuffleTopCards->setShortcut(shortcuts.getSingleShortcut("Player/aShuffleTopCards")); + aShuffleBottomCards->setShortcut(shortcuts.getSingleShortcut("Player/aShuffleBottomCards")); aUntapAll->setShortcut(shortcuts.getSingleShortcut("Player/aUntapAll")); aRollDie->setShortcut(shortcuts.getSingleShortcut("Player/aRollDie")); aCreateToken->setShortcut(shortcuts.getSingleShortcut("Player/aCreateToken")); @@ -1029,6 +1045,8 @@ void Player::setShortcutsInactive() aUndoDraw->setShortcut(QKeySequence()); aMulligan->setShortcut(QKeySequence()); aShuffle->setShortcut(QKeySequence()); + aShuffleTopCards->setShortcut(QKeySequence()); + aShuffleBottomCards->setShortcut(QKeySequence()); aUntapAll->setShortcut(QKeySequence()); aRollDie->setShortcut(QKeySequence()); aCreateToken->setShortcut(QKeySequence()); @@ -1202,6 +1220,64 @@ void Player::actShuffle() 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() { Command_DrawCards cmd; diff --git a/cockatrice/src/game/player/player.h b/cockatrice/src/game/player/player.h index b4b4a35b9..66f3089ed 100644 --- a/cockatrice/src/game/player/player.h +++ b/cockatrice/src/game/player/player.h @@ -161,6 +161,8 @@ public slots: void actCreateToken(); void actCreateAnotherToken(); void actShuffle(); + void actShuffleTop(); + void actShuffleBottom(); void actDrawCard(); void actDrawCards(); void actUndoDraw(); @@ -263,10 +265,10 @@ private: *aViewBottomCards, *aAlwaysRevealTopCard, *aAlwaysLookAtTopCard, *aOpenDeckInDeckEditor, *aMoveTopCardToGraveyard, *aMoveTopCardToExile, *aMoveTopCardsToGraveyard, *aMoveTopCardsToExile, *aMoveTopCardsUntil, *aMoveTopCardToBottom, *aViewGraveyard, *aViewRfg, *aViewSideboard, *aDrawCard, - *aDrawCards, *aUndoDraw, *aMulligan, *aShuffle, *aMoveTopToPlay, *aMoveTopToPlayFaceDown, *aUntapAll, *aRollDie, - *aCreateToken, *aCreateAnotherToken, *aMoveBottomToPlay, *aMoveBottomToPlayFaceDown, *aMoveBottomCardToTop, - *aMoveBottomCardToGraveyard, *aMoveBottomCardToExile, *aMoveBottomCardsToGraveyard, *aMoveBottomCardsToExile, - *aDrawBottomCard, *aDrawBottomCards; + *aDrawCards, *aUndoDraw, *aMulligan, *aShuffle, *aShuffleTopCards, *aShuffleBottomCards, *aMoveTopToPlay, + *aMoveTopToPlayFaceDown, *aUntapAll, *aRollDie, *aCreateToken, *aCreateAnotherToken, *aMoveBottomToPlay, + *aMoveBottomToPlayFaceDown, *aMoveBottomCardToTop, *aMoveBottomCardToGraveyard, *aMoveBottomCardToExile, + *aMoveBottomCardsToGraveyard, *aMoveBottomCardsToExile, *aDrawBottomCard, *aDrawBottomCards; QAction *aCardMenu; QList aAddCounter, aSetCounter, aRemoveCounter; diff --git a/cockatrice/src/settings/shortcuts_settings.h b/cockatrice/src/settings/shortcuts_settings.h index ce0127d57..2d6f4758f 100644 --- a/cockatrice/src/settings/shortcuts_settings.h +++ b/cockatrice/src/settings/shortcuts_settings.h @@ -578,6 +578,12 @@ private: {"Player/aShuffle", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Shuffle Library"), parseSequenceString("Ctrl+S"), 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"), parseSequenceString("Ctrl+M"), ShortcutGroup::Drawing)}, From 2ba7c1ff9a14457aefefb20852752fa33ba9ab94 Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Fri, 7 Mar 2025 18:16:59 -0800 Subject: [PATCH 5/8] Fix incorrect deck modified state (#5698) --- cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp index 085638934..9ed84b3a7 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp @@ -76,7 +76,7 @@ void AbstractTabDeckEditor::updateCard(CardInfoPtr _card) void AbstractTabDeckEditor::onDeckChanged() { - setModified(isBlankNewDeck()); + setModified(!isBlankNewDeck()); deckMenu->setSaveStatus(!isBlankNewDeck()); } From 0a1d0f650f6dae67c1aa1b092c2b171a2a1820dc Mon Sep 17 00:00:00 2001 From: RickyRister <42636155+RickyRister@users.noreply.github.com> Date: Sat, 8 Mar 2025 19:41:58 -0800 Subject: [PATCH 6/8] Enable shortcuts for new save to clipboard actions (#5700) * Enable shortcuts for new save to clipboard actions * rename shortcut --- .../src/client/menus/deck_editor/deck_editor_menu.cpp | 4 ++++ cockatrice/src/settings/shortcuts_settings.h | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp index be4d50d58..a6f9ff272 100644 --- a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp +++ b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp @@ -183,7 +183,11 @@ void DeckEditorMenu::refreshShortcuts() aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose")); aSaveDeckToClipboard->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboard")); + aSaveDeckToClipboardNoSetNameAndNumber->setShortcuts( + shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardNoSetInfo")); aSaveDeckToClipboardRaw->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRaw")); + aSaveDeckToClipboardRawNoSetNameAndNumber->setShortcuts( + shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRawNoSetInfo")); aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose")); } diff --git a/cockatrice/src/settings/shortcuts_settings.h b/cockatrice/src/settings/shortcuts_settings.h index 2d6f4758f..0dcbcbad0 100644 --- a/cockatrice/src/settings/shortcuts_settings.h +++ b/cockatrice/src/settings/shortcuts_settings.h @@ -240,10 +240,18 @@ private: ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated"), parseSequenceString("Ctrl+Shift+C"), ShortcutGroup::Deck_Editor)}, + {"TabDeckEditor/aSaveDeckToClipboardNoSetInfo", + ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard, Annotated (No Set Info)"), + parseSequenceString(""), + ShortcutGroup::Deck_Editor)}, {"TabDeckEditor/aSaveDeckToClipboardRaw", ShortcutKey(QT_TRANSLATE_NOOP("shortcutsTab", "Save Deck to Clipboard"), parseSequenceString("Ctrl+Shift+R"), 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..."), parseSequenceString("Ctrl+O"), ShortcutGroup::Game_Lobby)}, From 2d44c9ad2faa6a716bd85f5e5d93f63b9c3c7528 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sat, 8 Mar 2025 20:01:30 -0800 Subject: [PATCH 7/8] Rename some save to clipboard actions --- .../menus/deck_editor/deck_editor_menu.cpp | 28 +++++++++---------- .../menus/deck_editor/deck_editor_menu.h | 4 +-- .../client/tabs/abstract_tab_deck_editor.cpp | 4 +-- .../client/tabs/abstract_tab_deck_editor.h | 4 +-- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp index a6f9ff272..73c76c807 100644 --- a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp +++ b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.cpp @@ -39,16 +39,15 @@ DeckEditorMenu::DeckEditorMenu(QWidget *parent, AbstractTabDeckEditor *_deckEdit aSaveDeckToClipboard = new QAction(QString(), this); connect(aSaveDeckToClipboard, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboard())); - aSaveDeckToClipboardNoSetNameAndNumber = new QAction(QString(), this); - connect(aSaveDeckToClipboardNoSetNameAndNumber, SIGNAL(triggered()), deckEditor, - SLOT(actSaveDeckToClipboardNoSetNameAndNumber())); + aSaveDeckToClipboardNoSetInfo = new QAction(QString(), this); + connect(aSaveDeckToClipboardNoSetInfo, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboardNoSetInfo())); aSaveDeckToClipboardRaw = new QAction(QString(), this); connect(aSaveDeckToClipboardRaw, SIGNAL(triggered()), deckEditor, SLOT(actSaveDeckToClipboardRaw())); - aSaveDeckToClipboardRawNoSetNameAndNumber = new QAction(QString(), this); - connect(aSaveDeckToClipboardRawNoSetNameAndNumber, SIGNAL(triggered()), deckEditor, - SLOT(actSaveDeckToClipboardRawNoSetNameAndNumber())); + aSaveDeckToClipboardRawNoSetInfo = new QAction(QString(), this); + connect(aSaveDeckToClipboardRawNoSetInfo, SIGNAL(triggered()), deckEditor, + SLOT(actSaveDeckToClipboardRawNoSetInfo())); aPrintDeck = new QAction(QString(), this); connect(aPrintDeck, SIGNAL(triggered()), deckEditor, SLOT(actPrintDeck())); @@ -76,9 +75,9 @@ DeckEditorMenu::DeckEditorMenu(QWidget *parent, AbstractTabDeckEditor *_deckEdit saveDeckToClipboardMenu = new QMenu(this); saveDeckToClipboardMenu->addAction(aSaveDeckToClipboard); - saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardNoSetNameAndNumber); + saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardNoSetInfo); saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRaw); - saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRawNoSetNameAndNumber); + saveDeckToClipboardMenu->addAction(aSaveDeckToClipboardRawNoSetInfo); addAction(aNewDeck); addAction(aLoadDeck); @@ -108,9 +107,9 @@ void DeckEditorMenu::setSaveStatus(bool newStatus) aSaveDeck->setEnabled(newStatus); aSaveDeckAs->setEnabled(newStatus); aSaveDeckToClipboard->setEnabled(newStatus); - aSaveDeckToClipboardNoSetNameAndNumber->setEnabled(newStatus); + aSaveDeckToClipboardNoSetInfo->setEnabled(newStatus); aSaveDeckToClipboardRaw->setEnabled(newStatus); - aSaveDeckToClipboardRawNoSetNameAndNumber->setEnabled(newStatus); + aSaveDeckToClipboardRawNoSetInfo->setEnabled(newStatus); saveDeckToClipboardMenu->setEnabled(newStatus); aPrintDeck->setEnabled(newStatus); analyzeDeckMenu->setEnabled(newStatus); @@ -153,9 +152,9 @@ void DeckEditorMenu::retranslateUi() saveDeckToClipboardMenu->setTitle(tr("Save deck to clipboard")); 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")); - aSaveDeckToClipboardRawNoSetNameAndNumber->setText(tr("Not Annotated (No set name or number)")); + aSaveDeckToClipboardRawNoSetInfo->setText(tr("Not Annotated (No set info)")); aPrintDeck->setText(tr("&Print deck...")); @@ -183,10 +182,9 @@ void DeckEditorMenu::refreshShortcuts() aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose")); aSaveDeckToClipboard->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboard")); - aSaveDeckToClipboardNoSetNameAndNumber->setShortcuts( - shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardNoSetInfo")); + aSaveDeckToClipboardNoSetInfo->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardNoSetInfo")); aSaveDeckToClipboardRaw->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRaw")); - aSaveDeckToClipboardRawNoSetNameAndNumber->setShortcuts( + aSaveDeckToClipboardRawNoSetInfo->setShortcuts( shortcuts.getShortcut("TabDeckEditor/aSaveDeckToClipboardRawNoSetInfo")); aClose->setShortcuts(shortcuts.getShortcut("TabDeckEditor/aClose")); diff --git a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.h b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.h index 5d0a3f9e6..50ddc795a 100644 --- a/cockatrice/src/client/menus/deck_editor/deck_editor_menu.h +++ b/cockatrice/src/client/menus/deck_editor/deck_editor_menu.h @@ -15,8 +15,8 @@ public: AbstractTabDeckEditor *deckEditor; QAction *aNewDeck, *aLoadDeck, *aClearRecents, *aSaveDeck, *aSaveDeckAs, *aLoadDeckFromClipboard, - *aEditDeckInClipboard, *aEditDeckInClipboardRaw, *aSaveDeckToClipboard, *aSaveDeckToClipboardNoSetNameAndNumber, - *aSaveDeckToClipboardRaw, *aSaveDeckToClipboardRawNoSetNameAndNumber, *aPrintDeck, *aExportDeckDecklist, + *aEditDeckInClipboard, *aEditDeckInClipboardRaw, *aSaveDeckToClipboard, *aSaveDeckToClipboardNoSetInfo, + *aSaveDeckToClipboardRaw, *aSaveDeckToClipboardRawNoSetInfo, *aPrintDeck, *aExportDeckDecklist, *aAnalyzeDeckDeckstats, *aAnalyzeDeckTappedout, *aClose; QMenu *loadRecentDeckMenu, *analyzeDeckMenu, *editDeckInClipboardMenu, *saveDeckToClipboardMenu; diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp index 9ed84b3a7..326e722c9 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.cpp @@ -433,7 +433,7 @@ void AbstractTabDeckEditor::actSaveDeckToClipboard() getDeckList()->saveToClipboard(true, true); } -void AbstractTabDeckEditor::actSaveDeckToClipboardNoSetNameAndNumber() +void AbstractTabDeckEditor::actSaveDeckToClipboardNoSetInfo() { getDeckList()->saveToClipboard(true, false); } @@ -443,7 +443,7 @@ void AbstractTabDeckEditor::actSaveDeckToClipboardRaw() getDeckList()->saveToClipboard(false, true); } -void AbstractTabDeckEditor::actSaveDeckToClipboardRawNoSetNameAndNumber() +void AbstractTabDeckEditor::actSaveDeckToClipboardRawNoSetInfo() { getDeckList()->saveToClipboard(false, false); } diff --git a/cockatrice/src/client/tabs/abstract_tab_deck_editor.h b/cockatrice/src/client/tabs/abstract_tab_deck_editor.h index bc7b31917..47e6fc78c 100644 --- a/cockatrice/src/client/tabs/abstract_tab_deck_editor.h +++ b/cockatrice/src/client/tabs/abstract_tab_deck_editor.h @@ -95,9 +95,9 @@ protected slots: void actEditDeckInClipboard(); void actEditDeckInClipboardRaw(); void actSaveDeckToClipboard(); - void actSaveDeckToClipboardNoSetNameAndNumber(); + void actSaveDeckToClipboardNoSetInfo(); void actSaveDeckToClipboardRaw(); - void actSaveDeckToClipboardRawNoSetNameAndNumber(); + void actSaveDeckToClipboardRawNoSetInfo(); void actPrintDeck(); void actExportDeckDecklist(); void actAnalyzeDeckDeckstats(); From ef15aa2dcd007a5c1bb75c31f2f0329304219891 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sun, 9 Mar 2025 05:26:47 -0700 Subject: [PATCH 8/8] Show correct printing for top card of library --- cockatrice/src/game/player/player.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/game/player/player.cpp b/cockatrice/src/game/player/player.cpp index 0080dd472..bcd18d23a 100644 --- a/cockatrice/src/game/player/player.cpp +++ b/cockatrice/src/game/player/player.cpp @@ -2594,8 +2594,12 @@ void Player::eventRevealCards(const Event_RevealCards &event, EventProcessingOpt auto cardId = event.card_id_size() == 0 ? -1 : event.card_id(0); if (cardList.size() == 1) { cardName = QString::fromStdString(cardList.first()->name()); - if ((cardId == 0) && dynamic_cast(zone)) { - zone->getCards().first()->setName(cardName); + + // Handle case of revealing top card of library in-place + if (cardId == 0 && dynamic_cast(zone)) { + auto card = zone->getCards().first(); + card->setName(cardName); + card->setProviderId(QString::fromStdString(cardList.first()->provider_id())); zone->update(); showZoneView = false; }