[TabDeckEditor] Refactor: pass ExactCard in signal instead of widget (#6962)

* [TabDeckEditor] Refactor: pass ExactCard in signal instead of widget

* address comments
This commit is contained in:
RickyRister 2026-06-02 21:22:06 -07:00 committed by GitHub
parent f52dc6dda8
commit e0cbb7f06c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 41 additions and 69 deletions

View file

@ -58,16 +58,6 @@ void CardGroupDisplayWidget::mousePressEvent(QMouseEvent *event)
} }
} }
void CardGroupDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card)
{
emit cardClicked(event, card);
}
void CardGroupDisplayWidget::onHover(const ExactCard &card)
{
emit cardHovered(card);
}
void CardGroupDisplayWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected) void CardGroupDisplayWidget::onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{ {
auto proxyModel = qobject_cast<QAbstractProxyModel *>(selectionModel->model()); auto proxyModel = qobject_cast<QAbstractProxyModel *>(selectionModel->model());
@ -154,8 +144,8 @@ QWidget *CardGroupDisplayWidget::constructWidgetForIndex(QPersistentModelIndex i
widget->setScaleFactor(cardSizeWidget->getSlider()->value()); widget->setScaleFactor(cardSizeWidget->getSlider()->value());
widget->setCard(CardDatabaseManager::query()->getCard({cardName, cardProviderId})); widget->setCard(CardDatabaseManager::query()->getCard({cardName, cardProviderId}));
connect(widget, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &CardGroupDisplayWidget::onClick); connect(widget, &CardInfoPictureWithTextOverlayWidget::cardClicked, this, &CardGroupDisplayWidget::cardClicked);
connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::onHover); connect(widget, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &CardGroupDisplayWidget::cardHovered);
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor); connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, widget, &CardInfoPictureWidget::setScaleFactor);
indexToWidgetMap[index].append(widget); indexToWidgetMap[index].append(widget);

View file

@ -48,8 +48,6 @@ public:
public slots: public slots:
void mousePressEvent(QMouseEvent *event) override; void mousePressEvent(QMouseEvent *event) override;
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card);
void onHover(const ExactCard &card);
virtual QWidget *constructWidgetForIndex(QPersistentModelIndex index); virtual QWidget *constructWidgetForIndex(QPersistentModelIndex index);
virtual void updateCardDisplays(); virtual void updateCardDisplays();
virtual void onCardAddition(const QModelIndex &parent, int first, int last); virtual void onCardAddition(const QModelIndex &parent, int first, int last);
@ -59,7 +57,7 @@ public slots:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
signals: signals:
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card); void cardClicked(QMouseEvent *event, const ExactCard &card);
void cardHovered(const ExactCard &card); void cardHovered(const ExactCard &card);
void cleanupRequested(CardGroupDisplayWidget *cardGroupDisplayWidget); void cleanupRequested(CardGroupDisplayWidget *cardGroupDisplayWidget);

View file

@ -345,7 +345,7 @@ void CardInfoPictureWidget::mousePressEvent(QMouseEvent *event)
createRightClickMenu()->popup(QCursor::pos()); createRightClickMenu()->popup(QCursor::pos());
} }
emit cardClicked(event); emit cardClicked(event, exactCard);
} }
void CardInfoPictureWidget::hideEvent(QHideEvent *event) void CardInfoPictureWidget::hideEvent(QHideEvent *event)

View file

@ -43,7 +43,7 @@ signals:
void hoveredOnCard(const ExactCard &hoveredCard); void hoveredOnCard(const ExactCard &hoveredCard);
void cardScaleFactorChanged(int _scale); void cardScaleFactorChanged(int _scale);
void cardChanged(const ExactCard &card); void cardChanged(const ExactCard &card);
void cardClicked(QMouseEvent *event); void cardClicked(QMouseEvent *event, const ExactCard &card);
protected: protected:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;

View file

