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;