[PrintingSelector] Replace std::tuple with ZoneCounts struct for readability (#6546)

This commit is contained in:
kongwu666 2026-06-06 01:26:00 +08:00
parent f9403a3742
commit 4d1a88634e
7 changed files with 54 additions and 35 deletions

View file

@ -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)

View file

@ -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);

View file

@ -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(),

View file

@ -107,28 +107,28 @@ void PrintingSelector::printingsInDeckChanged()
/**
* @return A map of uuid to amounts (main, side, tokens).
*/
static QMap<QString, std::tuple<int, int, int>> tallyUuidCounts(const DeckListModel *model, const QString &cardName)
static QMap<QString, ZoneCounts> tallyUuidCounts(const DeckListModel *model, const QString &cardName)
{
QMap<QString, std::tuple<int, int, int>> map;
QMap<QString, ZoneCounts> 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();
}
}

View file

@ -19,10 +19,16 @@
#include <QWidget>
#include <libcockatrice/card/card_info.h>
#include <libcockatrice/models/deck_list/deck_list_model.h>
#include <tuple>
#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<QString, std::tuple<int, int, int>> &uuidToAmounts);
void cardAmountsChanged(const QMap<QString, ZoneCounts> &uuidToAmounts);
private:
QVBoxLayout *layout;

View file

@ -67,10 +67,10 @@ void PrintingSelectorCardDisplayWidget::clampSetNameToPicture()
update();
}
void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap<QString, std::tuple<int, int, int>> &uuidToAmounts)
void PrintingSelectorCardDisplayWidget::updateCardAmounts(const QMap<QString, ZoneCounts> &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)

View file

@ -13,7 +13,6 @@
#include <QWidget>
#include <libcockatrice/models/deck_list/deck_list_model.h>
#include <tuple>
class PrintingSelectorCardDisplayWidget : public QWidget
{
@ -28,7 +27,7 @@ public:
public slots:
void clampSetNameToPicture();
void updateCardAmounts(const QMap<QString, std::tuple<int, int, int>> &uuidToAmounts);
void updateCardAmounts(const QMap<QString, ZoneCounts> &uuidToAmounts);
void resizeEvent(QResizeEvent *event) override;