@ -93,7 +93,7 @@ void CardInfoPictureWithTextOverlayWidget::setHighlighted(bool _highlighted)
void CardInfoPictureWithTextOverlayWidget::mousePressEvent(QMouseEvent *event) void CardInfoPictureWithTextOverlayWidget::mousePressEvent(QMouseEvent *event)
{ {
emit imageClicked(event, this); emit cardClicked(event, getCard());
} }
/** /**

View file

@ -35,8 +35,6 @@ public:
void setHighlighted(bool _highlighted); void setHighlighted(bool _highlighted);
[[nodiscard]] QSize sizeHint() const override; [[nodiscard]] QSize sizeHint() const override;
signals:
void imageClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
protected: protected:
void paintEvent(QPaintEvent *event) override; void paintEvent(QPaintEvent *event) override;

View file

@ -51,7 +51,7 @@ DeckCardZoneDisplayWidget::DeckCardZoneDisplayWidget(QWidget *parent,
// User Interaction // User Interaction
// ===================================================================================================================== // =====================================================================================================================
void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card) void DeckCardZoneDisplayWidget::onClick(QMouseEvent *event, const ExactCard &card)
{ {
emit cardClicked(event, card, zoneName); emit cardClicked(event, card, zoneName);
} }

View file

@ -42,7 +42,7 @@ public:
void addCardsToOverlapWidget(); void addCardsToOverlapWidget();
public slots: public slots:
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card); void onClick(QMouseEvent *event, const ExactCard &card);
void onHover(const ExactCard &card); void onHover(const ExactCard &card);
void cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget); void cleanupInvalidCardGroup(CardGroupDisplayWidget *displayWidget);
void constructAppropriateWidget(QPersistentModelIndex index); void constructAppropriateWidget(QPersistentModelIndex index);
@ -55,7 +55,7 @@ public slots:
void onCategoryRemoval(const QModelIndex &parent, int first, int last); void onCategoryRemoval(const QModelIndex &parent, int first, int last);
signals: signals:
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *card, QString zoneName); void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
void cardHovered(const ExactCard &card); void cardHovered(const ExactCard &card);
void activeSortCriteriaChanged(QStringList activeSortCriteria); void activeSortCriteriaChanged(QStringList activeSortCriteria);
void requestCleanup(DeckCardZoneDisplayWidget *displayWidget); void requestCleanup(DeckCardZoneDisplayWidget *displayWidget);

View file

@ -74,7 +74,7 @@ void TabDeckEditorVisual::createCentralFrame()
connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClicked, this, connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClicked, this,
&TabDeckEditorVisual::processMainboardCardClick); &TabDeckEditorVisual::processMainboardCardClick);
connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClickedDatabaseDisplay, this, connect(tabContainer, &TabDeckEditorVisualTabWidget::cardClickedDatabaseDisplay, this,
&TabDeckEditorVisual::processCardClickDatabaseDisplay); &TabDeckEditorVisual::processDatabaseCardClick);
centralFrame->addWidget(tabContainer); centralFrame->addWidget(tabContainer);
setCentralWidget(centralWidget); setCentralWidget(centralWidget);
@ -143,12 +143,10 @@ void TabDeckEditorVisual::changeModelIndexToCard(const ExactCard &activeCard)
} }
} }
void TabDeckEditorVisual::processMainboardCardClick(QMouseEvent *event, void TabDeckEditorVisual::processMainboardCardClick(const QMouseEvent *event,
CardInfoPictureWithTextOverlayWidget *instance, const ExactCard &card,
const QString &zoneName) const QString &zoneName)
{ {
auto card = instance->getCard();
// Get the model index for the card // Get the model index for the card
QModelIndex idx = deckStateManager->getModel()->findCard(card.getName(), zoneName); QModelIndex idx = deckStateManager->getModel()->findCard(card.getName(), zoneName);
if (!idx.isValid()) { if (!idx.isValid()) {
@ -211,17 +209,16 @@ void TabDeckEditorVisual::processMainboardCardClick(QMouseEvent *event,
} }
/** @brief Handles clicks on cards in the database display. */ /** @brief Handles clicks on cards in the database display. */
void TabDeckEditorVisual::processCardClickDatabaseDisplay(QMouseEvent *event, void TabDeckEditorVisual::processDatabaseCardClick(const QMouseEvent *event, const ExactCard &card)
CardInfoPictureWithTextOverlayWidget *instance)
{ {
if (event->button() == Qt::LeftButton) { if (event->button() == Qt::LeftButton) {
if (QApplication::keyboardModifiers() & Qt::ControlModifier) { if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
addCard(instance->getCard(), DECK_ZONE_SIDE); addCard(card, DECK_ZONE_SIDE);
} else { } else {
addCard(instance->getCard(), DECK_ZONE_MAIN); addCard(card, DECK_ZONE_MAIN);
} }
} else if (event->button() == Qt::RightButton) { } else if (event->button() == Qt::RightButton) {
decrementCard(instance->getCard(), DECK_ZONE_MAIN); decrementCard(card, DECK_ZONE_MAIN);
} else if (event->button() == Qt::MiddleButton) { } else if (event->button() == Qt::MiddleButton) {
deckDockWidget->actRemoveCard(); deckDockWidget->actRemoveCard();
} }

View file

@ -41,7 +41,7 @@
* - changeModelIndexAndCardInfo(const ExactCard &card) Updates deck model selection and card info. * - changeModelIndexAndCardInfo(const ExactCard &card) Updates deck model selection and card info.
* - changeModelIndexToCard(const ExactCard &card) Selects the card in the deck view. * - changeModelIndexToCard(const ExactCard &card) Selects the card in the deck view.
* - processMainboardCardClick(QMouseEvent *event, ...) Handles clicks on mainboard cards. * - processMainboardCardClick(QMouseEvent *event, ...) Handles clicks on mainboard cards.
* - processCardClickDatabaseDisplay(QMouseEvent *event, ...) Handles clicks on database cards. * - processDatabaseCardClick(QMouseEvent *event, ...) Handles clicks on database cards.
* - actSaveDeckAs() Overrides save action with temporary UI adjustments. * - actSaveDeckAs() Overrides save action with temporary UI adjustments.
* - showPrintingSelector() Opens the printing selector dock for the current card. * - showPrintingSelector() Opens the printing selector dock for the current card.
* - freeDocksSize() Frees constraints on dock widget sizes. * - freeDocksSize() Frees constraints on dock widget sizes.
@ -152,19 +152,17 @@ public slots:
/** /**
* @brief Handle card clicks in the mainboard visual deck. * @brief Handle card clicks in the mainboard visual deck.
* @param event Mouse event triggering the action. * @param event Mouse event triggering the action.
* @param instance Widget representing the clicked card. * @param card The clicked card.
* @param zoneName Deck zone of the card. * @param zoneName Deck zone of the card.
*/ */
void processMainboardCardClick(QMouseEvent *event, void processMainboardCardClick(const QMouseEvent *event, const ExactCard &card, const QString &zoneName);
CardInfoPictureWithTextOverlayWidget *instance,
const QString &zoneName);
/** /**
* @brief Handle card clicks in the database visual display. * @brief Handle card clicks in the database visual display.
* @param event Mouse event triggering the action. * @param event Mouse event triggering the action.
* @param instance Widget representing the clicked card. * @param card The clicked card.
*/ */
void processCardClickDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void processDatabaseCardClick(const QMouseEvent *event, const ExactCard &card);
/** /**
* @brief Save the deck under a new name. * @brief Save the deck under a new name.

View file

@ -82,25 +82,24 @@ void TabDeckEditorVisualTabWidget::onCardChangedDatabaseDisplay(const ExactCard
/** /**
* @brief Emits the cardClicked signal when a card is clicked in the visual deck view. * @brief Emits the cardClicked signal when a card is clicked in the visual deck view.
* @param event The mouse event. * @param event The mouse event.
* @param instance The widget instance of the clicked card. * @param card The clicked card.
* @param zoneName The zone of the deck where the card is located. * @param zoneName The zone of the deck where the card is located.
*/ */
void TabDeckEditorVisualTabWidget::onCardClickedDeckEditor(QMouseEvent *event, void TabDeckEditorVisualTabWidget::onCardClickedDeckEditor(QMouseEvent *event,
CardInfoPictureWithTextOverlayWidget *instance, const ExactCard &card,
QString zoneName) const QString &zoneName)
{ {
emit cardClicked(event, instance, zoneName); emit cardClicked(event, card, zoneName);
} }
/** /**
* @brief Emits the cardClickedDatabaseDisplay signal when a card is clicked in the database display. * @brief Emits the cardClickedDatabaseDisplay signal when a card is clicked in the database display.
* @param event The mouse event. * @param event The mouse event.
* @param instance The widget instance of the clicked card. * @param card The clicked card.
*/ */
void TabDeckEditorVisualTabWidget::onCardClickedDatabaseDisplay(QMouseEvent *event, void TabDeckEditorVisualTabWidget::onCardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card)
CardInfoPictureWithTextOverlayWidget *instance)
{ {
emit cardClickedDatabaseDisplay(event, instance); emit cardClickedDatabaseDisplay(event, card);
} }
/** /**

View file

@ -101,23 +101,23 @@ public slots:
/** /**
* @brief Emitted when a card is clicked in the deck view. * @brief Emitted when a card is clicked in the deck view.
* @param event Mouse event. * @param event Mouse event.
* @param instance Widget representing the clicked card. * @param card The clicked card.
* @param zoneName Deck zone of the card. * @param zoneName Deck zone of the card.
*/ */
void onCardClickedDeckEditor(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName); void onCardClickedDeckEditor(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
/** /**
* @brief Emitted when a card is clicked in the database display. * @brief Emitted when a card is clicked in the database display.
* @param event Mouse event. * @param event Mouse event.
* @param instance Widget representing the clicked card. * @param card The clicked card.
*/ */
void onCardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void onCardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
signals: signals:
void cardChanged(const ExactCard &activeCard); void cardChanged(const ExactCard &activeCard);
void cardChangedDatabaseDisplay(const ExactCard &activeCard); void cardChangedDatabaseDisplay(const ExactCard &activeCard);
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName); void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
void cardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void cardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
private: private:
QVBoxLayout *layout; ///< Layout for tabs and controls. QVBoxLayout *layout; ///< Layout for tabs and controls.

