"Show related card" option added to ingame context menu (#3115)
This commit is contained in:
parent
2409eae940
commit
7cfbf114b7
4 changed files with 41 additions and 0 deletions
|
@ -25,6 +25,7 @@
|
|||
#include <QMenu>
|
||||
#include <QPainter>
|
||||
#include <QRegExp>
|
||||
#include <QSignalMapper>
|
||||
|
||||
#include "pb/command_attach_card.pb.h"
|
||||
#include "pb/command_change_zone_properties.pb.h"
|
||||
|
@ -2596,6 +2597,7 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
|
||||
if (revealedCard) {
|
||||
cardMenu->addAction(aHide);
|
||||
addRelatedCardView(card, cardMenu);
|
||||
} else if (writeableCard) {
|
||||
if (moveMenu->isEmpty()) {
|
||||
moveMenu->addAction(aMoveToTopLibrary);
|
||||
|
@ -2611,6 +2613,8 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
|
||||
if (card->getZone()) {
|
||||
if (card->getZone()->getName() == "table") {
|
||||
// Card is on the battlefield
|
||||
|
||||
if (ptMenu->isEmpty()) {
|
||||
ptMenu->addAction(aIncP);
|
||||
ptMenu->addAction(aDecP);
|
||||
|
@ -2631,6 +2635,7 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
cardMenu->addAction(aPeek);
|
||||
}
|
||||
|
||||
addRelatedCardView(card, cardMenu);
|
||||
addRelatedCardActions(card, cardMenu);
|
||||
|
||||
cardMenu->addSeparator();
|
||||
|
@ -2656,22 +2661,27 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
}
|
||||
cardMenu->addSeparator();
|
||||
} else if (card->getZone()->getName() == "stack") {
|
||||
// Card is on the stack
|
||||
cardMenu->addAction(aDrawArrow);
|
||||
cardMenu->addSeparator();
|
||||
cardMenu->addAction(aClone);
|
||||
cardMenu->addMenu(moveMenu);
|
||||
|
||||
addRelatedCardView(card, cardMenu);
|
||||
addRelatedCardActions(card, cardMenu);
|
||||
} else if (card->getZone()->getName() == "rfg" || card->getZone()->getName() == "grave") {
|
||||
// Card is in the graveyard or exile
|
||||
cardMenu->addAction(aPlay);
|
||||
cardMenu->addAction(aPlayFacedown);
|
||||
cardMenu->addSeparator();
|
||||
cardMenu->addAction(aClone);
|
||||
cardMenu->addMenu(moveMenu);
|
||||
} else {
|
||||
// Card is in hand or a custom zone specified by server
|
||||
cardMenu->addAction(aPlay);
|
||||
cardMenu->addAction(aPlayFacedown);
|
||||
cardMenu->addMenu(moveMenu);
|
||||
addRelatedCardView(card, cardMenu);
|
||||
}
|
||||
} else {
|
||||
cardMenu->addMenu(moveMenu);
|
||||
|
@ -2680,6 +2690,7 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
if (card->getZone() && card->getZone()->getName() != "hand") {
|
||||
cardMenu->addAction(aDrawArrow);
|
||||
cardMenu->addSeparator();
|
||||
addRelatedCardView(card, cardMenu);
|
||||
addRelatedCardActions(card, cardMenu);
|
||||
cardMenu->addSeparator();
|
||||
cardMenu->addAction(aClone);
|
||||
|
@ -2687,6 +2698,29 @@ void Player::updateCardMenu(const CardItem *card)
|
|||
}
|
||||
}
|
||||
|
||||
void Player::addRelatedCardView(const CardItem *card, QMenu *cardMenu)
|
||||
{
|
||||
if (card == nullptr || cardMenu == nullptr || card->getInfo() == nullptr) {
|
||||
return;
|
||||
}
|
||||
|
||||
QList<CardRelation *> relatedCards = card->getInfo()->getRelatedCards();
|
||||
if (relatedCards.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
cardMenu->addSeparator();
|
||||
auto viewRelatedCards = new QMenu(tr("View related cards"));
|
||||
cardMenu->addMenu(viewRelatedCards);
|
||||
auto *signalMapper = new QSignalMapper(this);
|
||||
for (const CardRelation *relatedCard : relatedCards) {
|
||||
QAction *viewCard = viewRelatedCards->addAction(relatedCard->getName());
|
||||
connect(viewCard, SIGNAL(triggered()), signalMapper, SLOT(map()));
|
||||
signalMapper->setMapping(viewCard, relatedCard->getName());
|
||||
}
|
||||
connect(signalMapper, SIGNAL(mapped(const QString &)), game, SLOT(viewCardInfo(const QString &)));
|
||||
}
|
||||
|
||||
void Player::addRelatedCardActions(const CardItem *card, QMenu *cardMenu)
|
||||
{
|
||||
if (card == nullptr || cardMenu == nullptr || card->getInfo() == nullptr)
|
||||
|
|
|
@ -244,6 +244,7 @@ private:
|
|||
const QString &avalue,
|
||||
bool allCards);
|
||||
void addRelatedCardActions(const CardItem *card, QMenu *cardMenu);
|
||||
void addRelatedCardView(const CardItem *card, QMenu *cardMenu);
|
||||
void createCard(const CardItem *sourceCard, const QString &dbCardName, bool attach = false);
|
||||
void createAttachedCard(const CardItem *sourceCard, const QString &dbCardName);
|
||||
bool createRelatedFromRelation(const CardItem *sourceCard, const CardRelation *cardRelation);
|
||||
|
|
|
@ -1604,6 +1604,11 @@ void TabGame::createDeckViewContainerWidget(bool bReplay)
|
|||
deckViewContainerWidget->setLayout(deckViewContainerLayout);
|
||||
}
|
||||
|
||||
void TabGame::viewCardInfo(const QString &cardName)
|
||||
{
|
||||
cardInfo->setCard(cardName);
|
||||
}
|
||||
|
||||
void TabGame::createCardInfoDock(bool bReplay)
|
||||
{
|
||||
Q_UNUSED(bReplay);
|
||||
|
|
|
@ -306,6 +306,7 @@ public:
|
|||
public slots:
|
||||
void sendGameCommand(PendingCommand *pend, int playerId = -1);
|
||||
void sendGameCommand(const ::google::protobuf::Message &command, int playerId = -1);
|
||||
void viewCardInfo(const QString &cardName);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue