mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-02 11:33:55 -07:00
Disable add to deck submenu if no deck editor tabs are open (#5530)
* refactor * just have the deck name * clean up submenu parenting * disable add to deck menu if no deck editor tabs are open
This commit is contained in:
parent
4d791f4d7a
commit
51c542aa04
2 changed files with 49 additions and 35 deletions
|
|
@ -256,46 +256,27 @@ QMenu *CardInfoPictureWidget::createRightClickMenu()
|
||||||
return cardMenu;
|
return cardMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cardMenu->addMenu(createViewRelatedCardsMenu());
|
||||||
|
cardMenu->addMenu(createAddToOpenDeckMenu());
|
||||||
|
|
||||||
|
return cardMenu;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu *CardInfoPictureWidget::createViewRelatedCardsMenu()
|
||||||
|
{
|
||||||
auto viewRelatedCards = new QMenu(tr("View related cards"));
|
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<MainWindow *>(window());
|
|
||||||
QList<TabDeckEditor *> 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<CardRelation *> relatedCards = info->getAllRelatedCards();
|
QList<CardRelation *> relatedCards = info->getAllRelatedCards();
|
||||||
for (const CardRelation *cardRelation : relatedCards) {
|
|
||||||
CardInfoPtr relatedCard = CardDatabaseManager::getInstance()->getCard(cardRelation->getName());
|
auto relatedCardExists = [](const CardRelation *cardRelation) {
|
||||||
if (relatedCard != nullptr) {
|
return CardDatabaseManager::getInstance()->getCard(cardRelation->getName()) != nullptr;
|
||||||
atLeastOneGoodRelationFound = true;
|
};
|
||||||
break;
|
|
||||||
}
|
bool atLeastOneGoodRelationFound = std::any_of(relatedCards.begin(), relatedCards.end(), relatedCardExists);
|
||||||
}
|
|
||||||
|
|
||||||
if (!atLeastOneGoodRelationFound) {
|
if (!atLeastOneGoodRelationFound) {
|
||||||
viewRelatedCards->setEnabled(false);
|
viewRelatedCards->setEnabled(false);
|
||||||
return cardMenu;
|
return viewRelatedCards;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const auto &relatedCard : relatedCards) {
|
for (const auto &relatedCard : relatedCards) {
|
||||||
|
|
@ -307,7 +288,38 @@ QMenu *CardInfoPictureWidget::createRightClickMenu()
|
||||||
viewRelatedCards->addAction(viewCard);
|
viewRelatedCards->addAction(viewCard);
|
||||||
}
|
}
|
||||||
|
|
||||||
return cardMenu;
|
return viewRelatedCards;
|
||||||
|
}
|
||||||
|
|
||||||
|
QMenu *CardInfoPictureWidget::createAddToOpenDeckMenu()
|
||||||
|
{
|
||||||
|
auto addToOpenDeckMenu = new QMenu(tr("Add card to deck"));
|
||||||
|
|
||||||
|
auto *mainWindow = qobject_cast<MainWindow *>(window());
|
||||||
|
QList<TabDeckEditor *> 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -68,6 +68,8 @@ private:
|
||||||
QTimer *hoverTimer;
|
QTimer *hoverTimer;
|
||||||
|
|
||||||
QMenu *createRightClickMenu();
|
QMenu *createRightClickMenu();
|
||||||
|
QMenu *createViewRelatedCardsMenu();
|
||||||
|
QMenu *createAddToOpenDeckMenu();
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue