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 6a50de8bc..09845f652 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 @@ -258,7 +258,42 @@ QMenu *CardInfoPictureWidget::createRightClickMenu() cardMenu->addMenu(createViewRelatedCardsMenu()); cardMenu->addMenu(createAddToOpenDeckMenu()); + + return cardMenu; +} +QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu() +{ + auto viewRelatedCards = new QMenu(tr("View related cards")); + + QList relatedCards = info->getAllRelatedCards(); + + 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 viewRelatedCards; + } + + for (const auto &relatedCard : relatedCards) { + const auto &relatedCardName = relatedCard->getName(); + QAction *viewCard = viewRelatedCards->addAction(relatedCardName); + connect(viewCard, &QAction::triggered, this, [this, &relatedCardName] { + emit cardChanged(CardDatabaseManager::getInstance()->getCard(relatedCardName)); + }); + viewRelatedCards->addAction(viewCard); + } + + return viewRelatedCards; +} + +QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu() +{ + auto addToOpenDeckMenu = new QMenu(tr("Add card to deck")); return cardMenu; } @@ -298,25 +333,27 @@ QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu() auto *mainWindow = qobject_cast(window()); QList deckEditorTabs = mainWindow->getTabSupervisor()->getDeckEditorTabs(); + if (deckEditorTabs.isEmpty()) { + addToOpenDeckMenu->setEnabled(false); + return addToOpenDeckMenu; + } + for (auto &deckEditorTab : deckEditorTabs) { - auto *addCardMenu = new QMenu(tr("Add card to") + " " + deckEditorTab->getTabText()); - QAction *addCard = new QAction(this); - addCard->setText(tr("Mainboard")); + 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 = new QAction(this); - addCardSideboard->setText(tr("Sideboard")); + + QAction *addCardSideboard = addCardMenu->addAction(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); } - + return addToOpenDeckMenu; }