Move new method to DeckListModel so we don't have to include CardDatabaseManager in common.

This commit is contained in:
Lukas Brübach 2025-03-01 12:55:31 +01:00
parent a282fe2042
commit 12f8f1a533
5 changed files with 73 additions and 67 deletions

View file

@ -204,9 +204,9 @@ void VisualDeckEditorWidget::populateCards()
if (!deckListModel) if (!deckListModel)
return; return;
DeckList *decklist = deckListModel->getDeckList();
mainDeckCards = decklist->getCardsAsCardInfoPtrsForZone(DECK_ZONE_MAIN); mainDeckCards = deckListModel->getCardsAsCardInfoPtrsForZone(DECK_ZONE_MAIN);
sideboardCards = decklist->getCardsAsCardInfoPtrsForZone(DECK_ZONE_SIDE); sideboardCards = deckListModel->getCardsAsCardInfoPtrsForZone(DECK_ZONE_SIDE);
} }
void VisualDeckEditorWidget::sortCardList(const QStringList properties, Qt::SortOrder order = Qt::AscendingOrder) void VisualDeckEditorWidget::sortCardList(const QStringList properties, Qt::SortOrder order = Qt::AscendingOrder)

View file

@ -484,6 +484,74 @@ void DeckListModel::setDeckList(DeckLoader *_deck)
rebuildTree(); rebuildTree();
} }
QList<CardInfoPtr> *DeckListModel::getCardsAsCardInfoPtrs() const
{
QList<CardInfoPtr> *cards = new QList<CardInfoPtr>();
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<InnerDecklistNode *>(listRoot->at(i));
if (!currentZone)
continue;
for (int j = 0; j < currentZone->size(); j++) {
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(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<CardInfoPtr> *DeckListModel::getCardsAsCardInfoPtrsForZone(QString zoneName) const
{
QList<CardInfoPtr> *cards = new QList<CardInfoPtr>();
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<InnerDecklistNode *>(listRoot->at(i));
if (!currentZone)
continue;
if (currentZone->getName() == zoneName) {
for (int j = 0; j < currentZone->size(); j++) {
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(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;
}
void DeckListModel::printDeckListNode(QTextCursor *cursor, InnerDecklistNode *node) void DeckListModel::printDeckListNode(QTextCursor *cursor, InnerDecklistNode *node)
{ {
const int totalColumns = 2; const int totalColumns = 2;

View file

@ -110,6 +110,8 @@ public:
return deckList; return deckList;
} }
void setDeckList(DeckLoader *_deck); void setDeckList(DeckLoader *_deck);
QList<CardInfoPtr> *getCardsAsCardInfoPtrs() const;
QList<CardInfoPtr> *getCardsAsCardInfoPtrsForZone(QString zoneName) const;
private: private:
DeckLoader *deckList; DeckLoader *deckList;

View file

@ -1,7 +1,5 @@
#include "decklist.h" #include "decklist.h"
#include "../cockatrice/src/game/cards/card_database_manager.h"
#include <QCryptographicHash> #include <QCryptographicHash>
#include <QDebug> #include <QDebug>
#include <QFile> #include <QFile>
@ -852,66 +850,6 @@ QMap<QString, QString> DeckList::getCardListWithProviderId() const
return result; return result;
} }
QList<CardInfoPtr> *DeckList::getCardsAsCardInfoPtrs() const
{
QList<CardInfoPtr> *cards = new QList<CardInfoPtr>();
InnerDecklistNode *listRoot = getRoot();
if (!listRoot)
return cards;
for (int i = 0; i < listRoot->size(); i++) {
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
if (!currentZone)
continue;
for (int j = 0; j < currentZone->size(); j++) {
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(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<CardInfoPtr> *DeckList::getCardsAsCardInfoPtrsForZone(QString zoneName) const
{
QList<CardInfoPtr> *cards = new QList<CardInfoPtr>();
InnerDecklistNode *listRoot = getRoot();
if (!listRoot)
return cards;
for (int i = 0; i < listRoot->size(); i++) {
InnerDecklistNode *currentZone = dynamic_cast<InnerDecklistNode *>(listRoot->at(i));
if (!currentZone)
continue;
if (currentZone->getName() == zoneName) {
for (int j = 0; j < currentZone->size(); j++) {
DecklistCardNode *currentCard = dynamic_cast<DecklistCardNode *>(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;
}
int DeckList::getSideboardSize() const int DeckList::getSideboardSize() const
{ {
int size = 0; int size = 0;

View file

@ -366,8 +366,6 @@ public:
} }
QStringList getCardList() const; QStringList getCardList() const;
QMap<QString, QString> getCardListWithProviderId() const; QMap<QString, QString> getCardListWithProviderId() const;
QList<CardInfoPtr> *getCardsAsCardInfoPtrs() const;
QList<CardInfoPtr> *getCardsAsCardInfoPtrsForZone(QString zoneName) const;
int getSideboardSize() const; int getSideboardSize() const;