From 37201ccc85509d9d8e811fa2de30f8e26a533b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Tue, 26 Nov 2024 00:53:43 +0100 Subject: [PATCH] Show related cards from printing selector by right-clicking card image. --- cockatrice/src/client/tabs/tab_deck_editor.h | 2 +- .../printing_selector_card_overlay_widget.cpp | 35 ++++++++++++++++++- .../printing_selector_card_overlay_widget.h | 2 ++ 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/client/tabs/tab_deck_editor.h b/cockatrice/src/client/tabs/tab_deck_editor.h index 3fc49e1f6..fe1405312 100644 --- a/cockatrice/src/client/tabs/tab_deck_editor.h +++ b/cockatrice/src/client/tabs/tab_deck_editor.h @@ -61,7 +61,6 @@ private slots: void updateSearch(const QString &search); void databaseCustomMenu(QPoint point); void decklistCustomMenu(QPoint point); - void showPrintingSelector(); void actNewDeck(); void actLoadDeck(); @@ -187,6 +186,7 @@ public: public slots: void closeRequest() override; + void showPrintingSelector(); signals: void openDeckEditor(const DeckLoader *deckLoader); void deckEditorClosing(TabDeckEditor *tab); diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp index 91121c17d..cfdc57502 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.cpp @@ -3,6 +3,8 @@ #include "../../../../game/cards/card_database_manager.h" #include "printing_selector_card_display_widget.h" +#include +#include #include PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *parent, @@ -46,6 +48,15 @@ PrintingSelectorCardOverlayWidget::PrintingSelectorCardOverlayWidget(QWidget *pa connect(cardSizeSlider, &QSlider::valueChanged, cardInfoPicture, &CardInfoPictureWidget::setScaleFactor); } +void PrintingSelectorCardOverlayWidget::mousePressEvent(QMouseEvent *event) +{ + if (event->button() == Qt::RightButton) { + customMenu(event->pos()); + } else { + QWidget::mousePressEvent(event); // Pass other events to the base class + } +} + void PrintingSelectorCardOverlayWidget::resizeEvent(QResizeEvent *event) { // Ensure the amount widget matches the parent size @@ -67,4 +78,26 @@ void PrintingSelectorCardOverlayWidget::leaveEvent(QEvent *event) { QWidget::leaveEvent(event); allZonesCardAmountWidget->setVisible(false); -} \ No newline at end of file +} + +void PrintingSelectorCardOverlayWidget::customMenu(QPoint point) +{ + QMenu menu; + // filling out the related cards submenu + auto *relatedMenu = new QMenu(tr("Show Related cards")); + menu.addMenu(relatedMenu); + auto relatedCards = rootCard->getAllRelatedCards(); + if (relatedCards.isEmpty()) { + relatedMenu->setDisabled(true); + } else { + for (const CardRelation *rel : relatedCards) { + const QString &relatedCardName = rel->getName(); + QAction *relatedCard = relatedMenu->addAction(relatedCardName); + connect(relatedCard, &QAction::triggered, deckEditor, [this, relatedCardName] { + deckEditor->updateCardInfo(CardDatabaseManager::getInstance()->getCard(relatedCardName)); + deckEditor->showPrintingSelector(); + }); + } + } + menu.exec(this->mapToGlobal(point)); +} diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.h b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.h index c4817b64f..b5984390b 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.h +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_card_overlay_widget.h @@ -30,6 +30,8 @@ protected: void resizeEvent(QResizeEvent *event) override; void enterEvent(QEnterEvent *event) override; void leaveEvent(QEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; + void customMenu(QPoint point); private: CardInfoPictureWidget *cardInfoPicture;