From dad1aea128e2e2bebb3cf4d34c7554abf2cb121f Mon Sep 17 00:00:00 2001 From: Zach H Date: Sun, 29 Dec 2024 18:24:32 -0500 Subject: [PATCH] Show correct art on middle mouse popup (#5385) --- cockatrice/src/client/tabs/tab.cpp | 8 +++++--- cockatrice/src/client/tabs/tab.h | 4 ++-- cockatrice/src/client/tabs/tab_game.cpp | 4 ++-- cockatrice/src/client/tabs/tab_message.cpp | 2 +- cockatrice/src/client/tabs/tab_room.cpp | 2 +- .../ui/widgets/cards/card_info_display_widget.cpp | 11 +++++++---- .../ui/widgets/cards/card_info_display_widget.h | 7 +++++-- cockatrice/src/game/cards/abstract_card_item.cpp | 2 +- cockatrice/src/game/cards/abstract_card_item.h | 2 +- cockatrice/src/game/cards/card_database.cpp | 7 ++++--- cockatrice/src/game/cards/card_database.h | 2 +- cockatrice/src/server/chat_view/chat_view.cpp | 4 ++-- cockatrice/src/server/chat_view/chat_view.h | 2 +- 13 files changed, 33 insertions(+), 24 deletions(-) diff --git a/cockatrice/src/client/tabs/tab.cpp b/cockatrice/src/client/tabs/tab.cpp index 0ffc5ecdf..80f0ffc9a 100644 --- a/cockatrice/src/client/tabs/tab.cpp +++ b/cockatrice/src/client/tabs/tab.cpp @@ -12,14 +12,16 @@ Tab::Tab(TabSupervisor *_tabSupervisor, QWidget *parent) setAttribute(Qt::WA_DeleteOnClose); } -void Tab::showCardInfoPopup(const QPoint &pos, const QString &cardName) +void Tab::showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId) { if (infoPopup) { infoPopup->deleteLater(); } currentCardName = cardName; - infoPopup = new CardInfoDisplayWidget( - cardName, 0, Qt::Widget | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint); + currentProviderId = providerId; + infoPopup = new CardInfoDisplayWidget(cardName, providerId, nullptr, + Qt::Widget | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint | + Qt::WindowStaysOnTopHint); infoPopup->setAttribute(Qt::WA_TransparentForMouseEvents); auto screenRect = qApp->primaryScreen()->geometry(); diff --git a/cockatrice/src/client/tabs/tab.h b/cockatrice/src/client/tabs/tab.h index 295c1e28f..75b6e1b59 100644 --- a/cockatrice/src/client/tabs/tab.h +++ b/cockatrice/src/client/tabs/tab.h @@ -21,11 +21,11 @@ protected: tabMenus.append(menu); } protected slots: - void showCardInfoPopup(const QPoint &pos, const QString &cardName); + void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); void deleteCardInfoPopup(const QString &cardName); private: - QString currentCardName; + QString currentCardName, currentProviderId; bool contentsChanged; CardInfoDisplayWidget *infoPopup; QList tabMenus; diff --git a/cockatrice/src/client/tabs/tab_game.cpp b/cockatrice/src/client/tabs/tab_game.cpp index 5850c2ce8..5e5c9e6cf 100644 --- a/cockatrice/src/client/tabs/tab_game.cpp +++ b/cockatrice/src/client/tabs/tab_game.cpp @@ -1410,7 +1410,7 @@ void TabGame::eventSetActivePhase(const Event_SetActivePhase &event, void TabGame::newCardAdded(AbstractCardItem *card) { connect(card, SIGNAL(hovered(AbstractCardItem *)), cardInfoFrameWidget, SLOT(setCard(AbstractCardItem *))); - connect(card, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); + connect(card, &AbstractCardItem::showCardInfoPopup, this, &TabGame::showCardInfoPopup); connect(card, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); connect(card, SIGNAL(cardShiftClicked(QString)), this, SLOT(linkCardToChat(QString))); } @@ -1892,7 +1892,7 @@ void TabGame::createMessageDock(bool bReplay) { messageLog = new MessageLogWidget(tabSupervisor, tabSupervisor, this); connect(messageLog, SIGNAL(cardNameHovered(QString)), cardInfoFrameWidget, SLOT(setCard(QString))); - connect(messageLog, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); + connect(messageLog, &MessageLogWidget::showCardInfoPopup, this, &TabGame::showCardInfoPopup); connect(messageLog, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); if (!bReplay) { diff --git a/cockatrice/src/client/tabs/tab_message.cpp b/cockatrice/src/client/tabs/tab_message.cpp index 21fc0e265..b39126083 100644 --- a/cockatrice/src/client/tabs/tab_message.cpp +++ b/cockatrice/src/client/tabs/tab_message.cpp @@ -26,7 +26,7 @@ TabMessage::TabMessage(TabSupervisor *_tabSupervisor, otherUserInfo(new ServerInfo_User(_otherUserInfo)), userOnline(true) { chatView = new ChatView(tabSupervisor, tabSupervisor, 0, true); - connect(chatView, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); + connect(chatView, &ChatView::showCardInfoPopup, this, &TabMessage::showCardInfoPopup); connect(chatView, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); connect(chatView, SIGNAL(addMentionTag(QString)), this, SLOT(addMentionTag(QString))); sayEdit = new LineEditUnfocusable; diff --git a/cockatrice/src/client/tabs/tab_room.cpp b/cockatrice/src/client/tabs/tab_room.cpp index 034a236ce..a76b9851a 100644 --- a/cockatrice/src/client/tabs/tab_room.cpp +++ b/cockatrice/src/client/tabs/tab_room.cpp @@ -55,7 +55,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, connect(chatView, SIGNAL(showMentionPopup(const QString &)), this, SLOT(actShowMentionPopup(const QString &))); connect(chatView, SIGNAL(messageClickedSignal()), this, SLOT(focusTab())); connect(chatView, SIGNAL(openMessageDialog(QString, bool)), this, SIGNAL(openMessageDialog(QString, bool))); - connect(chatView, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); + connect(chatView, &ChatView::showCardInfoPopup, this, &TabRoom::showCardInfoPopup); connect(chatView, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); connect(chatView, SIGNAL(addMentionTag(QString)), this, SLOT(addMentionTag(QString))); connect(&SettingsCache::instance(), SIGNAL(chatMentionCompleterChanged()), this, SLOT(actCompleterChanged())); diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp index 6e774a5a4..780ef53fe 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp +++ b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.cpp @@ -11,7 +11,10 @@ #include #include -CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, QWidget *parent, Qt::WindowFlags flags) +CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, + const QString &providerId, + QWidget *parent, + Qt::WindowFlags flags) : QFrame(parent, flags), aspectRatio((qreal)CARD_HEIGHT / (qreal)CARD_WIDTH), info(nullptr) { setContentsMargins(3, 3, 3, 3); @@ -37,7 +40,7 @@ CardInfoDisplayWidget::CardInfoDisplayWidget(const QString &cardName, QWidget *p pic->setFixedHeight(pixmapHeight); setFixedWidth(pixmapWidth + 150); - setCard(cardName); + setCard(cardName, providerId); // ensure our parent gets a valid size to position us correctly resize(width(), sizeHint().height()); @@ -55,9 +58,9 @@ void CardInfoDisplayWidget::setCard(CardInfoPtr card) pic->setCard(info); } -void CardInfoDisplayWidget::setCard(const QString &cardName) +void CardInfoDisplayWidget::setCard(const QString &cardName, const QString &providerId) { - setCard(CardDatabaseManager::getInstance()->guessCard(cardName)); + setCard(CardDatabaseManager::getInstance()->guessCard(cardName, providerId)); if (info == nullptr) { text->setInvalidCardName(cardName); } diff --git a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h index 21498d10c..46d42b2bc 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_info_display_widget.h @@ -22,11 +22,14 @@ private: CardInfoTextWidget *text; public: - explicit CardInfoDisplayWidget(const QString &cardName, QWidget *parent = nullptr, Qt::WindowFlags f = {}); + explicit CardInfoDisplayWidget(const QString &cardName, + const QString &providerId, + QWidget *parent = nullptr, + Qt::WindowFlags f = {}); public slots: void setCard(CardInfoPtr card); - void setCard(const QString &cardName); + void setCard(const QString &cardName, const QString &providerId = QString()); void setCard(AbstractCardItem *card); private slots: diff --git a/cockatrice/src/game/cards/abstract_card_item.cpp b/cockatrice/src/game/cards/abstract_card_item.cpp index a8a2375f3..336ce6f79 100644 --- a/cockatrice/src/game/cards/abstract_card_item.cpp +++ b/cockatrice/src/game/cards/abstract_card_item.cpp @@ -296,7 +296,7 @@ void AbstractCardItem::mousePressEvent(QGraphicsSceneMouseEvent *event) if (event->button() == Qt::LeftButton) setCursor(Qt::ClosedHandCursor); else if (event->button() == Qt::MiddleButton) - emit showCardInfoPopup(event->screenPos(), name); + emit showCardInfoPopup(event->screenPos(), name, providerId); event->accept(); } diff --git a/cockatrice/src/game/cards/abstract_card_item.h b/cockatrice/src/game/cards/abstract_card_item.h index c7ecd0615..372588150 100644 --- a/cockatrice/src/game/cards/abstract_card_item.h +++ b/cockatrice/src/game/cards/abstract_card_item.h @@ -35,7 +35,7 @@ private slots: } signals: void hovered(AbstractCardItem *card); - void showCardInfoPopup(QPoint pos, QString cardName); + void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); void deleteCardInfoPopup(QString cardName); void sigPixmapUpdated(); void cardShiftClicked(QString cardName); diff --git a/cockatrice/src/game/cards/card_database.cpp b/cockatrice/src/game/cards/card_database.cpp index f71c8ad77..fb39f278e 100644 --- a/cockatrice/src/game/cards/card_database.cpp +++ b/cockatrice/src/game/cards/card_database.cpp @@ -501,13 +501,14 @@ CardInfoPtr CardDatabase::getCardBySimpleName(const QString &cardName) const return getCardFromMap(simpleNameCards, CardInfo::simplifyName(cardName)); } -CardInfoPtr CardDatabase::guessCard(const QString &cardName) const +CardInfoPtr CardDatabase::guessCard(const QString &cardName, const QString &providerId) const { - CardInfoPtr temp = getCard(cardName); + CardInfoPtr temp = providerId.isEmpty() ? getCard(cardName) : getCardByNameAndProviderId(cardName, providerId); + if (temp == nullptr) { // get card by simple name instead temp = getCardBySimpleName(cardName); if (temp == nullptr) { // still could not find the card, so simplify the cardName too - QString simpleCardName = CardInfo::simplifyName(cardName); + const auto &simpleCardName = CardInfo::simplifyName(cardName); temp = getCardBySimpleName(simpleCardName); } } diff --git a/cockatrice/src/game/cards/card_database.h b/cockatrice/src/game/cards/card_database.h index 0c7f03246..0962bd350 100644 --- a/cockatrice/src/game/cards/card_database.h +++ b/cockatrice/src/game/cards/card_database.h @@ -466,7 +466,7 @@ public: [[nodiscard]] CardInfoPerSet getPreferredSetForCard(const QString &cardName) const; [[nodiscard]] CardInfoPerSet getSpecificSetForCard(const QString &cardName, const QString &providerId) const; QString getPreferredPrintingProviderIdForCard(const QString &cardName); - [[nodiscard]] CardInfoPtr guessCard(const QString &cardName) const; + [[nodiscard]] CardInfoPtr guessCard(const QString &cardName, const QString &providerId = QString()) const; /* * Get a card by its simple name. The name will be simplified in this diff --git a/cockatrice/src/server/chat_view/chat_view.cpp b/cockatrice/src/server/chat_view/chat_view.cpp index 7e1fd8df4..1a0e21b82 100644 --- a/cockatrice/src/server/chat_view/chat_view.cpp +++ b/cockatrice/src/server/chat_view/chat_view.cpp @@ -580,9 +580,9 @@ void ChatView::mousePressEvent(QMouseEvent *event) case HoveredCard: { if ((event->button() == Qt::MiddleButton) || (event->button() == Qt::LeftButton)) #if (QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)) - emit showCardInfoPopup(event->globalPosition().toPoint(), hoveredContent); + emit showCardInfoPopup(event->globalPosition().toPoint(), hoveredContent, QString()); #else - emit showCardInfoPopup(event->globalPos(), hoveredContent); + emit showCardInfoPopup(event->globalPos(), hoveredContent, QString()); #endif break; } diff --git a/cockatrice/src/server/chat_view/chat_view.h b/cockatrice/src/server/chat_view/chat_view.h index e99e1388a..c48ef4dfe 100644 --- a/cockatrice/src/server/chat_view/chat_view.h +++ b/cockatrice/src/server/chat_view/chat_view.h @@ -115,7 +115,7 @@ protected: signals: void openMessageDialog(const QString &userName, bool focus); void cardNameHovered(QString cardName); - void showCardInfoPopup(QPoint pos, QString cardName); + void showCardInfoPopup(const QPoint &pos, const QString &cardName, const QString &providerId); void deleteCardInfoPopup(QString cardName); void addMentionTag(QString mentionTag); void messageClickedSignal();