View file

@ -214,9 +214,9 @@ void VisualDatabaseDisplayWidget::onDisplayModeChanged(bool checked)
} }
} }
void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance) void VisualDatabaseDisplayWidget::onClick(QMouseEvent *event, const ExactCard &card)
{ {
emit cardClickedDatabaseDisplay(event, instance); emit cardClickedDatabaseDisplay(event, card);
} }
void VisualDatabaseDisplayWidget::onHover(const ExactCard &hoveredCard) void VisualDatabaseDisplayWidget::onHover(const ExactCard &hoveredCard)
@ -231,7 +231,7 @@ void VisualDatabaseDisplayWidget::addCard(const ExactCard &cardToAdd)
display->setScaleFactor(cardSizeWidget->getSlider()->value()); display->setScaleFactor(cardSizeWidget->getSlider()->value());
display->setCard(cardToAdd); display->setCard(cardToAdd);
flowWidget->addWidget(display); flowWidget->addWidget(display);
connect(display, &CardInfoPictureWithTextOverlayWidget::imageClicked, this, &VisualDatabaseDisplayWidget::onClick); connect(display, &CardInfoPictureWithTextOverlayWidget::cardClicked, this, &VisualDatabaseDisplayWidget::onClick);
connect(display, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &VisualDatabaseDisplayWidget::onHover); connect(display, &CardInfoPictureWithTextOverlayWidget::hoveredOnCard, this, &VisualDatabaseDisplayWidget::onHover);
connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor); connect(cardSizeWidget->getSlider(), &QSlider::valueChanged, display, &CardInfoPictureWidget::setScaleFactor);
} }

