From 4d1a88634e24e618c623713c2de37b6d0d273a88 Mon Sep 17 00:00:00 2001 From: kongwu666 <1447188457@qq.com> Date: Sat, 6 Jun 2026 01:26:00 +0800 Subject: [PATCH] [PrintingSelector] Replace std::tuple with ZoneCounts struct for readability (#6546) --- .../deck_editor/deck_state_manager.cpp | 9 ++-- .../all_zones_card_amount_widget.cpp | 6 +-- .../printing_selector/card_amount_widget.cpp | 45 ++++++++++++------- .../printing_selector/printing_selector.cpp | 10 ++--- .../printing_selector/printing_selector.h | 10 ++++- .../printing_selector_card_display_widget.cpp | 6 +-- .../printing_selector_card_display_widget.h | 3 +- 7 files changed, 54 insertions(+), 35 deletions(-) diff --git a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp index f86b45c25..f8fb450ce 100644 --- a/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp +++ b/cockatrice/src/interface/widgets/deck_editor/deck_state_manager.cpp @@ -255,10 +255,11 @@ bool DeckStateManager::swapCardAtIndex(const QModelIndex &idx) } QString zoneName = gparent.siblingAtColumn(DeckListModelColumns::CARD_NAME).data(Qt::EditRole).toString(); - QString otherZoneName = zoneName == DECK_ZONE_TOKENS - ? DECK_ZONE_TOKENS - : (zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN); - // if card is Token,it should be swap to DECK_ZONE_TOKENS,not DECK_ZONE_MAIN or DECK_ZONE_SIDE. + // tokens have no swap target + if (zoneName == DECK_ZONE_TOKENS) { + return false; + } + QString otherZoneName = zoneName == DECK_ZONE_MAIN ? DECK_ZONE_SIDE : DECK_ZONE_MAIN; QString reason = tr("Moved to %1 1 × \"%2\" (%3)") // .arg(otherZoneName) diff --git a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp index a632186ec..05e269174 100644 --- a/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/all_zones_card_amount_widget.cpp @@ -31,15 +31,15 @@ AllZonesCardAmountWidget::AllZonesCardAmountWidget(QWidget *parent, buttonBoxMainboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_MAIN); zoneLabelSideboard = new ShadowBackgroundLabel(this, tr("Sideboard")); buttonBoxSideboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_SIDE); - zoneLabelTokensboard = new ShadowBackgroundLabel(this, tr("Tokensboard")); + zoneLabelTokensboard = new ShadowBackgroundLabel(this, tr("Tokens")); buttonBoxTokensboard = new CardAmountWidget(this, deckStateManager, cardSizeSlider, rootCard, DECK_ZONE_TOKENS); layout->addWidget(zoneLabelMainboard, 0, Qt::AlignHCenter | Qt::AlignBottom); layout->addWidget(buttonBoxMainboard, 0, Qt::AlignHCenter | Qt::AlignTop); - layout->addSpacing(12.5); + layout->addSpacing(12); layout->addWidget(zoneLabelTokensboard, 0, Qt::AlignHCenter | Qt::AlignBottom); layout->addWidget(buttonBoxTokensboard, 0, Qt::AlignHCenter | Qt::AlignTop); - layout->addSpacing(12.5); + layout->addSpacing(13); layout->addWidget(zoneLabelSideboard, 0, Qt::AlignHCenter | Qt::AlignBottom); layout->addWidget(buttonBoxSideboard, 0, Qt::AlignHCenter | Qt::AlignTop); diff --git a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp index a23e8645c..ff47e7b9c 100644 --- a/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/card_amount_widget.cpp @@ -140,6 +140,19 @@ void CardAmountWidget::updateCardCount() layout->activate(); } +static QString zoneLogName(const QString &zone) +{ + if (zone == DECK_ZONE_MAIN) { + return "mainboard"; + } else if (zone == DECK_ZONE_SIDE) { + return "sideboard"; + } else if (zone == DECK_ZONE_TOKENS) { + return "tokens"; + } else { + return "unknown"; + } +} + static QModelIndex addAndReplacePrintings(DeckListModel *model, const QModelIndex &existing, const ExactCard &rootCard, @@ -186,15 +199,15 @@ void CardAmountWidget::addPrinting(const QString &zone) } } - QString reason = - QString("Added %1 copies of '%2 (%3) %4' to %5 [ProviderID: %6]%7") - .arg(1 + extraCopies) - .arg(rootCard.getName()) - .arg(rootCard.getPrinting().getSet()->getShortName()) - .arg(rootCard.getPrinting().getProperty("num")) - .arg(zone == DECK_ZONE_MAIN ? "mainboard" : (zone == DECK_ZONE_SIDE ? "sideboard" : "tokensboard")) - .arg(rootCard.getPrinting().getUuid()) - .arg(replacingProviderless ? " (replaced providerless printings)" : ""); + QString zoneName = zoneLogName(zone); + QString reason = QString("Added %1 copies of '%2 (%3) %4' to %5 [ProviderID: %6]%7") + .arg(1 + extraCopies) + .arg(rootCard.getName()) + .arg(rootCard.getPrinting().getSet()->getShortName()) + .arg(rootCard.getPrinting().getProperty("num")) + .arg(zoneName) + .arg(rootCard.getPrinting().getUuid()) + .arg(replacingProviderless ? " (replaced providerless printings)" : ""); // Add the card and expand the list UI QModelIndex newCardIndex = deckStateManager->modifyDeck(reason, [&](auto model) { @@ -261,13 +274,13 @@ void CardAmountWidget::removePrintingTokensboard() */ void CardAmountWidget::decrementCardHelper(const QString &zone) { - QString reason = - QString("Removed 1 copy of '%1 (%2) %3' from %4 [ProviderID: %5]") - .arg(rootCard.getName()) - .arg(rootCard.getPrinting().getSet()->getShortName()) - .arg(rootCard.getPrinting().getProperty("num")) - .arg(zone == DECK_ZONE_MAIN ? "mainboard" : (zone == DECK_ZONE_SIDE ? "sideboard" : "tokensboard")) - .arg(rootCard.getPrinting().getUuid()); + QString zoneName = zoneLogName(zone); + QString reason = QString("Removed 1 copy of '%1 (%2) %3' from %4 [ProviderID: %5]") + .arg(rootCard.getName()) + .arg(rootCard.getPrinting().getSet()->getShortName()) + .arg(rootCard.getPrinting().getProperty("num")) + .arg(zoneName) + .arg(rootCard.getPrinting().getUuid()); deckStateManager->modifyDeck(reason, [this, &zone](auto model) { QModelIndex idx = model->findCard(rootCard.getName(), zone, rootCard.getPrinting().getUuid(), diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp index 3aca07121..76a416587 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector.cpp @@ -107,28 +107,28 @@ void PrintingSelector::printingsInDeckChanged() /** * @return A map of uuid to amounts (main, side, tokens). */ -static QMap> tallyUuidCounts(const DeckListModel *model, const QString &cardName) +static QMap tallyUuidCounts(const DeckListModel *model, const QString &cardName) { - QMap> map; + QMap map; auto mainNodes = model->getCardNodesForZone(DECK_ZONE_MAIN); for (auto &node : mainNodes) { if (node->getName() == cardName) { - std::get<0>(map[node->getCardProviderId()]) += node->getNumber(); + map[node->getCardProviderId()].mainboard += node->getNumber(); } } auto sideNodes = model->getCardNodesForZone(DECK_ZONE_SIDE); for (auto &node : sideNodes) { if (node->getName() == cardName) { - std::get<1>(map[node->getCardProviderId()]) += node->getNumber(); + map[node->getCardProviderId()].sideboard += node->getNumber(); } } auto tokensNodes = model->getCardNodesForZone(DECK_ZONE_TOKENS); for (auto &node : tokensNodes) { if (node->getName() == cardName) { - std::get<2>(map[node->getCardProviderId()]) += node->getNumber(); + map[node->getCardProviderId()].tokensboard += node->getNumber(); } } diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h index b4150ff3d..14d73f836 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h @@ -19,10 +19,16 @@ #include #include #include -#include #define BATCH_SIZE 10 +struct ZoneCounts +{ + int mainboard = 0; + int sideboard = 0; + int tokensboard = 0; +}; + class DeckStateManager; class PrintingSelectorCardSearchWidget; class PrintingSelectorCardSelectionWidget; @@ -62,7 +68,7 @@ signals: * The amounts of the printings in the deck has changed * @param uuidToAmounts Map of uuids to the amounts (maindeck, sideboard, tokensboard) in the deck */ - void cardAmountsChanged(const QMap> &uuidToAmounts); + void cardAmountsChanged(const QMap &uuidToAmounts); private: QVBoxLayout *layout; diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp index c08801c3a..edeba86d1 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.cpp @@ -67,10 +67,10 @@ void PrintingSelectorCardDisplayWidget::clampSetNameToPicture() update(); } -void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap> &uuidToAmounts) +void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap &uuidToAmounts) { - auto [main, side, tokens] = uuidToAmounts.value(rootCard.getPrinting().getUuid()); - overlayWidget->updateCardAmounts(main, side, tokens); + auto counts = uuidToAmounts.value(rootCard.getPrinting().getUuid()); + overlayWidget->updateCardAmounts(counts.mainboard, counts.sideboard, counts.tokensboard); } void PrintingSelectorCardDisplayWidget::resizeEvent(QResizeEvent *event) diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h index 235919b53..4de561f4f 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_display_widget.h @@ -13,7 +13,6 @@ #include #include -#include class PrintingSelectorCardDisplayWidget : public QWidget { @@ -28,7 +27,7 @@ public: public slots: void clampSetNameToPicture(); - void updateCardAmounts(const QMap> &uuidToAmounts); + void updateCardAmounts(const QMap &uuidToAmounts); void resizeEvent(QResizeEvent *event) override;