From eae9171de945439bc06ffd70a48e553b98e36914 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 | 57 +++++++++++++++++++ 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, 86 insertions(+) diff --git a/cockatrice/src/deck/deck_loader.cpp b/cockatrice/src/deck/deck_loader.cpp index d0c0f5239..9d58db7e4 100644 --- a/cockatrice/src/deck/deck_loader.cpp +++ b/cockatrice/src/deck/deck_loader.cpp @@ -312,6 +312,44 @@ QString DeckLoader::exportDeckToDecklist(DecklistWebsite website) 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); +} + /** * Sets the providerId on each card in the decklist based on its set name and collector number. */ @@ -332,6 +370,25 @@ void DeckLoader::resolveSetNameAndNumberToProviderID() forEachCard(setProviderId); } +// 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 ClearSetNameNumberAndProviderId +{ + // Main operator for struct, allowing the foreachcard to work. + ClearSetNameNumberAndProviderId() + { + } + + void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const + { + Q_UNUSED(node); + // Set the providerId on the card + card->setCardSetShortName(nullptr); + card->setCardCollectorNumber(nullptr); + card->setCardProviderId(nullptr); + } +}; + /** * Clears the set name and numbers on each card in the decklist. */ diff --git a/cockatrice/src/deck/deck_loader.h b/cockatrice/src/deck/deck_loader.h index 53dd1f711..cf83f24fb 100644 --- a/cockatrice/src/deck/deck_loader.h +++ b/cockatrice/src/deck/deck_loader.h @@ -78,6 +78,7 @@ public: bool saveToFile(const QString &fileName, FileFormat fmt); bool updateLastLoadedTimestamp(const QString &fileName, FileFormat fmt); QString exportDeckToDecklist(DecklistWebsite website); + 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();