diff --git a/cockatrice/cockatrice_en@source.ts b/cockatrice/cockatrice_en@source.ts index 8be7525f4..79771fe02 100644 --- a/cockatrice/cockatrice_en@source.ts +++ b/cockatrice/cockatrice_en@source.ts @@ -7882,128 +7882,133 @@ Please refrain from engaging in this activity or further actions may be taken ag WndSets - + Move selected set to the top - + Move selected set up - + Move selected set down - + Move selected set to the bottom - + Search by set name, code, or type - + Default order - + Restore original art priority order - + Enable all sets - + Disable all sets - + Enable selected set(s) - + Disable selected set(s) - + Deck Editor - + Use CTRL+A to select all sets in the view. - + Only cards in enabled sets will appear in the card list of the deck editor. - + Image priority is decided in the following order: - + first the CUSTOM Folder (%1), then the Enabled Sets in this dialog (Top to Bottom) %1 is a link to the wiki - + Card Art - + How to use custom card art - + Hints - + Note - + Sorting by column allows you to find a set while not changing set priority. - + To enable ordering again, click the column header until this message disappears. - + Use the current sorting as the set priority instead - + Sorts the set priority using the same column - + + Include online-only (Arena) cards [requires restart] + + + + Manage sets diff --git a/cockatrice/src/dialogs/dlg_manage_sets.cpp b/cockatrice/src/dialogs/dlg_manage_sets.cpp index ab82b9b65..b608f7dd1 100644 --- a/cockatrice/src/dialogs/dlg_manage_sets.cpp +++ b/cockatrice/src/dialogs/dlg_manage_sets.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #define SORT_RESET -1 @@ -162,6 +163,16 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) sortWarning->setLayout(sortWarningLayout); sortWarning->setVisible(false); + includeOnlineOnlyCards = SettingsCache::instance().getIncludeOnlineOnlyCards(); + QCheckBox *onlineOnly = new QCheckBox(tr("Include online-only (Arena) cards [requires restart]")); + onlineOnly->setChecked(includeOnlineOnlyCards); +#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + connect(onlineOnly, &QCheckBox::checkStateChanged, this, &WndSets::onlineOnlyCheckStateChanged); +#else + connect(onlineOnly, &QCheckBox::stateChanged, this, + [this](int state) { onlineOnlyCheckStateChanged(static_cast(state)); }); +#endif + buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, SIGNAL(accepted()), this, SLOT(actSave())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(actRestore())); @@ -175,8 +186,9 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) mainLayout->addWidget(enableSomeButton, 2, 1); mainLayout->addWidget(disableSomeButton, 2, 2); mainLayout->addWidget(sortWarning, 3, 1, 1, 2); - mainLayout->addWidget(hintsGroupBox, 4, 1, 1, 2); - mainLayout->addWidget(buttonBox, 5, 1, 1, 2); + mainLayout->addWidget(onlineOnly, 4, 1, 1, 2); + mainLayout->addWidget(hintsGroupBox, 5, 1, 1, 2); + mainLayout->addWidget(buttonBox, 6, 1, 1, 2); mainLayout->setColumnStretch(1, 1); mainLayout->setColumnStretch(2, 1); @@ -239,9 +251,23 @@ void WndSets::rebuildMainLayout(int actionToTake) } } +void WndSets::onlineOnlyCheckStateChanged(Qt::CheckState state) +{ + switch (state) { + case Qt::Unchecked: + includeOnlineOnlyCards = false; + break; + + default: + includeOnlineOnlyCards = true; + break; + } +} + void WndSets::actSave() { model->save(CardDatabaseManager::getInstance()); + SettingsCache::instance().setIncludeOnlineOnlyCards(includeOnlineOnlyCards); PictureLoader::clearPixmapCache(); close(); } diff --git a/cockatrice/src/dialogs/dlg_manage_sets.h b/cockatrice/src/dialogs/dlg_manage_sets.h index e974f67f9..dd7e7cde9 100644 --- a/cockatrice/src/dialogs/dlg_manage_sets.h +++ b/cockatrice/src/dialogs/dlg_manage_sets.h @@ -44,6 +44,7 @@ private: void saveHeaderState(); void rebuildMainLayout(int actionToTake); bool setOrderIsSorted; + bool includeOnlineOnlyCards; enum { NO_SETS_SELECTED, @@ -73,6 +74,7 @@ private slots: void actDisableResetButton(const QString &filterText); void actSort(int index); void actIgnoreWarning(); + void onlineOnlyCheckStateChanged(Qt::CheckState state); }; #endif diff --git a/cockatrice/src/game/cards/card_database.cpp b/cockatrice/src/game/cards/card_database.cpp index b22bc2891..0fe43e20a 100644 --- a/cockatrice/src/game/cards/card_database.cpp +++ b/cockatrice/src/game/cards/card_database.cpp @@ -536,4 +536,4 @@ bool CardDatabase::saveCustomTokensToFile() availableParsers.first()->saveToFile(tmpSets, tmpCards, fileName); return true; -} \ No newline at end of file +} diff --git a/cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp b/cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp index e7f657b96..827b70fc3 100644 --- a/cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp +++ b/cockatrice/src/game/cards/card_database_parser/cockatrice_xml_4.cpp @@ -1,5 +1,7 @@ #include "cockatrice_xml_4.h" +#include "../../../settings/cache_settings.h" + #include #include #include @@ -124,6 +126,7 @@ QVariantHash CockatriceXml4Parser::loadCardPropertiesFromXml(QXmlStreamReader &x void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml) { + bool includeOnlineOnlyCards = SettingsCache::instance().getIncludeOnlineOnlyCards(); while (!xml.atEnd()) { if (xml.readNext() == QXmlStreamReader::EndElement) { break; @@ -183,7 +186,17 @@ void CockatriceXml4Parser::loadCardsFromXml(QXmlStreamReader &xml) attrName = "picurl"; setInfo.setProperty(attrName, attr.value().toString()); } - _sets[setName].append(setInfo); + + // This is very much a hack and not the right place to + // put this check, as it requires a reload of Cockatrice + // to be apply. + // + // However, this is also true of the `set->getEnabled()` + // check above (which is currently bugged as well), so + // we'll fix both at the same time. + if (includeOnlineOnlyCards || setInfo.getProperty("isOnlineOnly") != "true") { + _sets[setName].append(setInfo); + } } // related cards } else if (xmlName == "related" || xmlName == "reverse-related") { diff --git a/cockatrice/src/settings/cache_settings.cpp b/cockatrice/src/settings/cache_settings.cpp index bd88a8a3f..52e6af104 100644 --- a/cockatrice/src/settings/cache_settings.cpp +++ b/cockatrice/src/settings/cache_settings.cpp @@ -259,6 +259,7 @@ SettingsCache::SettingsCache() bumpSetsWithCardsInDeckToTop = settings->value("cards/bumpsetswithcardsindecktotop", true).toBool(); printingSelectorSortOrder = settings->value("cards/printingselectorsortorder", 1).toInt(); printingSelectorCardSize = settings->value("cards/printingselectorcardsize", 100).toInt(); + includeOnlineOnlyCards = settings->value("cards/includeonlineonlycards", false).toBool(); printingSelectorNavigationButtonsVisible = settings->value("cards/printingselectornavigationbuttonsvisible", true).toBool(); visualDeckStorageCardSize = settings->value("interface/visualdeckstoragecardsize", 100).toInt(); @@ -654,6 +655,13 @@ void SettingsCache::setPrintingSelectorCardSize(int _printingSelectorCardSize) emit printingSelectorCardSizeChanged(); } +void SettingsCache::setIncludeOnlineOnlyCards(bool _includeOnlineOnlyCards) +{ + includeOnlineOnlyCards = _includeOnlineOnlyCards; + settings->setValue("cards/includeonlineonlycards", includeOnlineOnlyCards); + emit includeOnlineOnlyCardsChanged(includeOnlineOnlyCards); +} + void SettingsCache::setPrintingSelectorNavigationButtonsVisible(QT_STATE_CHANGED_T _navigationButtonsVisible) { printingSelectorNavigationButtonsVisible = _navigationButtonsVisible; diff --git a/cockatrice/src/settings/cache_settings.h b/cockatrice/src/settings/cache_settings.h index 771b2663c..5986b07a7 100644 --- a/cockatrice/src/settings/cache_settings.h +++ b/cockatrice/src/settings/cache_settings.h @@ -58,6 +58,7 @@ signals: void bumpSetsWithCardsInDeckToTopChanged(); void printingSelectorSortOrderChanged(); void printingSelectorCardSizeChanged(); + void includeOnlineOnlyCardsChanged(bool _includeOnlineOnlyCards); void printingSelectorNavigationButtonsVisibleChanged(); void visualDeckStorageShowTagFilterChanged(bool _visible); void visualDeckStorageShowBannerCardComboBoxChanged(bool _visible); @@ -128,6 +129,7 @@ private: bool bumpSetsWithCardsInDeckToTop; int printingSelectorSortOrder; int printingSelectorCardSize; + bool includeOnlineOnlyCards; bool printingSelectorNavigationButtonsVisible; int visualDeckStorageSortingOrder; bool visualDeckStorageShowFolders; @@ -401,6 +403,10 @@ public: { return printingSelectorCardSize; } + bool getIncludeOnlineOnlyCards() const + { + return includeOnlineOnlyCards; + } bool getPrintingSelectorNavigationButtonsVisible() const { return printingSelectorNavigationButtonsVisible; @@ -774,6 +780,7 @@ public slots: void setBumpSetsWithCardsInDeckToTop(QT_STATE_CHANGED_T _bumpSetsWithCardsInDeckToTop); void setPrintingSelectorSortOrder(int _printingSelectorSortOrder); void setPrintingSelectorCardSize(int _printingSelectorCardSize); + void setIncludeOnlineOnlyCards(bool _includeOnlineOnlyCards); void setPrintingSelectorNavigationButtonsVisible(QT_STATE_CHANGED_T _navigationButtonsVisible); void setVisualDeckStorageSortingOrder(int _visualDeckStorageSortingOrder); void setVisualDeckStorageShowFolders(QT_STATE_CHANGED_T value); diff --git a/doc/carddatabase_v4/cards.xsd b/doc/carddatabase_v4/cards.xsd index 00ed72555..6c5eb9bda 100644 --- a/doc/carddatabase_v4/cards.xsd +++ b/doc/carddatabase_v4/cards.xsd @@ -28,6 +28,7 @@ + diff --git a/oracle/oracle_en@source.ts b/oracle/oracle_en@source.ts index 7c085344a..301de42e3 100644 --- a/oracle/oracle_en@source.ts +++ b/oracle/oracle_en@source.ts @@ -271,7 +271,7 @@ OracleImporter - + Dummy set containing tokens diff --git a/oracle/src/oracleimporter.cpp b/oracle/src/oracleimporter.cpp index 360423394..4187c4c9f 100644 --- a/oracle/src/oracleimporter.cpp +++ b/oracle/src/oracleimporter.cpp @@ -212,7 +212,8 @@ int OracleImporter::importCardsFromSet(const CardSetPtr ¤tSet, const QList }; // mtgjson name => xml name - static const QMap setInfoProperties{{"number", "num"}, {"rarity", "rarity"}}; + static const QMap setInfoProperties{ + {"number", "num"}, {"rarity", "rarity"}, {"isOnlineOnly", "isOnlineOnly"}}; // mtgjson name => xml name static const QMap identifierProperties{{"multiverseId", "muid"}, {"scryfallId", "uuid"}};