From 1d38548e199734d9d32ea80d15c4902c8f55a737 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Sun, 16 Mar 2025 11:00:23 +0100 Subject: [PATCH] Add buttons to clear and set all to preferred printing. --- cockatrice/src/deck/deck_loader.cpp | 49 +++++++++++++++++-- cockatrice/src/deck/deck_loader.h | 1 + .../src/dialogs/dlg_select_set_for_cards.cpp | 24 +++++++++ .../src/dialogs/dlg_select_set_for_cards.h | 4 ++ 4 files changed, 73 insertions(+), 5 deletions(-) diff --git a/cockatrice/src/deck/deck_loader.cpp b/cockatrice/src/deck/deck_loader.cpp index 697905d0e..396fb6fdc 100644 --- a/cockatrice/src/deck/deck_loader.cpp +++ b/cockatrice/src/deck/deck_loader.cpp @@ -235,7 +235,7 @@ struct FormatDeckListForExport QString &sideBoardCards; // create main operator for struct, allowing the foreachcard to work. FormatDeckListForExport(QString &_mainBoardCards, QString &_sideBoardCards) - : mainBoardCards(_mainBoardCards), sideBoardCards(_sideBoardCards){}; + : mainBoardCards(_mainBoardCards), sideBoardCards(_sideBoardCards) {}; void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const { @@ -299,6 +299,44 @@ QString DeckLoader::exportDeckToDecklist() return deckString; } +// This struct is here to support the forEachCard function call, defined in decklist. +// It requires a function to be called for each card, and it will set the providerId to the preferred printing. +struct SetProviderIdToPreferred +{ + // Main operator for struct, allowing the foreachcard to work. + SetProviderIdToPreferred() + { + } + + void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const + { + Q_UNUSED(node); + CardInfoPerSet preferredSet = CardDatabaseManager::getInstance()->getSpecificSetForCard( + card->getName(), + CardDatabaseManager::getInstance()->getPreferredPrintingProviderIdForCard(card->getName())); + QString providerId = preferredSet.getProperty("uuid"); + QString setShortName = preferredSet.getPtr()->getShortName(); + QString collectorNumber = preferredSet.getProperty("num"); + + card->setCardProviderId(providerId); + card->setCardCollectorNumber(collectorNumber); + card->setCardSetShortName(setShortName); + } +}; + +/** + * This function iterates through each card in the decklist and sets the providerId + * on each card based on its set name and collector number. + */ +void DeckLoader::setProviderIdToPreferredPrinting() +{ + // Set up the struct to call. + SetProviderIdToPreferred setProviderIdToPreferred; + + // Call the forEachCard method for each card in the deck + forEachCard(setProviderIdToPreferred); +} + // This struct is here to support the forEachCard function call, defined in decklist. // It requires a function to be called for each card, and it will set the providerId. struct SetProviderId @@ -337,10 +375,10 @@ void DeckLoader::resolveSetNameAndNumberToProviderID() // This struct is here to support the forEachCard function call, defined in decklist. // It requires a function to be called for each card, and it will set the providerId. -struct ClearSetNameAndNumber +struct ClearSetNameNumberAndProviderId { // Main operator for struct, allowing the foreachcard to work. - ClearSetNameAndNumber() + ClearSetNameNumberAndProviderId() { } @@ -350,6 +388,7 @@ struct ClearSetNameAndNumber // Set the providerId on the card card->setCardSetShortName(nullptr); card->setCardCollectorNumber(nullptr); + card->setCardProviderId(nullptr); } }; @@ -360,10 +399,10 @@ struct ClearSetNameAndNumber void DeckLoader::clearSetNamesAndNumbers() { // Set up the struct to call. - ClearSetNameAndNumber clearSetNameAndNumber; + ClearSetNameNumberAndProviderId clearSetNameNumberAndProviderId; // Call the forEachCard method for each card in the deck - forEachCard(clearSetNameAndNumber); + forEachCard(clearSetNameNumberAndProviderId); } DeckLoader::FileFormat DeckLoader::getFormatFromName(const QString &fileName) diff --git a/cockatrice/src/deck/deck_loader.h b/cockatrice/src/deck/deck_loader.h index 035830e0a..a45539da3 100644 --- a/cockatrice/src/deck/deck_loader.h +++ b/cockatrice/src/deck/deck_loader.h @@ -63,6 +63,7 @@ public: bool saveToFile(const QString &fileName, FileFormat fmt); bool updateLastLoadedTimestamp(const QString &fileName, FileFormat fmt); QString exportDeckToDecklist(); + void setProviderIdToPreferredPrinting(); void resolveSetNameAndNumberToProviderID(); diff --git a/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp b/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp index 6905b3ede..c478da7a6 100644 --- a/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp +++ b/cockatrice/src/dialogs/dlg_select_set_for_cards.cpp @@ -103,6 +103,15 @@ DlgSelectSetForCards::DlgSelectSetForCards(QWidget *parent, DeckListModel *_mode connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOK())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + clearButton = new QPushButton(buttonBox); + connect(clearButton, &QPushButton::clicked, this, &DlgSelectSetForCards::actClear); + + setAllToPreferredButton = new QPushButton(buttonBox); + connect(setAllToPreferredButton, &QPushButton::clicked, this, &DlgSelectSetForCards::actSetAllToPreferred); + + buttonBox->addButton(clearButton, QDialogButtonBox::ActionRole); + buttonBox->addButton(setAllToPreferredButton, QDialogButtonBox::ActionRole); + // Set stretch factors splitter->setStretchFactor(0, 6); // Scroll area gets more space splitter->setStretchFactor(1, 2); // Bottom part gets less space @@ -125,6 +134,8 @@ void DlgSelectSetForCards::retranslateUi() { instructionLabel->setText(tr("Check Sets to enable them. Drag-and-Drop to reorder them and change their " "priority. Cards will use the printing of the highest priority enabled set.")); + clearButton->setText(tr("Clear all set information")); + setAllToPreferredButton->setText(tr("Set all to preferred")); } void DlgSelectSetForCards::actOK() @@ -144,6 +155,19 @@ void DlgSelectSetForCards::actOK() accept(); } +void DlgSelectSetForCards::actClear() +{ + model->getDeckList()->clearSetNamesAndNumbers(); + accept(); +} + +void DlgSelectSetForCards::actSetAllToPreferred() +{ + model->getDeckList()->clearSetNamesAndNumbers(); + model->getDeckList()->setProviderIdToPreferredPrinting(); + accept(); +} + void DlgSelectSetForCards::sortSetsByCount() { QMap setsForCards = getSetsForCards(); diff --git a/cockatrice/src/dialogs/dlg_select_set_for_cards.h b/cockatrice/src/dialogs/dlg_select_set_for_cards.h index 32af90d06..c0a8896e6 100644 --- a/cockatrice/src/dialogs/dlg_select_set_for_cards.h +++ b/cockatrice/src/dialogs/dlg_select_set_for_cards.h @@ -34,6 +34,8 @@ signals: public slots: void actOK(); + void actClear(); + void actSetAllToPreferred(); void updateLayoutOrder(); void updateCardLists(); void dragEnterEvent(QDragEnterEvent *event) override; @@ -53,6 +55,8 @@ private: QListWidget *listWidget; DeckListModel *model; QMap setEntries; + QPushButton *clearButton; + QPushButton *setAllToPreferredButton; QMap getSetsForCards(); void updateCardAvailability();