From bdc67aeb1a7d1a3a07fb6c18399c39ea009137f2 Mon Sep 17 00:00:00 2001 From: RickyRister Date: Sun, 16 Mar 2025 00:24:55 -0700 Subject: [PATCH] Fix edit deck in clipboard clearing values --- .../dialogs/dlg_load_deck_from_clipboard.cpp | 2 +- common/decklist.cpp | 28 ++++++++++++++----- common/decklist.h | 4 +-- 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/cockatrice/src/dialogs/dlg_load_deck_from_clipboard.cpp b/cockatrice/src/dialogs/dlg_load_deck_from_clipboard.cpp index 6cecc10bf..26f92f4e9 100644 --- a/cockatrice/src/dialogs/dlg_load_deck_from_clipboard.cpp +++ b/cockatrice/src/dialogs/dlg_load_deck_from_clipboard.cpp @@ -80,7 +80,7 @@ bool AbstractDlgDeckTextEdit::loadIntoDeck(DeckLoader *deckLoader) const QTextStream stream(&buffer); - if (deckLoader->loadFromStream_Plain(stream)) { + if (deckLoader->loadFromStream_Plain(stream, true)) { if (loadSetNameAndNumberCheckBox->isChecked()) { deckLoader->resolveSetNameAndNumberToProviderID(); } else { diff --git a/common/decklist.cpp b/common/decklist.cpp index cf1240d8a..789f57910 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -548,7 +548,14 @@ bool DeckList::saveToFile_Native(QIODevice *device) return true; } -bool DeckList::loadFromStream_Plain(QTextStream &in) +/** + * Clears the decklist and loads in a new deck from text + * + * @param in The text to load + * @param preserveMetadata If true, don't clear the existing metadata + * @return False if the input was empty, true otherwise. + */ +bool DeckList::loadFromStream_Plain(QTextStream &in, bool preserveMetadata) { const QRegularExpression reCardLine(R"(^\s*[\w\[\(\{].*$)", QRegularExpression::UseUnicodePropertiesOption); const QRegularExpression reEmpty("^\\s*$"); @@ -577,7 +584,7 @@ bool DeckList::loadFromStream_Plain(QTextStream &in) {QRegularExpression("æ"), QString("ae")}, {QRegularExpression(" ?[|/]+ ?"), QString(" // ")}}; - cleanList(); + cleanList(preserveMetadata); auto inputs = in.readAll().trimmed().split('\n'); auto max_line = inputs.size(); @@ -752,7 +759,7 @@ InnerDecklistNode *DeckList::getZoneObjFromName(const QString &zoneName) bool DeckList::loadFromFile_Plain(QIODevice *device) { QTextStream in(device); - return loadFromStream_Plain(in); + return loadFromStream_Plain(in, false); } struct WriteToStream @@ -801,12 +808,19 @@ QString DeckList::writeToString_Plain(bool prefixSideboardCards, bool slashTappe return result; } -void DeckList::cleanList() +/** + * Clears all cards and other data from the decklist + * + * @param preserveMetadata If true, only clear the cards + */ +void DeckList::cleanList(bool preserveMetadata) { root->clearTree(); - setName(); - setComments(); - setTags(); + if (!preserveMetadata) { + setName(); + setComments(); + setTags(); + } refreshDeckHash(); } diff --git a/common/decklist.h b/common/decklist.h index 8acbd4945..de839ad23 100644 --- a/common/decklist.h +++ b/common/decklist.h @@ -351,13 +351,13 @@ public: QString writeToString_Native(); bool loadFromFile_Native(QIODevice *device); bool saveToFile_Native(QIODevice *device); - bool loadFromStream_Plain(QTextStream &stream); + bool loadFromStream_Plain(QTextStream &stream, bool preserveMetadata); bool loadFromFile_Plain(QIODevice *device); bool saveToStream_Plain(QTextStream &stream, bool prefixSideboardCards, bool slashTappedOutSplitCards); bool saveToFile_Plain(QIODevice *device, bool prefixSideboardCards = true, bool slashTappedOutSplitCards = false); QString writeToString_Plain(bool prefixSideboardCards = true, bool slashTappedOutSplitCards = false); - void cleanList(); + void cleanList(bool preserveMetadata = false); bool isEmpty() const { return root->isEmpty() && name.isEmpty() && comments.isEmpty() && sideboardPlans.isEmpty();