mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-15 06:52:15 -07:00
New DeckList method to return cards as CardInfoPtrs
Saner update to prevent crashes.
This commit is contained in:
parent
f994ffa02d
commit
443f8717a3
6 changed files with 75 additions and 31 deletions
|
|
@ -81,7 +81,7 @@ void TabDeckEditorVisual::createCentralFrame()
|
|||
void TabDeckEditorVisual::onDeckChanged()
|
||||
{
|
||||
AbstractTabDeckEditor::onDeckChanged();
|
||||
tabContainer->visualDeckView->updateDisplay();
|
||||
tabContainer->visualDeckView->decklistDataChanged(QModelIndex(), QModelIndex());
|
||||
tabContainer->deckAnalytics->refreshDisplays(deckDockWidget->deckModel);
|
||||
tabContainer->sampleHandWidget->setDeckModel(deckDockWidget->deckModel);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -309,6 +309,8 @@ void DeckEditorDeckDockWidget::setDeck(DeckLoader *_deck)
|
|||
deckView->expandAll();
|
||||
|
||||
deckTagsDisplayWidget->connectDeckList(deckModel->getDeckList());
|
||||
|
||||
emit deckChanged();
|
||||
}
|
||||
|
||||
DeckLoader *DeckEditorDeckDockWidget::getDeckList()
|
||||
|
|
@ -325,6 +327,7 @@ void DeckEditorDeckDockWidget::cleanDeck()
|
|||
nameEdit->setText(QString());
|
||||
commentsEdit->setText(QString());
|
||||
hashLabel->setText(QString());
|
||||
emit deckChanged();
|
||||
updateBannerCardComboBox();
|
||||
deckTagsDisplayWidget->connectDeckList(deckModel->getDeckList());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -205,35 +205,8 @@ void VisualDeckEditorWidget::populateCards()
|
|||
if (!deck_list_model)
|
||||
return;
|
||||
DeckList *decklist = deck_list_model->getDeckList();
|
||||
if (!decklist)
|
||||
return;
|
||||
InnerDecklistNode *listRoot = decklist->getRoot();
|
||||
if (!listRoot)
|
||||
return;
|
||||
|
||||
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) {
|
||||
if (currentZone->getName() == DECK_ZONE_MAIN) {
|
||||
mainDeckCards->append(info);
|
||||
} else if (currentZone->getName() == DECK_ZONE_SIDE) {
|
||||
sideboardCards->append(info);
|
||||
}
|
||||
} else {
|
||||
qDebug() << "Card not found in database!";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
mainDeckCards = decklist->getCardsAsCardInfoPtrsForZone(DECK_ZONE_MAIN);
|
||||
sideboardCards = decklist->getCardsAsCardInfoPtrsForZone(DECK_ZONE_SIDE);
|
||||
}
|
||||
|
||||
void VisualDeckEditorWidget::sortCardList(const QStringList properties, Qt::SortOrder order = Qt::AscendingOrder)
|
||||
|
|
|
|||
|
|
@ -26,6 +26,9 @@ public:
|
|||
void sortCardList(QStringList properties, Qt::SortOrder order);
|
||||
void setDeckList(const DeckList &new_deck_list_model);
|
||||
|
||||
public slots:
|
||||
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
||||
|
||||
signals:
|
||||
void activeCardChanged(CardInfoPtr activeCard);
|
||||
void mainboardCardClicked(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
|
|
@ -35,7 +38,6 @@ protected slots:
|
|||
void onHover(CardInfoPtr hoveredCard);
|
||||
void onMainboardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void onSideboardClick(QMouseEvent *event, CardInfoPictureWithTextOverlayWidget *instance);
|
||||
void decklistDataChanged(QModelIndex topLeft, QModelIndex bottomRight);
|
||||
void activeSortCriteriaChanged();
|
||||
|
||||
private:
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
#include "decklist.h"
|
||||
|
||||
#include "../cockatrice/src/game/cards/card_database_manager.h"
|
||||
|
||||
#include <QCryptographicHash>
|
||||
#include <QDebug>
|
||||
#include <QFile>
|
||||
|
|
@ -864,6 +866,66 @@ QMap<QString, QString> DeckList::getCardListWithProviderId() const
|
|||
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 size = 0;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@
|
|||
#include <QVector>
|
||||
|
||||
// Required on Mac. Forward declaration doesn't work. Don't ask why.
|
||||
#include "../cockatrice/src/game/cards/card_database.h"
|
||||
|
||||
#include <QtCore/QXmlStreamReader>
|
||||
#include <QtCore/QXmlStreamWriter>
|
||||
#include <common/pb/move_card_to_zone.pb.h>
|
||||
|
|
@ -364,6 +366,8 @@ public:
|
|||
}
|
||||
QStringList getCardList() const;
|
||||
QMap<QString, QString> getCardListWithProviderId() const;
|
||||
QList<CardInfoPtr> *getCardsAsCardInfoPtrs() const;
|
||||
QList<CardInfoPtr> *getCardsAsCardInfoPtrsForZone(QString zoneName) const;
|
||||
|
||||
int getSideboardSize() const;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue