From a799cd097af44651279e8ce80420c3c4a92f9e6f Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Wed, 3 Dec 2025 08:23:34 +0100 Subject: [PATCH] [PrintingSelector] Sync modified and history state on bulk selection (#6379) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [PrintingSelector] Emit deckModified when using bulk selection * [PrintingSelector] Hook up history manager. * [PrintingSelector] Remember card amount. * Return early. Took 18 minutes --------- Co-authored-by: Lukas BrĂ¼bach --- .../dialogs/dlg_select_set_for_cards.cpp | 20 ++++++++++++++++++- .../dialogs/dlg_select_set_for_cards.h | 2 ++ .../printing_selector/printing_selector.h | 5 +++++ ...rinting_selector_card_selection_widget.cpp | 5 +++++ 4 files changed, 31 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp index 893c84512..905ac5db0 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp +++ b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.cpp @@ -145,31 +145,49 @@ void DlgSelectSetForCards::retranslateUi() void DlgSelectSetForCards::actOK() { QMap modifiedSetsAndCardsMap = getModifiedCards(); + + if (modifiedSetsAndCardsMap.isEmpty()) { + accept(); // Nothing to do + } else { + emit deckAboutToBeModified(tr("Bulk modified printings.")); + } + for (QString modifiedSet : modifiedSetsAndCardsMap.keys()) { for (QString card : modifiedSetsAndCardsMap.value(modifiedSet)) { QModelIndex find_card = model->findCard(card, DECK_ZONE_MAIN); if (!find_card.isValid()) { continue; } + int amount = + model->data(find_card.siblingAtColumn(DeckListModelColumns::CARD_AMOUNT), Qt::DisplayRole).toInt(); model->removeRow(find_card.row(), find_card.parent()); CardInfoPtr cardInfo = CardDatabaseManager::query()->getCardInfo(card); PrintingInfo printing = CardDatabaseManager::query()->getSpecificPrinting(card, modifiedSet, ""); - model->addCard(ExactCard(cardInfo, printing), DECK_ZONE_MAIN); + for (int i = 0; i < amount; i++) { + model->addCard(ExactCard(cardInfo, printing), DECK_ZONE_MAIN); + } } } + if (!modifiedSetsAndCardsMap.isEmpty()) { + emit deckModified(); + } accept(); } void DlgSelectSetForCards::actClear() { + emit deckAboutToBeModified(tr("Cleared all printing information.")); DeckLoader::clearSetNamesAndNumbers(model->getDeckList()); + emit deckModified(); accept(); } void DlgSelectSetForCards::actSetAllToPreferred() { + emit deckAboutToBeModified(tr("Set all printings to preferred.")); DeckLoader::clearSetNamesAndNumbers(model->getDeckList()); DeckLoader::setProviderIdToPreferredPrinting(model->getDeckList()); + emit deckModified(); accept(); } diff --git a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h index 335b86d2c..5cdef5a30 100644 --- a/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h +++ b/cockatrice/src/interface/widgets/dialogs/dlg_select_set_for_cards.h @@ -37,6 +37,8 @@ public: signals: void widgetOrderChanged(); void orderChanged(); + void deckAboutToBeModified(const QString &reason); + void deckModified(); public slots: void actOK(); diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h index 7130e436c..fbe3b5b06 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector.h +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector.h @@ -40,6 +40,11 @@ public: return deckModel; } + [[nodiscard]] AbstractTabDeckEditor *getDeckEditor() const + { + return deckEditor; + } + public slots: void retranslateUi(); void updateDisplay(); diff --git a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp index 57d5fd895..fc17cecd0 100644 --- a/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp +++ b/cockatrice/src/interface/widgets/printing_selector/printing_selector_card_selection_widget.cpp @@ -1,6 +1,7 @@ #include "printing_selector_card_selection_widget.h" #include "../../../interface/widgets/dialogs/dlg_select_set_for_cards.h" +#include "../tabs/abstract_tab_deck_editor.h" /** * @brief Constructs a PrintingSelectorCardSelectionWidget for navigating through cards in the deck. @@ -48,6 +49,10 @@ void PrintingSelectorCardSelectionWidget::connectSignals() void PrintingSelectorCardSelectionWidget::selectSetForCards() { auto *setSelectionDialog = new DlgSelectSetForCards(nullptr, parent->getDeckModel()); + connect(setSelectionDialog, &DlgSelectSetForCards::deckAboutToBeModified, parent->getDeckEditor(), + &AbstractTabDeckEditor::onDeckHistorySaveRequested); + connect(setSelectionDialog, &DlgSelectSetForCards::deckModified, parent->getDeckEditor(), + &AbstractTabDeckEditor::onDeckModified); if (!setSelectionDialog->exec()) { return; }