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 51caf9bc1..f5a54e5c2 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 @@ -256,46 +256,27 @@ QMenu *CardInfoPictureWidget::createRightClickMenu() return cardMenu; } + cardMenu->addMenu(createViewRelatedCardsMenu()); + cardMenu->addMenu(createAddToOpenDeckMenu()); + + return cardMenu; +} + +QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu() +{ auto viewRelatedCards = new QMenu(tr("View related cards")); - auto addToOpenDeckMenu = new QMenu(tr("Add card to deck")); - cardMenu->addMenu(viewRelatedCards); - cardMenu->addMenu(addToOpenDeckMenu); - auto *mainWindow = qobject_cast(window()); - QList deckEditorTabs = mainWindow->getTabSupervisor()->getDeckEditorTabs(); - - for (auto &deckEditorTab : deckEditorTabs) { - auto *addCardMenu = new QMenu(tr("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(); - for (const CardRelation *cardRelation : relatedCards) { - CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName()); - if (relatedCard != nullptr) { - atLeastOneGoodRelationFound = true; - break; - } - } + + auto relatedCardExists = [](const CardRelation *cardRelation) { + return CardDatabaseManager::getInstance()->getCard(cardRelation->getName()) != nullptr; + }; + + bool atLeastOneGoodRelationFound = std::any_of(relatedCards.begin(), relatedCards.end(), relatedCardExists); if (!atLeastOneGoodRelationFound) { viewRelatedCards->setEnabled(false); - return cardMenu; + return viewRelatedCards; } for (const auto &relatedCard : relatedCards) { @@ -307,7 +288,38 @@ QMenu *CardInfoPictureWidget::createRightClickMenu() viewRelatedCards->addAction(viewCard); } - return cardMenu; + return viewRelatedCards; +} + +QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu() +{ + auto addToOpenDeckMenu = new QMenu(tr("Add card to deck")); + + auto *mainWindow = qobject_cast(window()); + QList deckEditorTabs = mainWindow->getTabSupervisor()->getDeckEditorTabs(); + + if (deckEditorTabs.isEmpty()) { + addToOpenDeckMenu->setEnabled(false); + return addToOpenDeckMenu; + } + + for (auto &deckEditorTab : deckEditorTabs) { + auto *addCardMenu = addToOpenDeckMenu->addMenu(deckEditorTab->getTabText()); + + QAction *addCard = addCardMenu->addAction(tr("Mainboard")); + connect(addCard, &QAction::triggered, this, [this, deckEditorTab] { + deckEditorTab->updateCardInfo(info); + deckEditorTab->addCardHelper(info, DECK_ZONE_MAIN); + }); + + QAction *addCardSideboard = addCardMenu->addAction(tr("Sideboard")); + connect(addCardSideboard, &QAction::triggered, this, [this, deckEditorTab] { + deckEditorTab->updateCardInfo(info); + deckEditorTab->addCardHelper(info, DECK_ZONE_SIDE); + }); + } + + return addToOpenDeckMenu; } /** diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h index 9419de5b9..5f6500d92 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_info_picture_widget.h @@ -68,6 +68,8 @@ private: QTimer *hoverTimer; QMenu *createRightClickMenu(); + QMenu *createViewRelatedCardsMenu(); + QMenu *createAddToOpenDeckMenu(); }; #endif