View file

@ -76,12 +76,12 @@ public slots:
void onSearchModelChanged(); void onSearchModelChanged();
signals: signals:
void cardClickedDatabaseDisplay(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void cardClickedDatabaseDisplay(QMouseEvent *event, const ExactCard &card);
void cardHoveredDatabaseDisplay(const ExactCard &hoveredCard); void cardHoveredDatabaseDisplay(const ExactCard &hoveredCard);
protected slots: protected slots:
void initialize(); void initialize();
void onClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance); void onClick(QMouseEvent *event, const ExactCard &card);
void onHover(const ExactCard &hoveredCard); void onHover(const ExactCard &hoveredCard);
void addCard(const ExactCard &cardToAdd); void addCard(const ExactCard &cardToAdd);
void databaseDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); void databaseDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);

View file

@ -281,7 +281,7 @@ void VisualDeckEditorWidget::constructZoneWidgetForIndex(QPersistentModelIndex p
displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(), displayOptionsWidget->getActiveGroupCriteria(), displayOptionsWidget->getActiveSortCriteria(),
displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget); displayOptionsWidget->getDisplayType(), 20, 10, cardSizeWidget);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardHovered, this, &VisualDeckEditorWidget::onHover);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::onCardClick); connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::cardClicked, this, &VisualDeckEditorWidget::cardClicked);
connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this, connect(zoneDisplayWidget, &DeckCardZoneDisplayWidget::requestCleanup, this,
&VisualDeckEditorWidget::cleanupInvalidZones); &VisualDeckEditorWidget::cleanupInvalidZones);
connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget, connect(this, &VisualDeckEditorWidget::activeSortCriteriaChanged, zoneDisplayWidget,
@ -401,13 +401,6 @@ void VisualDeckEditorWidget::decklistDataChanged(QModelIndex topLeft, QModelInde
// User Interaction // User Interaction
// ===================================================================================================================== // =====================================================================================================================
void VisualDeckEditorWidget::onCardClick(QMouseEvent *event,
CardInfoPictureWithTextOverlayWidget *instance,
QString zoneName)
{
emit cardClicked(event, instance, zoneName);
}
void VisualDeckEditorWidget::onHover(const ExactCard &hoveredCard) void VisualDeckEditorWidget::onHover(const ExactCard &hoveredCard)
{ {
// If user has any card selected, ignore hover // If user has any card selected, ignore hover

View file

@ -69,7 +69,7 @@ signals:
void activeCardChanged(const ExactCard &activeCard); void activeCardChanged(const ExactCard &activeCard);
void activeGroupCriteriaChanged(QString activeGroupCriteria); void activeGroupCriteriaChanged(QString activeGroupCriteria);
void activeSortCriteriaChanged(QStringList activeSortCriteria); void activeSortCriteriaChanged(QStringList activeSortCriteria);
void cardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName); void cardClicked(QMouseEvent *event, const ExactCard &card, const QString &zoneName);
void cardAdditionRequested(const ExactCard &card); void cardAdditionRequested(const ExactCard &card);
void displayTypeChanged(DisplayType displayType); void displayTypeChanged(DisplayType displayType);
@ -82,7 +82,6 @@ protected:
protected slots: protected slots:
void onHover(const ExactCard &hoveredCard); void onHover(const ExactCard &hoveredCard);
void onCardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance, QString zoneName);
void decklistModelReset(); void decklistModelReset();
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;