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; }