From 83757f0ea355dbb75dbab586bc5b1fa20065bd8e Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Thu, 10 Apr 2025 04:21:02 +0200 Subject: [PATCH] Add modelDirty signal, add helper functions to gather all main and sub card types. (#5819) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lukas Brübach --- cockatrice/src/game/cards/card_database.cpp | 39 +++++++++++++++++++ cockatrice/src/game/cards/card_database.h | 2 + .../src/game/cards/card_database_model.h | 6 +++ 3 files changed, 47 insertions(+) diff --git a/cockatrice/src/game/cards/card_database.cpp b/cockatrice/src/game/cards/card_database.cpp index 044f2c623..7181ffd06 100644 --- a/cockatrice/src/game/cards/card_database.cpp +++ b/cockatrice/src/game/cards/card_database.cpp @@ -472,6 +472,45 @@ QStringList CardDatabase::getAllMainCardTypes() const return types.values(); } +QMap CardDatabase::getAllMainCardTypesWithCount() const +{ + QMap typeCounts; + QHashIterator cardIterator(cards); + + while (cardIterator.hasNext()) { + QString type = cardIterator.next().value()->getMainCardType(); + typeCounts[type]++; + } + + return typeCounts; +} + +QMap CardDatabase::getAllSubCardTypesWithCount() const +{ + QMap typeCounts; + QHashIterator cardIterator(cards); + + while (cardIterator.hasNext()) { + QString type = cardIterator.next().value()->getCardType(); + + QStringList parts = type.split(" — "); + + if (parts.size() > 1) { // Ensure there are subtypes +#if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)) + QStringList subtypes = parts[1].split(" ", Qt::SkipEmptyParts); +#else + QStringList subtypes = parts[1].split(" ", QString::SkipEmptyParts); +#endif + + for (const QString &subtype : subtypes) { + typeCounts[subtype]++; + } + } + } + + return typeCounts; +} + void CardDatabase::checkUnknownSets() { auto _sets = getSetList(); diff --git a/cockatrice/src/game/cards/card_database.h b/cockatrice/src/game/cards/card_database.h index 236278b30..a4baaf0a5 100644 --- a/cockatrice/src/game/cards/card_database.h +++ b/cockatrice/src/game/cards/card_database.h @@ -98,6 +98,8 @@ public: LoadStatus loadFromFile(const QString &fileName); bool saveCustomTokensToFile(); QStringList getAllMainCardTypes() const; + QMap getAllMainCardTypesWithCount() const; + QMap getAllSubCardTypesWithCount() const; LoadStatus getLoadStatus() const { return loadStatus; diff --git a/cockatrice/src/game/cards/card_database_model.h b/cockatrice/src/game/cards/card_database_model.h index 5a6b8feec..9f11c6611 100644 --- a/cockatrice/src/game/cards/card_database_model.h +++ b/cockatrice/src/game/cards/card_database_model.h @@ -87,6 +87,7 @@ public: void setIsToken(FilterBool _isToken) { isToken = _isToken; + emit modelDirty(); dirty(); } @@ -97,17 +98,20 @@ public: filterString = nullptr; } cardName = sanitizeCardName(_cardName, characterTranslation); + emit modelDirty(); dirty(); } void setStringFilter(const QString &_src) { delete filterString; filterString = new FilterString(_src); + emit modelDirty(); dirty(); } void setCardNameSet(const QSet &_cardNameSet) { cardNameSet = _cardNameSet; + emit modelDirty(); dirty(); } @@ -119,6 +123,8 @@ public: int rowCount(const QModelIndex &parent = QModelIndex()) const override; bool canFetchMore(const QModelIndex &parent) const override; void fetchMore(const QModelIndex &parent) override; +signals: + void modelDirty(); protected: bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;