From 53e9a91dc6a8b66bd04777c0b7d9e5e6fe78c22c Mon Sep 17 00:00:00 2001 From: BruebachL <44814898+BruebachL@users.noreply.github.com> Date: Wed, 9 Apr 2025 18:08:54 +0200 Subject: [PATCH] Emit more signals when data is changed and add utility functions to interact with a decklist in the context of cardinfoptrs. (#5815) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Lukas BrĂ¼bach --- cockatrice/src/deck/deck_list_model.cpp | 92 ++++++++++++++++++++++++- cockatrice/src/deck/deck_list_model.h | 3 + 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/cockatrice/src/deck/deck_list_model.cpp b/cockatrice/src/deck/deck_list_model.cpp index 0005777c9..5d8cb60f3 100644 --- a/cockatrice/src/deck/deck_list_model.cpp +++ b/cockatrice/src/deck/deck_list_model.cpp @@ -263,6 +263,8 @@ bool DeckListModel::setData(const QModelIndex &index, const QVariant &value, con emitRecursiveUpdates(index); deckList->refreshDeckHash(); + + emit dataChanged(index, index); return true; } @@ -292,7 +294,7 @@ bool DeckListModel::removeRows(int row, int count, const QModelIndex &parent) } else { emitRecursiveUpdates(parent); } - + emit dataChanged(parent, parent); return true; } @@ -483,6 +485,94 @@ void DeckListModel::setDeckList(DeckLoader *_deck) rebuildTree(); } +QList DeckListModel::getCardsAsCardInfoPtrs() const +{ + QList cards; + DeckList *decklist = getDeckList(); + if (!decklist) { + return cards; + } + InnerDecklistNode *listRoot = decklist->getRoot(); + if (!listRoot) + return cards; + + for (int i = 0; i < listRoot->size(); i++) { + InnerDecklistNode *currentZone = dynamic_cast(listRoot->at(i)); + if (!currentZone) + continue; + for (int j = 0; j < currentZone->size(); j++) { + DecklistCardNode *currentCard = dynamic_cast(currentZone->at(j)); + if (!currentCard) + continue; + for (int k = 0; k < currentCard->getNumber(); ++k) { + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( + currentCard->getName(), currentCard->getCardProviderId()); + if (info) { + cards.append(info); + } else { + qDebug() << "Card not found in database!"; + } + } + } + } + return cards; +} + +QList DeckListModel::getCardsAsCardInfoPtrsForZone(QString zoneName) const +{ + QList cards; + DeckList *decklist = getDeckList(); + if (!decklist) { + return cards; + } + InnerDecklistNode *listRoot = decklist->getRoot(); + if (!listRoot) + return cards; + + for (int i = 0; i < listRoot->size(); i++) { + InnerDecklistNode *currentZone = dynamic_cast(listRoot->at(i)); + if (!currentZone) + continue; + if (currentZone->getName() == zoneName) { + for (int j = 0; j < currentZone->size(); j++) { + DecklistCardNode *currentCard = dynamic_cast(currentZone->at(j)); + if (!currentCard) + continue; + for (int k = 0; k < currentCard->getNumber(); ++k) { + CardInfoPtr info = CardDatabaseManager::getInstance()->getCardByNameAndProviderId( + currentCard->getName(), currentCard->getCardProviderId()); + if (info) { + cards.append(info); + } else { + qDebug() << "Card not found in database!"; + } + } + } + } + } + return cards; +} + +QList *DeckListModel::getZones() const +{ + QList *zones = new QList(); + DeckList *decklist = getDeckList(); + if (!decklist) { + return zones; + } + InnerDecklistNode *listRoot = decklist->getRoot(); + if (!listRoot) + return zones; + + for (int i = 0; i < listRoot->size(); i++) { + InnerDecklistNode *currentZone = dynamic_cast(listRoot->at(i)); + if (!currentZone) + continue; + zones->append(currentZone->getName()); + } + return zones; +} + void DeckListModel::printDeckListNode(QTextCursor *cursor, InnerDecklistNode *node) { const int totalColumns = 2; diff --git a/cockatrice/src/deck/deck_list_model.h b/cockatrice/src/deck/deck_list_model.h index c7194a5da..4595f6ad0 100644 --- a/cockatrice/src/deck/deck_list_model.h +++ b/cockatrice/src/deck/deck_list_model.h @@ -110,6 +110,9 @@ public: return deckList; } void setDeckList(DeckLoader *_deck); + QList getCardsAsCardInfoPtrs() const; + QList getCardsAsCardInfoPtrsForZone(QString zoneName) const; + QList *getZones() const; private: DeckLoader *deckList;