From 276a8fa33585168e4a262ce2ce0c64f612af1833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Wed, 22 Jan 2025 11:05:01 +0100 Subject: [PATCH] Add right click menu to add cards to open deck editor tabs from CardInfoPictureWidget. --- .../src/client/tabs/tab_deck_editor.cpp | 7 ++--- cockatrice/src/client/tabs/tab_deck_editor.h | 2 +- cockatrice/src/client/tabs/tab_supervisor.h | 4 +++ .../widgets/cards/card_info_frame_widget.cpp | 3 ++ .../cards/card_info_picture_widget.cpp | 28 +++++++++++++++++++ 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/client/tabs/tab_deck_editor.cpp b/cockatrice/src/client/tabs/tab_deck_editor.cpp index 354de12b4..ee593037a 100644 --- a/cockatrice/src/client/tabs/tab_deck_editor.cpp +++ b/cockatrice/src/client/tabs/tab_deck_editor.cpp @@ -1387,9 +1387,8 @@ QModelIndexList TabDeckEditor::getSelectedCardNodes() const return selectedRows; } -void TabDeckEditor::addCardHelper(QString zoneName) +void TabDeckEditor::addCardHelper(const CardInfoPtr info, QString zoneName) { - const CardInfoPtr info = currentCardInfo(); if (!info) return; if (info->getIsToken()) @@ -1465,13 +1464,13 @@ void TabDeckEditor::actAddCard() if (QApplication::keyboardModifiers() & Qt::ControlModifier) actAddCardToSideboard(); else - addCardHelper(DECK_ZONE_MAIN); + addCardHelper(currentCardInfo(), DECK_ZONE_MAIN); setSaveStatus(true); } void TabDeckEditor::actAddCardToSideboard() { - addCardHelper(DECK_ZONE_SIDE); + addCardHelper(currentCardInfo(), DECK_ZONE_SIDE); setSaveStatus(true); } diff --git a/cockatrice/src/client/tabs/tab_deck_editor.h b/cockatrice/src/client/tabs/tab_deck_editor.h index 6a5d320a4..ab0c0883e 100644 --- a/cockatrice/src/client/tabs/tab_deck_editor.h +++ b/cockatrice/src/client/tabs/tab_deck_editor.h @@ -110,7 +110,6 @@ private: bool isBlankNewDeck() const; CardInfoPtr currentCardInfo() const; - void addCardHelper(QString zoneName); void offsetCountAtIndex(const QModelIndex &idx, int offset); void decrementCardHelper(QString zoneName); bool swapCard(const QModelIndex &idx); @@ -179,6 +178,7 @@ public: void createMenus(); void createCentralFrame(); void updateCardInfo(CardInfoPtr _card); + void addCardHelper(CardInfoPtr info, QString zoneName); public slots: void closeRequest(bool forced = false) override; diff --git a/cockatrice/src/client/tabs/tab_supervisor.h b/cockatrice/src/client/tabs/tab_supervisor.h index 02fd8ef12..5f817a218 100644 --- a/cockatrice/src/client/tabs/tab_supervisor.h +++ b/cockatrice/src/client/tabs/tab_supervisor.h @@ -132,6 +132,10 @@ public: { return roomTabs; } + QList getDeckEditorTabs() const + { + return deckEditorTabs; + } bool getAdminLocked() const; bool closeRequest(); bool switchToGameTabIfAlreadyExists(const int gameId); diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp index 714ad20ca..eabdbbe40 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_frame_widget.cpp @@ -151,6 +151,9 @@ void CardInfoFrameWidget::setCard(CardInfoPtr card) disconnect(info.data(), nullptr, this, nullptr); } + if (viewTransformationButton) { + viewTransformationButton->setVisible(false); + } info = std::move(card); if (info) { diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp index d2806121a..4e0a2aea7 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.cpp @@ -3,7 +3,10 @@ #include "../../../../game/cards/card_database_manager.h" #include "../../../../game/cards/card_item.h" #include "../../../../settings/cache_settings.h" +#include "../../../tabs/tab_deck_editor.h" +#include "../../../tabs/tab_supervisor.h" #include "../../picture_loader/picture_loader.h" +#include "../../window_main.h" #include #include @@ -254,7 +257,32 @@ QMenu *CardInfoPictureWidget::createRightClickMenu() } auto viewRelatedCards = new QMenu(tr("View related cards")); + auto addToOpenDeckMenu = new QMenu(tr("Add card to deck")); cardMenu->addMenu(viewRelatedCards); + cardMenu->addMenu(addToOpenDeckMenu); + + QWidget *topLevel = window(); + auto *mainWindow = qobject_cast(topLevel); + QList deckEditorTabs = mainWindow->getTabSupervisor()->getDeckEditorTabs(); + + for (auto &deckEditorTab : deckEditorTabs) { + auto *addCardMenu = new QMenu("Add card to " + deckEditorTab->getTabText()); + QAction *addCard = new QAction(this); + addCard->setText(tr("Mainboard")); + connect(addCard, &QAction::triggered, this, [this, deckEditorTab] { + deckEditorTab->updateCardInfo(info); + deckEditorTab->addCardHelper(info, DECK_ZONE_MAIN); + }); + QAction *addCardSideboard = new QAction(this); + addCardSideboard->setText(tr("Sideboard")); + connect(addCardSideboard, &QAction::triggered, this, [this, deckEditorTab] { + deckEditorTab->updateCardInfo(info); + deckEditorTab->addCardHelper(info, DECK_ZONE_SIDE); + }); + addCardMenu->addAction(addCard); + addCardMenu->addAction(addCardSideboard); + addToOpenDeckMenu->addMenu(addCardMenu); + } bool atLeastOneGoodRelationFound = false; QList relatedCards = info->getAllRelatedCards();