Replace CardInfo* and Carset* with smart pointers (#3053)
* Replace CardInfo* and Carset* with smart pointers * fixes to help memory & c++11 stuff
This commit is contained in:
parent
3e418ba3c6
commit
517420cccb
37 changed files with 409 additions and 342 deletions
|
@ -46,7 +46,7 @@ void AbstractCardItem::cardInfoUpdated()
|
|||
{
|
||||
info = db->getCard(name);
|
||||
if (info)
|
||||
connect(info, SIGNAL(pixmapUpdated()), this, SLOT(pixmapUpdated()));
|
||||
connect(info.data(), SIGNAL(pixmapUpdated()), this, SLOT(pixmapUpdated()));
|
||||
|
||||
cacheBgColor();
|
||||
update();
|
||||
|
@ -182,7 +182,7 @@ void AbstractCardItem::setName(const QString &_name)
|
|||
|
||||
emit deleteCardInfoPopup(name);
|
||||
if (info)
|
||||
disconnect(info, nullptr, this, nullptr);
|
||||
disconnect(info.data(), nullptr, this, nullptr);
|
||||
name = _name;
|
||||
|
||||
cardInfoUpdated();
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
#define ABSTRACTCARDITEM_H
|
||||
|
||||
#include "arrowtarget.h"
|
||||
#include "carddatabase.h"
|
||||
|
||||
class CardInfo;
|
||||
class Player;
|
||||
|
||||
const int CARD_WIDTH = 72;
|
||||
|
@ -13,7 +13,7 @@ class AbstractCardItem : public ArrowTarget
|
|||
{
|
||||
Q_OBJECT
|
||||
protected:
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
int id;
|
||||
QString name;
|
||||
bool tapped;
|
||||
|
@ -54,7 +54,7 @@ public:
|
|||
QSizeF getTranslatedSize(QPainter *painter) const;
|
||||
void paintPicture(QPainter *painter, const QSizeF &translatedSize, int angle);
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
|
||||
CardInfo *getInfo() const
|
||||
CardInfoPtr getInfo() const
|
||||
{
|
||||
return info;
|
||||
}
|
||||
|
|
|
@ -239,7 +239,7 @@ void ArrowDragItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
|
|||
}
|
||||
if (startZone->getName().compare("hand") == 0) {
|
||||
startCard->playCard(false);
|
||||
CardInfo *ci = startCard->getInfo();
|
||||
CardInfoPtr ci = startCard->getInfo();
|
||||
if (ci && (((!settingsCache->getPlayToStack() && ci->getTableRow() == 3) ||
|
||||
((settingsCache->getPlayToStack() && ci->getTableRow() != 0) &&
|
||||
startCard->getZone()->getName().toStdString() != "stack"))))
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
#include <QDir>
|
||||
#include <QFile>
|
||||
#include <QMessageBox>
|
||||
#include <utility>
|
||||
|
||||
const int CardDatabase::versionNeeded = 3;
|
||||
const char *CardDatabase::TOKENS_SETNAME = "TK";
|
||||
|
||||
static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardSet *set)
|
||||
static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardSetPtr &set)
|
||||
{
|
||||
if (set == nullptr) {
|
||||
if (set.isNull()) {
|
||||
qDebug() << "&operator<< set is nullptr";
|
||||
return xml;
|
||||
}
|
||||
|
@ -38,6 +39,16 @@ CardSet::CardSet(const QString &_shortName,
|
|||
loadSetOptions();
|
||||
}
|
||||
|
||||
CardSetPtr CardSet::newInstance(const QString &_shortName,
|
||||
const QString &_longName,
|
||||
const QString &_setType,
|
||||
const QDate &_releaseDate)
|
||||
{
|
||||
CardSetPtr ptr(new CardSet(_shortName, _longName, _setType, _releaseDate));
|
||||
// ptr->setSmartPointer(ptr);
|
||||
return ptr;
|
||||
}
|
||||
|
||||
QString CardSet::getCorrectedShortName() const
|
||||
{
|
||||
// For Windows machines.
|
||||
|
@ -96,9 +107,9 @@ void CardSet::setIsKnown(bool _isknown)
|
|||
class SetList::KeyCompareFunctor
|
||||
{
|
||||
public:
|
||||
inline bool operator()(CardSet *a, CardSet *b) const
|
||||
inline bool operator()(const CardSetPtr &a, const CardSetPtr &b) const
|
||||
{
|
||||
if (a == nullptr || b == nullptr) {
|
||||
if (a.isNull() || b.isNull()) {
|
||||
qDebug() << "SetList::KeyCompareFunctor a or b is null";
|
||||
return false;
|
||||
}
|
||||
|
@ -116,7 +127,7 @@ int SetList::getEnabledSetsNum()
|
|||
{
|
||||
int num = 0;
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
if (set && set->getEnabled()) {
|
||||
++num;
|
||||
}
|
||||
|
@ -128,7 +139,7 @@ int SetList::getUnknownSetsNum()
|
|||
{
|
||||
int num = 0;
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
if (set && !set->getIsKnown() && !set->getIsKnownIgnored()) {
|
||||
++num;
|
||||
}
|
||||
|
@ -140,7 +151,7 @@ QStringList SetList::getUnknownSetsNames()
|
|||
{
|
||||
QStringList sets = QStringList();
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
if (set && !set->getIsKnown() && !set->getIsKnownIgnored()) {
|
||||
sets << set->getShortName();
|
||||
}
|
||||
|
@ -151,7 +162,7 @@ QStringList SetList::getUnknownSetsNames()
|
|||
void SetList::enableAllUnknown()
|
||||
{
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
if (set && !set->getIsKnown() && !set->getIsKnownIgnored()) {
|
||||
set->setIsKnown(true);
|
||||
set->setEnabled(true);
|
||||
|
@ -164,7 +175,7 @@ void SetList::enableAllUnknown()
|
|||
void SetList::enableAll()
|
||||
{
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
|
||||
if (set == nullptr) {
|
||||
qDebug() << "enabledAll has null";
|
||||
|
@ -182,7 +193,7 @@ void SetList::enableAll()
|
|||
void SetList::markAllAsKnown()
|
||||
{
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
CardSetPtr set = at(i);
|
||||
if (set && !set->getIsKnown() && !set->getIsKnownIgnored()) {
|
||||
set->setIsKnown(true);
|
||||
set->setEnabled(false);
|
||||
|
@ -198,8 +209,8 @@ void SetList::guessSortKeys()
|
|||
QDate distantFuture(2050, 1, 1);
|
||||
int aHundredYears = 36500;
|
||||
for (int i = 0; i < size(); ++i) {
|
||||
CardSet *set = at(i);
|
||||
if (set == nullptr) {
|
||||
CardSetPtr set = at(i);
|
||||
if (set.isNull()) {
|
||||
qDebug() << "guessSortKeys set is null";
|
||||
continue;
|
||||
}
|
||||
|
@ -241,16 +252,45 @@ CardInfo::CardInfo(const QString &_name,
|
|||
pixmapCacheKey = QLatin1String("card_") + name;
|
||||
simpleName = CardInfo::simplifyName(name);
|
||||
|
||||
for (int i = 0; i < sets.size(); i++) {
|
||||
sets[i]->append(this);
|
||||
}
|
||||
|
||||
refreshCachedSetNames();
|
||||
}
|
||||
|
||||
CardInfo::~CardInfo()
|
||||
{
|
||||
PictureLoader::clearPixmapCache(this);
|
||||
PictureLoader::clearPixmapCache(smartThis);
|
||||
}
|
||||
|
||||
CardInfoPtr CardInfo::newInstance(const QString &_name,
|
||||
bool _isToken,
|
||||
const QString &_manacost,
|
||||
const QString &_cmc,
|
||||
const QString &_cardtype,
|
||||
const QString &_powtough,
|
||||
const QString &_text,
|
||||
const QStringList &_colors,
|
||||
const QList<CardRelation *> &_relatedCards,
|
||||
const QList<CardRelation *> &_reverseRelatedCards,
|
||||
bool _upsideDownArt,
|
||||
int _loyalty,
|
||||
bool _cipt,
|
||||
int _tableRow,
|
||||
const SetList &_sets,
|
||||
const QStringMap &_customPicURLs,
|
||||
MuidMap _muIds,
|
||||
QStringMap _collectorNumbers,
|
||||
QStringMap _rarities)
|
||||
{
|
||||
CardInfoPtr ptr(new CardInfo(_name, _isToken, _manacost, _cmc, _cardtype, _powtough, _text, _colors, _relatedCards,
|
||||
_reverseRelatedCards, _upsideDownArt, _loyalty, _cipt, _tableRow, _sets,
|
||||
_customPicURLs, std::move(_muIds), std::move(_collectorNumbers),
|
||||
std::move(_rarities)));
|
||||
ptr->setSmartPointer(ptr);
|
||||
|
||||
for (int i = 0; i < _sets.size(); i++) {
|
||||
_sets[i]->append(ptr);
|
||||
}
|
||||
|
||||
return ptr;
|
||||
}
|
||||
|
||||
QString CardInfo::getMainCardType() const
|
||||
|
@ -298,14 +338,14 @@ QString CardInfo::getCorrectedName() const
|
|||
return result.remove(" // ").remove(':').remove('"').remove('?').replace('/', ' ');
|
||||
}
|
||||
|
||||
void CardInfo::addToSet(CardSet *set)
|
||||
void CardInfo::addToSet(CardSetPtr set)
|
||||
{
|
||||
if (set == nullptr) {
|
||||
if (set.isNull()) {
|
||||
qDebug() << "addToSet(nullptr)";
|
||||
return;
|
||||
}
|
||||
|
||||
set->append(this);
|
||||
set->append(smartThis);
|
||||
sets << set;
|
||||
|
||||
refreshCachedSetNames();
|
||||
|
@ -356,9 +396,9 @@ const QChar CardInfo::getColorChar() const
|
|||
}
|
||||
}
|
||||
|
||||
static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info)
|
||||
static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfoPtr &info)
|
||||
{
|
||||
if (info == nullptr) {
|
||||
if (info.isNull()) {
|
||||
qDebug() << "operator<< info is nullptr";
|
||||
return xml;
|
||||
}
|
||||
|
@ -467,6 +507,7 @@ static QXmlStreamWriter &operator<<(QXmlStreamWriter &xml, const CardInfo *info)
|
|||
|
||||
CardDatabase::CardDatabase(QObject *parent) : QObject(parent), loadStatus(NotLoaded)
|
||||
{
|
||||
qRegisterMetaType<CardInfoPtr>("CardInfoPtr");
|
||||
connect(settingsCache, SIGNAL(cardDatabasePathChanged()), this, SLOT(loadCardDatabases()));
|
||||
}
|
||||
|
||||
|
@ -479,24 +520,17 @@ void CardDatabase::clear()
|
|||
{
|
||||
clearDatabaseMutex->lock();
|
||||
|
||||
QHashIterator<QString, CardInfo *> i(cards);
|
||||
QHashIterator<QString, CardInfoPtr> i(cards);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
if (i.value()) {
|
||||
removeCard(i.value());
|
||||
i.value()->deleteLater();
|
||||
}
|
||||
}
|
||||
|
||||
// The pointers themselves were already deleted, so we don't delete them again.
|
||||
cards.clear();
|
||||
simpleNameCards.clear();
|
||||
|
||||
QHashIterator<QString, CardSet *> setIt(sets);
|
||||
while (setIt.hasNext()) {
|
||||
setIt.next();
|
||||
delete setIt.value();
|
||||
}
|
||||
sets.clear();
|
||||
|
||||
loadStatus = NotLoaded;
|
||||
|
@ -504,7 +538,7 @@ void CardDatabase::clear()
|
|||
clearDatabaseMutex->unlock();
|
||||
}
|
||||
|
||||
void CardDatabase::addCard(CardInfo *card)
|
||||
void CardDatabase::addCard(CardInfoPtr card)
|
||||
{
|
||||
if (card == nullptr) {
|
||||
qDebug() << "addCard(nullptr)";
|
||||
|
@ -518,9 +552,9 @@ void CardDatabase::addCard(CardInfo *card)
|
|||
emit cardAdded(card);
|
||||
}
|
||||
|
||||
void CardDatabase::removeCard(CardInfo *card)
|
||||
void CardDatabase::removeCard(CardInfoPtr card)
|
||||
{
|
||||
if (card == nullptr) {
|
||||
if (card.isNull()) {
|
||||
qDebug() << "removeCard(nullptr)";
|
||||
return;
|
||||
}
|
||||
|
@ -537,35 +571,39 @@ void CardDatabase::removeCard(CardInfo *card)
|
|||
removeCardMutex->lock();
|
||||
cards.remove(card->getName());
|
||||
simpleNameCards.remove(card->getSimpleName());
|
||||
card.clear();
|
||||
removeCardMutex->unlock();
|
||||
emit cardRemoved(card);
|
||||
}
|
||||
|
||||
CardInfo *CardDatabase::getCard(const QString &cardName) const
|
||||
CardInfoPtr CardDatabase::getCard(const QString &cardName) const
|
||||
{
|
||||
return getCardFromMap(cards, cardName);
|
||||
}
|
||||
|
||||
QList<CardInfo *> CardDatabase::getCards(const QStringList &cardNames) const
|
||||
QList<CardInfoPtr> CardDatabase::getCards(const QStringList &cardNames) const
|
||||
{
|
||||
QList<CardInfo *> cardInfos;
|
||||
foreach (QString cardName, cardNames)
|
||||
cardInfos.append(getCardFromMap(cards, cardName));
|
||||
QList<CardInfoPtr> cardInfos;
|
||||
foreach (QString cardName, cardNames) {
|
||||
CardInfoPtr ptr = getCardFromMap(cards, cardName);
|
||||
if (ptr)
|
||||
cardInfos.append(ptr);
|
||||
}
|
||||
|
||||
return cardInfos;
|
||||
}
|
||||
|
||||
CardInfo *CardDatabase::getCardBySimpleName(const QString &cardName) const
|
||||
CardInfoPtr CardDatabase::getCardBySimpleName(const QString &cardName) const
|
||||
{
|
||||
return getCardFromMap(simpleNameCards, CardInfo::simplifyName(cardName));
|
||||
}
|
||||
|
||||
CardSet *CardDatabase::getSet(const QString &setName)
|
||||
CardSetPtr CardDatabase::getSet(const QString &setName)
|
||||
{
|
||||
if (sets.contains(setName)) {
|
||||
return sets.value(setName);
|
||||
} else {
|
||||
CardSet *newSet = new CardSet(setName);
|
||||
CardSetPtr newSet = CardSet::newInstance(setName);
|
||||
sets.insert(setName, newSet);
|
||||
return newSet;
|
||||
}
|
||||
|
@ -574,7 +612,7 @@ CardSet *CardDatabase::getSet(const QString &setName)
|
|||
SetList CardDatabase::getSetList() const
|
||||
{
|
||||
SetList result;
|
||||
QHashIterator<QString, CardSet *> i(sets);
|
||||
QHashIterator<QString, CardSetPtr> i(sets);
|
||||
while (i.hasNext()) {
|
||||
i.next();
|
||||
result << i.value();
|
||||
|
@ -611,7 +649,7 @@ void CardDatabase::loadSetsFromXml(QXmlStreamReader &xml)
|
|||
}
|
||||
}
|
||||
|
||||
CardSet *newSet = getSet(shortName);
|
||||
CardSetPtr newSet = getSet(shortName);
|
||||
newSet->setLongName(longName);
|
||||
newSet->setSetType(setType);
|
||||
newSet->setReleaseDate(releaseDate);
|
||||
|
@ -729,20 +767,19 @@ void CardDatabase::loadCardsFromXml(QXmlStreamReader &xml)
|
|||
}
|
||||
}
|
||||
|
||||
addCard(new CardInfo(name, isToken, manacost, cmc, type, pt, text, colors, relatedCards,
|
||||
reverseRelatedCards, upsideDown, loyalty, cipt, tableRow, sets, customPicURLs, muids,
|
||||
collectorNumbers, rarities));
|
||||
addCard(CardInfo::newInstance(name, isToken, manacost, cmc, type, pt, text, colors, relatedCards,
|
||||
reverseRelatedCards, upsideDown, loyalty, cipt, tableRow, sets, customPicURLs,
|
||||
muids, collectorNumbers, rarities));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
CardInfo *CardDatabase::getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const
|
||||
CardInfoPtr CardDatabase::getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const
|
||||
{
|
||||
if (cardMap.contains(cardName)) {
|
||||
if (cardMap.contains(cardName))
|
||||
return cardMap.value(cardName);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
return {};
|
||||
}
|
||||
|
||||
LoadStatus CardDatabase::loadFromFile(const QString &fileName)
|
||||
|
@ -806,7 +843,7 @@ bool CardDatabase::saveToFile(const QString &fileName, bool tokens)
|
|||
|
||||
if (!tokens) {
|
||||
xml.writeStartElement("sets");
|
||||
QHashIterator<QString, CardSet *> setIterator(sets);
|
||||
QHashIterator<QString, CardSetPtr> setIterator(sets);
|
||||
while (setIterator.hasNext()) {
|
||||
xml << setIterator.next().value();
|
||||
}
|
||||
|
@ -815,9 +852,9 @@ bool CardDatabase::saveToFile(const QString &fileName, bool tokens)
|
|||
}
|
||||
|
||||
xml.writeStartElement("cards");
|
||||
QHashIterator<QString, CardInfo *> cardIterator(cards);
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
CardInfo *card = cardIterator.next().value();
|
||||
CardInfoPtr card = cardIterator.next().value();
|
||||
if (tokens == card->getIsToken()) {
|
||||
xml << card;
|
||||
}
|
||||
|
@ -868,7 +905,7 @@ LoadStatus CardDatabase::loadCardDatabases()
|
|||
|
||||
// reorder sets (TODO: refactor, this smells)
|
||||
SetList allSets;
|
||||
QHashIterator<QString, CardSet *> setsIterator(sets);
|
||||
QHashIterator<QString, CardSetPtr> setsIterator(sets);
|
||||
while (setsIterator.hasNext()) {
|
||||
allSets.append(setsIterator.next().value());
|
||||
}
|
||||
|
@ -891,10 +928,10 @@ LoadStatus CardDatabase::loadCardDatabases()
|
|||
|
||||
void CardDatabase::refreshCachedReverseRelatedCards()
|
||||
{
|
||||
foreach (CardInfo *card, cards)
|
||||
for (const CardInfoPtr &card : cards)
|
||||
card->resetReverseRelatedCards2Me();
|
||||
|
||||
foreach (CardInfo *card, cards) {
|
||||
for (const CardInfoPtr &card : cards) {
|
||||
if (card->getReverseRelatedCards().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
@ -923,7 +960,7 @@ void CardDatabase::refreshCachedReverseRelatedCards()
|
|||
QStringList CardDatabase::getAllColors() const
|
||||
{
|
||||
QSet<QString> colors;
|
||||
QHashIterator<QString, CardInfo *> cardIterator(cards);
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
const QStringList &cardColors = cardIterator.next().value()->getColors();
|
||||
if (cardColors.isEmpty()) {
|
||||
|
@ -940,7 +977,7 @@ QStringList CardDatabase::getAllColors() const
|
|||
QStringList CardDatabase::getAllMainCardTypes() const
|
||||
{
|
||||
QSet<QString> types;
|
||||
QHashIterator<QString, CardInfo *> cardIterator(cards);
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
types.insert(cardIterator.next().value()->getMainCardType());
|
||||
}
|
||||
|
@ -986,7 +1023,7 @@ void CardDatabase::markAllSetsAsKnown()
|
|||
void CardDatabase::notifyEnabledSetsChanged()
|
||||
{
|
||||
// refresh the list of cached set names
|
||||
foreach (CardInfo *card, cards)
|
||||
for (const CardInfoPtr &card : cards)
|
||||
card->refreshCachedSetNames();
|
||||
|
||||
// inform the carddatabasemodels that they need to re-check their list of cards
|
||||
|
@ -995,7 +1032,7 @@ void CardDatabase::notifyEnabledSetsChanged()
|
|||
|
||||
bool CardDatabase::saveCustomTokensToFile()
|
||||
{
|
||||
CardSet *customTokensSet = getSet(CardDatabase::TOKENS_SETNAME);
|
||||
CardSetPtr customTokensSet = getSet(CardDatabase::TOKENS_SETNAME);
|
||||
QString fileName = settingsCache->getCustomCardDatabasePath() + "/" + CardDatabase::TOKENS_SETNAME + ".xml";
|
||||
QFile file(fileName);
|
||||
if (!file.open(QIODevice::WriteOnly)) {
|
||||
|
@ -1010,9 +1047,9 @@ bool CardDatabase::saveCustomTokensToFile()
|
|||
xml.writeAttribute("version", QString::number(versionNeeded));
|
||||
|
||||
xml.writeStartElement("cards");
|
||||
QHashIterator<QString, CardInfo *> cardIterator(cards);
|
||||
QHashIterator<QString, CardInfoPtr> cardIterator(cards);
|
||||
while (cardIterator.hasNext()) {
|
||||
CardInfo *card = cardIterator.next().value();
|
||||
CardInfoPtr card = cardIterator.next().value();
|
||||
if (card->getSets().contains(customTokensSet)) {
|
||||
xml << card;
|
||||
}
|
||||
|
|
|
@ -7,19 +7,23 @@
|
|||
#include <QHash>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QMetaType>
|
||||
#include <QPixmap>
|
||||
#include <QXmlStreamReader>
|
||||
|
||||
class CardDatabase;
|
||||
class CardInfo;
|
||||
class CardSet;
|
||||
class CardRelation;
|
||||
|
||||
typedef QMap<QString, QString> QStringMap;
|
||||
|
||||
// If we don't typedef this, CardInfo::CardInfo will refuse to compile on OS X < 10.9
|
||||
typedef QMap<QString, int> MuidMap;
|
||||
typedef QSharedPointer<CardInfo> CardInfoPtr;
|
||||
typedef QSharedPointer<CardSet> CardSetPtr;
|
||||
|
||||
class CardSet : public QList<CardInfo *>
|
||||
Q_DECLARE_METATYPE(CardInfoPtr)
|
||||
|
||||
class CardSet : public QList<CardInfoPtr>
|
||||
{
|
||||
private:
|
||||
QString shortName, longName;
|
||||
|
@ -33,6 +37,10 @@ public:
|
|||
const QString &_longName = QString(),
|
||||
const QString &_setType = QString(),
|
||||
const QDate &_releaseDate = QDate());
|
||||
static CardSetPtr newInstance(const QString &_shortName = QString(),
|
||||
const QString &_longName = QString(),
|
||||
const QString &_setType = QString(),
|
||||
const QDate &_releaseDate = QDate());
|
||||
QString getCorrectedShortName() const;
|
||||
QString getShortName() const
|
||||
{
|
||||
|
@ -87,7 +95,7 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class SetList : public QList<CardSet *>
|
||||
class SetList : public QList<CardSetPtr>
|
||||
{
|
||||
private:
|
||||
class KeyCompareFunctor;
|
||||
|
@ -107,6 +115,7 @@ class CardInfo : public QObject
|
|||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
CardInfoPtr smartThis;
|
||||
QString name;
|
||||
|
||||
/*
|
||||
|
@ -167,6 +176,31 @@ public:
|
|||
QStringMap _rarities = QStringMap());
|
||||
~CardInfo() override;
|
||||
|
||||
static CardInfoPtr newInstance(const QString &_name = QString(),
|
||||
bool _isToken = false,
|
||||
const QString &_manacost = QString(),
|
||||
const QString &_cmc = QString(),
|
||||
const QString &_cardtype = QString(),
|
||||
const QString &_powtough = QString(),
|
||||
const QString &_text = QString(),
|
||||
const QStringList &_colors = QStringList(),
|
||||
const QList<CardRelation *> &_relatedCards = QList<CardRelation *>(),
|
||||
const QList<CardRelation *> &_reverseRelatedCards = QList<CardRelation *>(),
|
||||
bool _upsideDownArt = false,
|
||||
int _loyalty = 0,
|
||||
bool _cipt = false,
|
||||
int _tableRow = 0,
|
||||
const SetList &_sets = SetList(),
|
||||
const QStringMap &_customPicURLs = QStringMap(),
|
||||
MuidMap muids = MuidMap(),
|
||||
QStringMap _collectorNumbers = QStringMap(),
|
||||
QStringMap _rarities = QStringMap());
|
||||
|
||||
void setSmartPointer(CardInfoPtr _ptr)
|
||||
{
|
||||
smartThis = _ptr;
|
||||
}
|
||||
|
||||
inline const QString &getName() const
|
||||
{
|
||||
return name;
|
||||
|
@ -219,27 +253,27 @@ public:
|
|||
{
|
||||
return cipt;
|
||||
}
|
||||
// void setManaCost(const QString &_manaCost) { manacost = _manaCost; emit cardInfoChanged(this); }
|
||||
// void setCmc(const QString &_cmc) { cmc = _cmc; emit cardInfoChanged(this); }
|
||||
// void setManaCost(const QString &_manaCost) { manacost = _manaCost; emit cardInfoChanged(smartThis); }
|
||||
// void setCmc(const QString &_cmc) { cmc = _cmc; emit cardInfoChanged(smartThis); }
|
||||
void setCardType(const QString &_cardType)
|
||||
{
|
||||
cardtype = _cardType;
|
||||
emit cardInfoChanged(this);
|
||||
emit cardInfoChanged(smartThis);
|
||||
}
|
||||
void setPowTough(const QString &_powTough)
|
||||
{
|
||||
powtough = _powTough;
|
||||
emit cardInfoChanged(this);
|
||||
emit cardInfoChanged(smartThis);
|
||||
}
|
||||
void setText(const QString &_text)
|
||||
{
|
||||
text = _text;
|
||||
emit cardInfoChanged(this);
|
||||
emit cardInfoChanged(smartThis);
|
||||
}
|
||||
void setColors(const QStringList &_colors)
|
||||
{
|
||||
colors = _colors;
|
||||
emit cardInfoChanged(this);
|
||||
emit cardInfoChanged(smartThis);
|
||||
}
|
||||
const QChar getColorChar() const;
|
||||
const QStringList &getColors() const
|
||||
|
@ -297,7 +331,7 @@ public:
|
|||
{
|
||||
tableRow = _tableRow;
|
||||
}
|
||||
// void setLoyalty(int _loyalty) { loyalty = _loyalty; emit cardInfoChanged(this); }
|
||||
// void setLoyalty(int _loyalty) { loyalty = _loyalty; emit cardInfoChanged(smartThis); }
|
||||
// void setCustomPicURL(const QString &_set, const QString &_customPicURL) { customPicURLs.insert(_set,
|
||||
// _customPicURL); }
|
||||
void setMuId(const QString &_set, const int &_muId)
|
||||
|
@ -312,7 +346,7 @@ public:
|
|||
{
|
||||
rarities.insert(_set, _setNumber);
|
||||
}
|
||||
void addToSet(CardSet *set);
|
||||
void addToSet(CardSetPtr set);
|
||||
void emitPixmapUpdated()
|
||||
{
|
||||
emit pixmapUpdated();
|
||||
|
@ -327,7 +361,7 @@ public:
|
|||
|
||||
signals:
|
||||
void pixmapUpdated();
|
||||
void cardInfoChanged(CardInfo *card);
|
||||
void cardInfoChanged(CardInfoPtr card);
|
||||
};
|
||||
|
||||
enum LoadStatus
|
||||
|
@ -340,8 +374,8 @@ enum LoadStatus
|
|||
NoCards
|
||||
};
|
||||
|
||||
typedef QHash<QString, CardInfo *> CardNameMap;
|
||||
typedef QHash<QString, CardSet *> SetNameMap;
|
||||
typedef QHash<QString, CardInfoPtr> CardNameMap;
|
||||
typedef QHash<QString, CardSetPtr> SetNameMap;
|
||||
|
||||
class CardDatabase : public QObject
|
||||
{
|
||||
|
@ -369,7 +403,7 @@ private:
|
|||
void loadCardsFromXml(QXmlStreamReader &xml);
|
||||
void loadSetsFromXml(QXmlStreamReader &xml);
|
||||
|
||||
CardInfo *getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const;
|
||||
CardInfoPtr getCardFromMap(const CardNameMap &cardMap, const QString &cardName) const;
|
||||
void checkUnknownSets();
|
||||
void refreshCachedReverseRelatedCards();
|
||||
|
||||
|
@ -383,19 +417,19 @@ public:
|
|||
explicit CardDatabase(QObject *parent = nullptr);
|
||||
~CardDatabase() override;
|
||||
void clear();
|
||||
void addCard(CardInfo *card);
|
||||
void removeCard(CardInfo *card);
|
||||
CardInfo *getCard(const QString &cardName) const;
|
||||
QList<CardInfo *> getCards(const QStringList &cardNames) const;
|
||||
void addCard(CardInfoPtr card);
|
||||
void removeCard(CardInfoPtr card);
|
||||
CardInfoPtr getCard(const QString &cardName) const;
|
||||
QList<CardInfoPtr> getCards(const QStringList &cardNames) const;
|
||||
|
||||
/*
|
||||
* Get a card by its simple name. The name will be simplified in this
|
||||
* function, so you don't need to simplify it beforehand.
|
||||
*/
|
||||
CardInfo *getCardBySimpleName(const QString &cardName) const;
|
||||
CardInfoPtr getCardBySimpleName(const QString &cardName) const;
|
||||
|
||||
CardSet *getSet(const QString &setName);
|
||||
QList<CardInfo *> getCardList() const
|
||||
CardSetPtr getSet(const QString &setName);
|
||||
QList<CardInfoPtr> getCardList() const
|
||||
{
|
||||
return cards.values();
|
||||
}
|
||||
|
@ -422,8 +456,8 @@ signals:
|
|||
void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames);
|
||||
void cardDatabaseAllNewSetsEnabled();
|
||||
void cardDatabaseEnabledSetsChanged();
|
||||
void cardAdded(CardInfo *card);
|
||||
void cardRemoved(CardInfo *card);
|
||||
void cardAdded(CardInfoPtr card);
|
||||
void cardRemoved(CardInfoPtr card);
|
||||
};
|
||||
|
||||
class CardRelation : public QObject
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
CardDatabaseModel::CardDatabaseModel(CardDatabase *_db, bool _showOnlyCardsFromEnabledSets, QObject *parent)
|
||||
: QAbstractListModel(parent), db(_db), showOnlyCardsFromEnabledSets(_showOnlyCardsFromEnabledSets)
|
||||
{
|
||||
connect(db, SIGNAL(cardAdded(CardInfo *)), this, SLOT(cardAdded(CardInfo *)));
|
||||
connect(db, SIGNAL(cardRemoved(CardInfo *)), this, SLOT(cardRemoved(CardInfo *)));
|
||||
connect(db, SIGNAL(cardAdded(CardInfoPtr)), this, SLOT(cardAdded(CardInfoPtr)));
|
||||
connect(db, SIGNAL(cardRemoved(CardInfoPtr)), this, SLOT(cardRemoved(CardInfoPtr)));
|
||||
connect(db, SIGNAL(cardDatabaseEnabledSetsChanged()), this, SLOT(cardDatabaseEnabledSetsChanged()));
|
||||
|
||||
cardDatabaseEnabledSetsChanged();
|
||||
|
@ -33,7 +33,7 @@ QVariant CardDatabaseModel::data(const QModelIndex &index, int role) const
|
|||
(role != Qt::DisplayRole && role != SortRole))
|
||||
return QVariant();
|
||||
|
||||
CardInfo *card = cardList.at(index.row());
|
||||
CardInfoPtr card = cardList.at(index.row());
|
||||
switch (index.column()) {
|
||||
case NameColumn:
|
||||
return card->getName();
|
||||
|
@ -77,7 +77,7 @@ QVariant CardDatabaseModel::headerData(int section, Qt::Orientation orientation,
|
|||
}
|
||||
}
|
||||
|
||||
void CardDatabaseModel::cardInfoChanged(CardInfo *card)
|
||||
void CardDatabaseModel::cardInfoChanged(CardInfoPtr card)
|
||||
{
|
||||
const int row = cardList.indexOf(card);
|
||||
if (row == -1)
|
||||
|
@ -86,12 +86,12 @@ void CardDatabaseModel::cardInfoChanged(CardInfo *card)
|
|||
emit dataChanged(index(row, 0), index(row, CARDDBMODEL_COLUMNS - 1));
|
||||
}
|
||||
|
||||
bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(CardInfo *card)
|
||||
bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(CardInfoPtr card)
|
||||
{
|
||||
if (!showOnlyCardsFromEnabledSets)
|
||||
return true;
|
||||
|
||||
foreach (CardSet *set, card->getSets()) {
|
||||
for (CardSetPtr set : card->getSets()) {
|
||||
if (set->getEnabled())
|
||||
return true;
|
||||
}
|
||||
|
@ -102,44 +102,46 @@ bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(CardInfo *card)
|
|||
void CardDatabaseModel::cardDatabaseEnabledSetsChanged()
|
||||
{
|
||||
// remove all the cards no more present in at least one enabled set
|
||||
foreach (CardInfo *card, cardList) {
|
||||
foreach (CardInfoPtr card, cardList) {
|
||||
if (!checkCardHasAtLeastOneEnabledSet(card))
|
||||
cardRemoved(card);
|
||||
}
|
||||
|
||||
// re-check all the card currently not shown, maybe their part of a newly-enabled set
|
||||
foreach (CardInfo *card, db->getCardList()) {
|
||||
foreach (CardInfoPtr card, db->getCardList()) {
|
||||
if (!cardList.contains(card))
|
||||
cardAdded(card);
|
||||
}
|
||||
}
|
||||
|
||||
void CardDatabaseModel::cardAdded(CardInfo *card)
|
||||
void CardDatabaseModel::cardAdded(CardInfoPtr card)
|
||||
{
|
||||
if (checkCardHasAtLeastOneEnabledSet(card)) {
|
||||
// add the card if it's present in at least one enabled set
|
||||
beginInsertRows(QModelIndex(), cardList.size(), cardList.size());
|
||||
cardList.append(card);
|
||||
connect(card, SIGNAL(cardInfoChanged(CardInfo *)), this, SLOT(cardInfoChanged(CardInfo *)));
|
||||
connect(card.data(), SIGNAL(cardInfoChanged(CardInfoPtr)), this, SLOT(cardInfoChanged(CardInfoPtr)));
|
||||
endInsertRows();
|
||||
}
|
||||
}
|
||||
|
||||
void CardDatabaseModel::cardRemoved(CardInfo *card)
|
||||
void CardDatabaseModel::cardRemoved(CardInfoPtr card)
|
||||
{
|
||||
const int row = cardList.indexOf(card);
|
||||
if (row == -1)
|
||||
if (row == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
beginRemoveRows(QModelIndex(), row, row);
|
||||
disconnect(card, 0, this, 0);
|
||||
disconnect(card.data(), nullptr, this, nullptr);
|
||||
card.clear();
|
||||
cardList.removeAt(row);
|
||||
endRemoveRows();
|
||||
}
|
||||
|
||||
CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent) : QSortFilterProxyModel(parent), isToken(ShowAll)
|
||||
{
|
||||
filterTree = NULL;
|
||||
filterTree = nullptr;
|
||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
setSortCaseSensitivity(Qt::CaseInsensitive);
|
||||
|
||||
|
@ -274,7 +276,7 @@ int CardDatabaseDisplayModel::lessThanNumerically(const QString &left, const QSt
|
|||
}
|
||||
bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex & /*sourceParent*/) const
|
||||
{
|
||||
CardInfo const *info = static_cast<CardDatabaseModel *>(sourceModel())->getCard(sourceRow);
|
||||
CardInfoPtr info = static_cast<CardDatabaseModel *>(sourceModel())->getCard(sourceRow);
|
||||
|
||||
if (((isToken == ShowTrue) && !info->getIsToken()) || ((isToken == ShowFalse) && info->getIsToken()))
|
||||
return false;
|
||||
|
@ -282,7 +284,7 @@ bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex
|
|||
return rowMatchesCardName(info);
|
||||
}
|
||||
|
||||
bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfo const *info) const
|
||||
bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfoPtr info) const
|
||||
{
|
||||
if (!cardName.isEmpty() && !info->getName().contains(cardName, Qt::CaseInsensitive))
|
||||
return false;
|
||||
|
@ -290,7 +292,7 @@ bool CardDatabaseDisplayModel::rowMatchesCardName(CardInfo const *info) const
|
|||
if (!cardNameSet.isEmpty() && !cardNameSet.contains(info->getName()))
|
||||
return false;
|
||||
|
||||
if (filterTree != NULL)
|
||||
if (filterTree != nullptr)
|
||||
return filterTree->acceptsCard(info);
|
||||
|
||||
return true;
|
||||
|
@ -302,15 +304,15 @@ void CardDatabaseDisplayModel::clearFilterAll()
|
|||
cardText.clear();
|
||||
cardTypes.clear();
|
||||
cardColors.clear();
|
||||
if (filterTree != NULL)
|
||||
if (filterTree != nullptr)
|
||||
filterTree->clear();
|
||||
invalidateFilter();
|
||||
}
|
||||
|
||||
void CardDatabaseDisplayModel::setFilterTree(FilterTree *filterTree)
|
||||
{
|
||||
if (this->filterTree != NULL)
|
||||
disconnect(this->filterTree, 0, this, 0);
|
||||
if (this->filterTree != nullptr)
|
||||
disconnect(this->filterTree, nullptr, this, nullptr);
|
||||
|
||||
this->filterTree = filterTree;
|
||||
connect(this->filterTree, SIGNAL(changed()), this, SLOT(filterTreeChanged()));
|
||||
|
@ -328,7 +330,7 @@ TokenDisplayModel::TokenDisplayModel(QObject *parent) : CardDatabaseDisplayModel
|
|||
|
||||
bool TokenDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex & /*sourceParent*/) const
|
||||
{
|
||||
CardInfo const *info = static_cast<CardDatabaseModel *>(sourceModel())->getCard(sourceRow);
|
||||
CardInfoPtr info = static_cast<CardDatabaseModel *>(sourceModel())->getCard(sourceRow);
|
||||
return info->getIsToken() && rowMatchesCardName(info);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,21 +36,21 @@ public:
|
|||
{
|
||||
return db;
|
||||
}
|
||||
CardInfo *getCard(int index) const
|
||||
CardInfoPtr getCard(int index) const
|
||||
{
|
||||
return cardList[index];
|
||||
}
|
||||
|
||||
private:
|
||||
QList<CardInfo *> cardList;
|
||||
QList<CardInfoPtr> cardList;
|
||||
CardDatabase *db;
|
||||
bool showOnlyCardsFromEnabledSets;
|
||||
|
||||
inline bool checkCardHasAtLeastOneEnabledSet(CardInfo *card);
|
||||
inline bool checkCardHasAtLeastOneEnabledSet(CardInfoPtr card);
|
||||
private slots:
|
||||
void cardAdded(CardInfo *card);
|
||||
void cardRemoved(CardInfo *card);
|
||||
void cardInfoChanged(CardInfo *card);
|
||||
void cardAdded(CardInfoPtr card);
|
||||
void cardRemoved(CardInfoPtr card);
|
||||
void cardInfoChanged(CardInfoPtr card);
|
||||
void cardDatabaseEnabledSetsChanged();
|
||||
};
|
||||
|
||||
|
@ -122,7 +122,7 @@ protected:
|
|||
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
|
||||
static int lessThanNumerically(const QString &left, const QString &right);
|
||||
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const;
|
||||
bool rowMatchesCardName(CardInfo const *info) const;
|
||||
bool rowMatchesCardName(CardInfoPtr info) const;
|
||||
bool canFetchMore(const QModelIndex &parent) const;
|
||||
void fetchMore(const QModelIndex &parent);
|
||||
private slots:
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "cardframe.h"
|
||||
|
||||
#include "carddatabase.h"
|
||||
#include "cardinfopicture.h"
|
||||
#include "cardinfotext.h"
|
||||
#include "carditem.h"
|
||||
|
@ -88,16 +87,16 @@ void CardFrame::setViewMode(int mode)
|
|||
settingsCache->setCardInfoViewMode(mode);
|
||||
}
|
||||
|
||||
void CardFrame::setCard(CardInfo *card)
|
||||
void CardFrame::setCard(CardInfoPtr card)
|
||||
{
|
||||
if (info) {
|
||||
disconnect(info, nullptr, this, nullptr);
|
||||
disconnect(info.data(), nullptr, this, nullptr);
|
||||
}
|
||||
|
||||
info = card;
|
||||
|
||||
if (info) {
|
||||
connect(info, SIGNAL(destroyed()), this, SLOT(clear()));
|
||||
connect(info.data(), SIGNAL(destroyed()), this, SLOT(clear()));
|
||||
}
|
||||
|
||||
text->setCard(info);
|
||||
|
@ -118,5 +117,5 @@ void CardFrame::setCard(AbstractCardItem *card)
|
|||
|
||||
void CardFrame::clear()
|
||||
{
|
||||
setCard((CardInfo *)nullptr);
|
||||
setCard((CardInfoPtr) nullptr);
|
||||
}
|
||||
|
|
|
@ -3,8 +3,9 @@
|
|||
|
||||
#include <QTabWidget>
|
||||
|
||||
#include "carddatabase.h"
|
||||
|
||||
class AbstractCardItem;
|
||||
class CardInfo;
|
||||
class CardInfoPicture;
|
||||
class CardInfoText;
|
||||
class QVBoxLayout;
|
||||
|
@ -14,7 +15,7 @@ class CardFrame : public QTabWidget
|
|||
{
|
||||
Q_OBJECT
|
||||
private:
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
CardInfoPicture *pic;
|
||||
CardInfoText *text;
|
||||
bool cardTextOnly;
|
||||
|
@ -33,7 +34,7 @@ public:
|
|||
void retranslateUi();
|
||||
|
||||
public slots:
|
||||
void setCard(CardInfo *card);
|
||||
void setCard(CardInfoPtr card);
|
||||
void setCard(const QString &cardName);
|
||||
void setCard(AbstractCardItem *card);
|
||||
void clear();
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
#include <QStyle>
|
||||
#include <QWidget>
|
||||
|
||||
#include "carddatabase.h"
|
||||
#include "carditem.h"
|
||||
#include "main.h"
|
||||
#include "pictureloader.h"
|
||||
|
@ -14,16 +13,16 @@ CardInfoPicture::CardInfoPicture(QWidget *parent) : QWidget(parent), info(nullpt
|
|||
setMinimumHeight(100);
|
||||
}
|
||||
|
||||
void CardInfoPicture::setCard(CardInfo *card)
|
||||
void CardInfoPicture::setCard(CardInfoPtr card)
|
||||
{
|
||||
if (info) {
|
||||
disconnect(info, nullptr, this, nullptr);
|
||||
disconnect(info.data(), nullptr, this, nullptr);
|
||||
}
|
||||
|
||||
info = card;
|
||||
|
||||
if (info) {
|
||||
connect(info, SIGNAL(pixmapUpdated()), this, SLOT(updatePixmap()));
|
||||
connect(info.data(), SIGNAL(pixmapUpdated()), this, SLOT(updatePixmap()));
|
||||
}
|
||||
|
||||
updatePixmap();
|
||||
|
|
|
@ -3,15 +3,16 @@
|
|||
|
||||
#include <QWidget>
|
||||
|
||||
#include "carddatabase.h"
|
||||
|
||||
class AbstractCardItem;
|
||||
class CardInfo;
|
||||
|
||||
class CardInfoPicture : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
private:
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
QPixmap resizedPixmap;
|
||||
bool pixmapDirty;
|
||||
|
||||
|
@ -23,7 +24,7 @@ protected:
|
|||
void paintEvent(QPaintEvent *);
|
||||
void loadPixmap();
|
||||
public slots:
|
||||
void setCard(CardInfo *card);
|
||||
void setCard(CardInfoPtr card);
|
||||
void updatePixmap();
|
||||
};
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "cardinfotext.h"
|
||||
|
||||
#include "carddatabase.h"
|
||||
#include "carditem.h"
|
||||
#include "main.h"
|
||||
#include <QGridLayout>
|
||||
|
@ -56,7 +55,7 @@ CardInfoText::CardInfoText(QWidget *parent) : QFrame(parent), info(nullptr)
|
|||
retranslateUi();
|
||||
}
|
||||
|
||||
void CardInfoText::setCard(CardInfo *card)
|
||||
void CardInfoText::setCard(CardInfoPtr card)
|
||||
{
|
||||
if (card) {
|
||||
nameLabel2->setText(card->getName());
|
||||
|
|
|
@ -3,9 +3,9 @@
|
|||
|
||||
#include <QFrame>
|
||||
|
||||
#include "carddatabase.h"
|
||||
class QLabel;
|
||||
class QTextEdit;
|
||||
class CardInfo;
|
||||
|
||||
class CardInfoText : public QFrame
|
||||
{
|
||||
|
@ -20,14 +20,14 @@ private:
|
|||
QLabel *loyaltyLabel1, *loyaltyLabel2;
|
||||
QTextEdit *textLabel;
|
||||
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
|
||||
public:
|
||||
CardInfoText(QWidget *parent = 0);
|
||||
void retranslateUi();
|
||||
|
||||
public slots:
|
||||
void setCard(CardInfo *card);
|
||||
void setCard(CardInfoPtr card);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include "cardinfowidget.h"
|
||||
#include "carddatabase.h"
|
||||
#include "cardinfopicture.h"
|
||||
#include "cardinfotext.h"
|
||||
#include "carditem.h"
|
||||
|
@ -38,13 +37,13 @@ CardInfoWidget::CardInfoWidget(const QString &cardName, QWidget *parent, Qt::Win
|
|||
resize(width(), sizeHint().height());
|
||||
}
|
||||
|
||||
void CardInfoWidget::setCard(CardInfo *card)
|
||||
void CardInfoWidget::setCard(CardInfoPtr card)
|
||||
{
|
||||
if (info)
|
||||
disconnect(info, nullptr, this, nullptr);
|
||||
disconnect(info.data(), nullptr, this, nullptr);
|
||||
info = card;
|
||||
if (info)
|
||||
connect(info, SIGNAL(destroyed()), this, SLOT(clear()));
|
||||
connect(info.data(), SIGNAL(destroyed()), this, SLOT(clear()));
|
||||
|
||||
text->setCard(info);
|
||||
pic->setCard(info);
|
||||
|
@ -62,5 +61,5 @@ void CardInfoWidget::setCard(AbstractCardItem *card)
|
|||
|
||||
void CardInfoWidget::clear()
|
||||
{
|
||||
setCard((CardInfo *)nullptr);
|
||||
setCard((CardInfoPtr) nullptr);
|
||||
}
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
#include <QFrame>
|
||||
#include <QStringList>
|
||||
|
||||
class CardInfo;
|
||||
#include "carddatabase.h"
|
||||
|
||||
class CardInfoPicture;
|
||||
class CardInfoText;
|
||||
class AbstractCardItem;
|
||||
|
@ -16,7 +17,7 @@ class CardInfoWidget : public QFrame
|
|||
|
||||
private:
|
||||
qreal aspectRatio;
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
CardInfoPicture *pic;
|
||||
CardInfoText *text;
|
||||
|
||||
|
@ -24,7 +25,7 @@ public:
|
|||
CardInfoWidget(const QString &cardName, QWidget *parent = 0, Qt::WindowFlags f = 0);
|
||||
|
||||
public slots:
|
||||
void setCard(CardInfo *card);
|
||||
void setCard(CardInfoPtr card);
|
||||
void setCard(const QString &cardName);
|
||||
void setCard(AbstractCardItem *card);
|
||||
|
||||
|
|
|
@ -120,7 +120,7 @@ struct FormatDeckListForExport
|
|||
void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const
|
||||
{
|
||||
// Get the card name
|
||||
CardInfo *dbCard = db->getCard(card->getName());
|
||||
CardInfoPtr dbCard = db->getCard(card->getName());
|
||||
if (!dbCard || dbCard->getIsToken()) {
|
||||
// If it's a token, we don't care about the card.
|
||||
return;
|
||||
|
@ -223,7 +223,7 @@ void DeckLoader::saveToStream_DeckZone(QTextStream &out, const InnerDecklistNode
|
|||
for (int j = 0; j < zoneNode->size(); j++) {
|
||||
auto *card = dynamic_cast<DecklistCardNode *>(zoneNode->at(j));
|
||||
|
||||
CardInfo *info = db->getCard(card->getName());
|
||||
CardInfoPtr info = db->getCard(card->getName());
|
||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
||||
|
||||
cardsByType.insert(cardType, card);
|
||||
|
@ -276,7 +276,7 @@ void DeckLoader::saveToStream_DeckZoneCards(QTextStream &out,
|
|||
|
||||
QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneName)
|
||||
{
|
||||
CardInfo *card = db->getCard(cardName);
|
||||
CardInfoPtr card = db->getCard(cardName);
|
||||
|
||||
if (card && card->getIsToken()) {
|
||||
return DECK_ZONE_TOKENS;
|
||||
|
@ -288,7 +288,7 @@ QString DeckLoader::getCardZoneFromName(QString cardName, QString currentZoneNam
|
|||
QString DeckLoader::getCompleteCardName(const QString cardName) const
|
||||
{
|
||||
if (db) {
|
||||
CardInfo *temp = db->getCardBySimpleName(cardName);
|
||||
CardInfoPtr temp = db->getCardBySimpleName(cardName);
|
||||
if (temp) {
|
||||
return temp->getName();
|
||||
}
|
||||
|
|
|
@ -47,7 +47,7 @@ void DeckListModel::rebuildTree()
|
|||
continue;
|
||||
}
|
||||
|
||||
CardInfo *info = db->getCard(currentCard->getName());
|
||||
CardInfoPtr info = db->getCard(currentCard->getName());
|
||||
QString cardType = info ? info->getMainCardType() : "unknown";
|
||||
|
||||
auto *cardTypeNode = dynamic_cast<InnerDecklistNode *>(node->findChild(cardType));
|
||||
|
@ -276,7 +276,7 @@ InnerDecklistNode *DeckListModel::createNodeIfNeeded(const QString &name, InnerD
|
|||
DecklistModelCardNode *DeckListModel::findCardNode(const QString &cardName, const QString &zoneName) const
|
||||
{
|
||||
InnerDecklistNode *zoneNode, *typeNode;
|
||||
CardInfo *info;
|
||||
CardInfoPtr info;
|
||||
QString cardType;
|
||||
|
||||
zoneNode = dynamic_cast<InnerDecklistNode *>(root->findChild(zoneName));
|
||||
|
@ -312,16 +312,16 @@ QModelIndex DeckListModel::findCard(const QString &cardName, const QString &zone
|
|||
|
||||
QModelIndex DeckListModel::addCard(const QString &cardName, const QString &zoneName, bool abAddAnyway)
|
||||
{
|
||||
CardInfo *info = db->getCard(cardName);
|
||||
CardInfoPtr info = db->getCard(cardName);
|
||||
if (info == nullptr) {
|
||||
if (abAddAnyway) {
|
||||
// We need to keep this card added no matter what
|
||||
// This is usually called from tab_deck_editor
|
||||
// So we'll create a new CardInfo with the name
|
||||
// and default values for all fields
|
||||
info = new CardInfo(cardName, false, nullptr, nullptr, "unknown", nullptr, nullptr, QStringList(),
|
||||
QList<CardRelation *>(), QList<CardRelation *>(), false, 0, false, 0, SetList(),
|
||||
QStringMap(), MuidMap(), QStringMap(), QStringMap());
|
||||
info = CardInfo::newInstance(cardName, false, nullptr, nullptr, "unknown", nullptr, nullptr, QStringList(),
|
||||
QList<CardRelation *>(), QList<CardRelation *>(), false, 0, false, 0,
|
||||
SetList(), QStringMap(), MuidMap(), QStringMap(), QStringMap());
|
||||
} else {
|
||||
return {};
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ struct CopyIfNotAToken
|
|||
|
||||
void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const
|
||||
{
|
||||
CardInfo *dbCard = cardDatabase.getCard(card->getName());
|
||||
CardInfoPtr dbCard = cardDatabase.getCard(card->getName());
|
||||
if (dbCard && !dbCard->getIsToken()) {
|
||||
DecklistCardNode *addedCard = destination.addCard(card->getName(), node->getName());
|
||||
addedCard->setNumber(card->getNumber());
|
||||
|
|
|
@ -144,9 +144,14 @@ void DlgCreateToken::closeEvent(QCloseEvent *event)
|
|||
void DlgCreateToken::tokenSelectionChanged(const QModelIndex ¤t, const QModelIndex & /*previous*/)
|
||||
{
|
||||
const QModelIndex realIndex = cardDatabaseDisplayModel->mapToSource(current);
|
||||
CardInfo *cardInfo = current.row() >= 0 ? cardDatabaseModel->getCard(realIndex.row()) : 0;
|
||||
|
||||
if (cardInfo) {
|
||||
CardInfoPtr cardInfo;
|
||||
|
||||
if (current.row() >= 0) {
|
||||
cardInfo = cardDatabaseModel->getCard(realIndex.row());
|
||||
}
|
||||
|
||||
if (!cardInfo) {
|
||||
updateSearchFieldWithoutUpdatingFilter(cardInfo->getName());
|
||||
const QChar cardColor = cardInfo->getColorChar();
|
||||
colorEdit->setCurrentIndex(colorEdit->findData(cardColor, Qt::UserRole, Qt::MatchFixedString));
|
||||
|
|
|
@ -116,9 +116,14 @@ DlgEditTokens::DlgEditTokens(QWidget *parent) : QDialog(parent), currentCard(0)
|
|||
void DlgEditTokens::tokenSelectionChanged(const QModelIndex ¤t, const QModelIndex & /* previous */)
|
||||
{
|
||||
const QModelIndex realIndex = cardDatabaseDisplayModel->mapToSource(current);
|
||||
currentCard = current.row() >= 0 ? databaseModel->getCard(realIndex.row()) : 0;
|
||||
|
||||
if (currentCard) {
|
||||
if (current.row() >= 0) {
|
||||
currentCard = databaseModel->getCard(realIndex.row());
|
||||
} else {
|
||||
currentCard.clear();
|
||||
}
|
||||
|
||||
if (!currentCard) {
|
||||
nameEdit->setText(currentCard->getName());
|
||||
const QChar cardColor = currentCard->getColorChar();
|
||||
colorEdit->setCurrentIndex(colorEdit->findData(cardColor, Qt::UserRole, Qt::MatchFixedString));
|
||||
|
@ -149,7 +154,7 @@ void DlgEditTokens::actAddToken()
|
|||
}
|
||||
} while (askAgain);
|
||||
|
||||
CardInfo *card = new CardInfo(name, true);
|
||||
CardInfoPtr card = CardInfo::newInstance(name, true);
|
||||
card->addToSet(databaseModel->getDatabase()->getSet(CardDatabase::TOKENS_SETNAME));
|
||||
card->setCardType("Token");
|
||||
databaseModel->getDatabase()->addCard(card);
|
||||
|
@ -158,10 +163,9 @@ void DlgEditTokens::actAddToken()
|
|||
void DlgEditTokens::actRemoveToken()
|
||||
{
|
||||
if (currentCard) {
|
||||
CardInfo *cardToRemove = currentCard; // the currentCard property gets modified during db->removeCard()
|
||||
currentCard = 0;
|
||||
CardInfoPtr cardToRemove = currentCard; // the currentCard property gets modified during db->removeCard()
|
||||
currentCard.clear();
|
||||
databaseModel->getDatabase()->removeCard(cardToRemove);
|
||||
delete cardToRemove;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef DLG_EDIT_TOKENS_H
|
||||
#define DLG_EDIT_TOKENS_H
|
||||
|
||||
#include "carddatabase.h"
|
||||
#include <QDialog>
|
||||
|
||||
class QModelIndex;
|
||||
|
@ -10,7 +11,6 @@ class QLabel;
|
|||
class QComboBox;
|
||||
class QLineEdit;
|
||||
class QTreeView;
|
||||
class CardInfo;
|
||||
|
||||
class DlgEditTokens : public QDialog
|
||||
{
|
||||
|
@ -25,7 +25,7 @@ private slots:
|
|||
void actRemoveToken();
|
||||
|
||||
private:
|
||||
CardInfo *currentCard;
|
||||
CardInfoPtr currentCard;
|
||||
CardDatabaseModel *databaseModel;
|
||||
TokenDisplayModel *cardDatabaseDisplayModel;
|
||||
QStringList predefinedTokens;
|
||||
|
@ -35,7 +35,7 @@ private:
|
|||
QTreeView *chooseTokenView;
|
||||
|
||||
public:
|
||||
DlgEditTokens(QWidget *parent = 0);
|
||||
DlgEditTokens(QWidget *parent = nullptr);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
#include "filtertree.h"
|
||||
#include "carddatabase.h"
|
||||
#include "cardfilter.h"
|
||||
|
||||
#include <QList>
|
||||
|
@ -100,7 +99,7 @@ FilterTreeNode *FilterItemList::termNode(const QString &term)
|
|||
return childNodes.at(i);
|
||||
}
|
||||
|
||||
bool FilterItemList::testTypeAnd(const CardInfo *info, CardFilter::Attr attr) const
|
||||
bool FilterItemList::testTypeAnd(const CardInfoPtr info, CardFilter::Attr attr) const
|
||||
{
|
||||
for (auto i = childNodes.constBegin(); i != childNodes.constEnd(); i++) {
|
||||
if (!(*i)->isEnabled()) {
|
||||
|
@ -115,13 +114,13 @@ bool FilterItemList::testTypeAnd(const CardInfo *info, CardFilter::Attr attr) co
|
|||
return true;
|
||||
}
|
||||
|
||||
bool FilterItemList::testTypeAndNot(const CardInfo *info, CardFilter::Attr attr) const
|
||||
bool FilterItemList::testTypeAndNot(const CardInfoPtr info, CardFilter::Attr attr) const
|
||||
{
|
||||
// if any one in the list is true, return false
|
||||
return !testTypeOr(info, attr);
|
||||
}
|
||||
|
||||
bool FilterItemList::testTypeOr(const CardInfo *info, CardFilter::Attr attr) const
|
||||
bool FilterItemList::testTypeOr(const CardInfoPtr info, CardFilter::Attr attr) const
|
||||
{
|
||||
bool noChildEnabledChild = true;
|
||||
|
||||
|
@ -142,23 +141,23 @@ bool FilterItemList::testTypeOr(const CardInfo *info, CardFilter::Attr attr) con
|
|||
return noChildEnabledChild;
|
||||
}
|
||||
|
||||
bool FilterItemList::testTypeOrNot(const CardInfo *info, CardFilter::Attr attr) const
|
||||
bool FilterItemList::testTypeOrNot(const CardInfoPtr info, CardFilter::Attr attr) const
|
||||
{
|
||||
// if any one in the list is false, return true
|
||||
return !testTypeAnd(info, attr);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptName(const CardInfo *info) const
|
||||
bool FilterItem::acceptName(const CardInfoPtr info) const
|
||||
{
|
||||
return info->getName().contains(term, Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptType(const CardInfo *info) const
|
||||
bool FilterItem::acceptType(const CardInfoPtr info) const
|
||||
{
|
||||
return info->getCardType().contains(term, Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptColor(const CardInfo *info) const
|
||||
bool FilterItem::acceptColor(const CardInfoPtr info) const
|
||||
{
|
||||
QString converted_term = term.trimmed();
|
||||
|
||||
|
@ -198,12 +197,12 @@ bool FilterItem::acceptColor(const CardInfo *info) const
|
|||
return match_count == converted_term.length();
|
||||
}
|
||||
|
||||
bool FilterItem::acceptText(const CardInfo *info) const
|
||||
bool FilterItem::acceptText(const CardInfoPtr info) const
|
||||
{
|
||||
return info->getText().contains(term, Qt::CaseInsensitive);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptSet(const CardInfo *info) const
|
||||
bool FilterItem::acceptSet(const CardInfoPtr info) const
|
||||
{
|
||||
bool status = false;
|
||||
for (auto i = info->getSets().constBegin(); i != info->getSets().constEnd(); i++) {
|
||||
|
@ -217,7 +216,7 @@ bool FilterItem::acceptSet(const CardInfo *info) const
|
|||
return status;
|
||||
}
|
||||
|
||||
bool FilterItem::acceptManaCost(const CardInfo *info) const
|
||||
bool FilterItem::acceptManaCost(const CardInfoPtr info) const
|
||||
{
|
||||
QString partialCost = term.toUpper();
|
||||
QString fullManaCost = info->getManaCost();
|
||||
|
@ -230,24 +229,24 @@ bool FilterItem::acceptManaCost(const CardInfo *info) const
|
|||
return (fullManaCost.indexOf(partialCost) > -1);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptCmc(const CardInfo *info) const
|
||||
bool FilterItem::acceptCmc(const CardInfoPtr info) const
|
||||
{
|
||||
return (info->getCmc() == term);
|
||||
}
|
||||
|
||||
bool FilterItem::acceptPower(const CardInfo *info) const
|
||||
bool FilterItem::acceptPower(const CardInfoPtr info) const
|
||||
{
|
||||
int slash = info->getPowTough().indexOf("/");
|
||||
return (slash != -1) ? (info->getPowTough().mid(0, slash) == term) : false;
|
||||
}
|
||||
|
||||
bool FilterItem::acceptToughness(const CardInfo *info) const
|
||||
bool FilterItem::acceptToughness(const CardInfoPtr info) const
|
||||
{
|
||||
int slash = info->getPowTough().indexOf("/");
|
||||
return (slash != -1) ? (info->getPowTough().mid(slash + 1) == term) : false;
|
||||
}
|
||||
|
||||
bool FilterItem::acceptRarity(const CardInfo *info) const
|
||||
bool FilterItem::acceptRarity(const CardInfoPtr info) const
|
||||
{
|
||||
QString converted_term = term.trimmed();
|
||||
|
||||
|
@ -296,7 +295,7 @@ bool FilterItem::acceptRarity(const CardInfo *info) const
|
|||
return false;
|
||||
}
|
||||
|
||||
bool FilterItem::acceptCardAttr(const CardInfo *info, CardFilter::Attr attr) const
|
||||
bool FilterItem::acceptCardAttr(const CardInfoPtr info, CardFilter::Attr attr) const
|
||||
{
|
||||
switch (attr) {
|
||||
case CardFilter::AttrName:
|
||||
|
@ -383,7 +382,7 @@ FilterTreeNode *FilterTree::attrTypeNode(CardFilter::Attr attr, CardFilter::Type
|
|||
return attrTypeList(attr, type);
|
||||
}
|
||||
|
||||
bool FilterTree::testAttr(const CardInfo *info, const LogicMap *lm) const
|
||||
bool FilterTree::testAttr(const CardInfoPtr info, const LogicMap *lm) const
|
||||
{
|
||||
const FilterItemList *fil;
|
||||
bool status = true;
|
||||
|
@ -416,7 +415,7 @@ bool FilterTree::testAttr(const CardInfo *info, const LogicMap *lm) const
|
|||
return status;
|
||||
}
|
||||
|
||||
bool FilterTree::acceptsCard(const CardInfo *info) const
|
||||
bool FilterTree::acceptsCard(const CardInfoPtr info) const
|
||||
{
|
||||
for (auto i = childNodes.constBegin(); i != childNodes.constEnd(); i++) {
|
||||
if ((*i)->isEnabled() && !testAttr(info, *i)) {
|
||||
|
|
|
@ -5,10 +5,9 @@
|
|||
#include <QMap>
|
||||
#include <QObject>
|
||||
|
||||
#include "carddatabase.h"
|
||||
#include "cardfilter.h"
|
||||
|
||||
class CardInfo;
|
||||
|
||||
class FilterTreeNode
|
||||
{
|
||||
private:
|
||||
|
@ -160,10 +159,10 @@ public:
|
|||
return CardFilter::typeName(type);
|
||||
}
|
||||
|
||||
bool testTypeAnd(const CardInfo *info, CardFilter::Attr attr) const;
|
||||
bool testTypeAndNot(const CardInfo *info, CardFilter::Attr attr) const;
|
||||
bool testTypeOr(const CardInfo *info, CardFilter::Attr attr) const;
|
||||
bool testTypeOrNot(const CardInfo *info, CardFilter::Attr attr) const;
|
||||
bool testTypeAnd(const CardInfoPtr info, CardFilter::Attr attr) const;
|
||||
bool testTypeAndNot(const CardInfoPtr info, CardFilter::Attr attr) const;
|
||||
bool testTypeOr(const CardInfoPtr info, CardFilter::Attr attr) const;
|
||||
bool testTypeOrNot(const CardInfoPtr info, CardFilter::Attr attr) const;
|
||||
};
|
||||
|
||||
class FilterItem : public FilterTreeNode
|
||||
|
@ -204,17 +203,17 @@ public:
|
|||
return true;
|
||||
}
|
||||
|
||||
bool acceptName(const CardInfo *info) const;
|
||||
bool acceptType(const CardInfo *info) const;
|
||||
bool acceptColor(const CardInfo *info) const;
|
||||
bool acceptText(const CardInfo *info) const;
|
||||
bool acceptSet(const CardInfo *info) const;
|
||||
bool acceptManaCost(const CardInfo *info) const;
|
||||
bool acceptCmc(const CardInfo *info) const;
|
||||
bool acceptPower(const CardInfo *info) const;
|
||||
bool acceptToughness(const CardInfo *info) const;
|
||||
bool acceptRarity(const CardInfo *info) const;
|
||||
bool acceptCardAttr(const CardInfo *info, CardFilter::Attr attr) const;
|
||||
bool acceptName(const CardInfoPtr info) const;
|
||||
bool acceptType(const CardInfoPtr info) const;
|
||||
bool acceptColor(const CardInfoPtr info) const;
|
||||
bool acceptText(const CardInfoPtr info) const;
|
||||
bool acceptSet(const CardInfoPtr info) const;
|
||||
bool acceptManaCost(const CardInfoPtr info) const;
|
||||
bool acceptCmc(const CardInfoPtr info) const;
|
||||
bool acceptPower(const CardInfoPtr info) const;
|
||||
bool acceptToughness(const CardInfoPtr info) const;
|
||||
bool acceptRarity(const CardInfoPtr info) const;
|
||||
bool acceptCardAttr(const CardInfoPtr info, CardFilter::Attr attr) const;
|
||||
};
|
||||
|
||||
class FilterTree : public QObject, public FilterTreeBranch<LogicMap *>
|
||||
|
@ -232,7 +231,7 @@ private:
|
|||
LogicMap *attrLogicMap(CardFilter::Attr attr);
|
||||
FilterItemList *attrTypeList(CardFilter::Attr attr, CardFilter::Type type);
|
||||
|
||||
bool testAttr(const CardInfo *info, const LogicMap *lm) const;
|
||||
bool testAttr(const CardInfoPtr info, const LogicMap *lm) const;
|
||||
|
||||
void nodeChanged() const
|
||||
{
|
||||
|
@ -272,7 +271,7 @@ public:
|
|||
return 0;
|
||||
}
|
||||
|
||||
bool acceptsCard(const CardInfo *info) const;
|
||||
bool acceptsCard(const CardInfoPtr info) const;
|
||||
void clear();
|
||||
};
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <QSvgRenderer>
|
||||
#include <QThread>
|
||||
#include <QUrl>
|
||||
#include <utility>
|
||||
|
||||
// never cache more than 300 cards at once for a single deck
|
||||
#define CACHED_CARD_PER_DECK_MAX 300
|
||||
|
@ -32,29 +33,17 @@ public:
|
|||
* Enabled sets have priority over disabled sets
|
||||
* Both groups follows the user-defined order
|
||||
*/
|
||||
inline bool operator()(CardSet *a, CardSet *b) const
|
||||
inline bool operator()(const CardSetPtr &a, const CardSetPtr &b) const
|
||||
{
|
||||
if (a->getEnabled()) {
|
||||
if (b->getEnabled()) {
|
||||
// both enabled: sort by key
|
||||
return a->getSortKey() < b->getSortKey();
|
||||
return !b->getEnabled() || a->getSortKey() < b->getSortKey();
|
||||
} else {
|
||||
// only a enabled
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
if (b->getEnabled()) {
|
||||
// only b enabled
|
||||
return false;
|
||||
} else {
|
||||
// both disabled: sort by key
|
||||
return a->getSortKey() < b->getSortKey();
|
||||
}
|
||||
return !b->getEnabled() && a->getSortKey() < b->getSortKey();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
PictureToLoad::PictureToLoad(CardInfo *_card) : card(_card), setIndex(0)
|
||||
PictureToLoad::PictureToLoad(CardInfoPtr _card) : card(std::move(_card)), setIndex(0)
|
||||
{
|
||||
if (card) {
|
||||
sortedSets = card->getSets();
|
||||
|
@ -78,18 +67,18 @@ QString PictureToLoad::getSetName() const
|
|||
return QString("");
|
||||
}
|
||||
|
||||
CardSet *PictureToLoad::getCurrentSet() const
|
||||
CardSetPtr PictureToLoad::getCurrentSet() const
|
||||
{
|
||||
if (setIndex < sortedSets.size())
|
||||
return sortedSets[setIndex];
|
||||
else
|
||||
return 0;
|
||||
return {};
|
||||
}
|
||||
|
||||
QStringList PictureLoaderWorker::md5Blacklist =
|
||||
QStringList() << "db0c48db407a907c16ade38de048a441"; // card back returned by gatherer when card is not found
|
||||
|
||||
PictureLoaderWorker::PictureLoaderWorker() : QObject(0), downloadRunning(false), loadQueueRunning(false)
|
||||
PictureLoaderWorker::PictureLoaderWorker() : QObject(nullptr), downloadRunning(false), loadQueueRunning(false)
|
||||
{
|
||||
picsPath = settingsCache->getPicsPath();
|
||||
customPicsPath = settingsCache->getCustomPicsPath();
|
||||
|
@ -140,7 +129,7 @@ void PictureLoaderWorker::processLoadQueue()
|
|||
if (picDownload) {
|
||||
qDebug() << "Picture NOT found, trying to download (set: " << setName << " card: " << cardName << ")";
|
||||
cardsToDownload.append(cardBeingLoaded);
|
||||
cardBeingLoaded = 0;
|
||||
cardBeingLoaded.clear();
|
||||
if (!downloadRunning)
|
||||
startNextPicDownload();
|
||||
} else {
|
||||
|
@ -149,7 +138,7 @@ void PictureLoaderWorker::processLoadQueue()
|
|||
<< " card: " << cardName << ")";
|
||||
mutex.lock();
|
||||
loadQueue.prepend(cardBeingLoaded);
|
||||
cardBeingLoaded = 0;
|
||||
cardBeingLoaded.clear();
|
||||
mutex.unlock();
|
||||
} else {
|
||||
qDebug() << "Picture NOT found, download disabled, no more sets to try: BAILING OUT (oldset: "
|
||||
|
@ -213,8 +202,8 @@ QString PictureLoaderWorker::getPicUrl()
|
|||
if (!picDownload)
|
||||
return QString();
|
||||
|
||||
CardInfo *card = cardBeingDownloaded.getCard();
|
||||
CardSet *set = cardBeingDownloaded.getCurrentSet();
|
||||
CardInfoPtr card = cardBeingDownloaded.getCard();
|
||||
CardSetPtr set = cardBeingDownloaded.getCurrentSet();
|
||||
QString picUrl = QString("");
|
||||
|
||||
// if sets have been defined for the card, they can contain custom picUrls
|
||||
|
@ -258,7 +247,7 @@ QString PictureLoaderWorker::getPicUrl()
|
|||
void PictureLoaderWorker::startNextPicDownload()
|
||||
{
|
||||
if (cardsToDownload.isEmpty()) {
|
||||
cardBeingDownloaded = 0;
|
||||
cardBeingDownloaded.clear();
|
||||
downloadRunning = false;
|
||||
return;
|
||||
}
|
||||
|
@ -292,7 +281,7 @@ void PictureLoaderWorker::picDownloadFailed()
|
|||
qDebug() << "Picture NOT found, download failed, no more sets to try: BAILING OUT (oldset: "
|
||||
<< cardBeingDownloaded.getSetName() << " card: " << cardBeingDownloaded.getCard()->getName() << ")";
|
||||
imageLoaded(cardBeingDownloaded.getCard(), QImage());
|
||||
cardBeingDownloaded = 0;
|
||||
cardBeingDownloaded.clear();
|
||||
}
|
||||
emit startLoadQueue();
|
||||
}
|
||||
|
@ -364,7 +353,7 @@ void PictureLoaderWorker::picDownloadFinished(QNetworkReply *reply)
|
|||
startNextPicDownload();
|
||||
}
|
||||
|
||||
void PictureLoaderWorker::enqueueImageLoad(CardInfo *card)
|
||||
void PictureLoaderWorker::enqueueImageLoad(CardInfoPtr card)
|
||||
{
|
||||
QMutexLocker locker(&mutex);
|
||||
|
||||
|
@ -405,8 +394,8 @@ PictureLoader::PictureLoader() : QObject(0)
|
|||
connect(settingsCache, SIGNAL(picsPathChanged()), this, SLOT(picsPathChanged()));
|
||||
connect(settingsCache, SIGNAL(picDownloadChanged()), this, SLOT(picDownloadChanged()));
|
||||
|
||||
connect(worker, SIGNAL(imageLoaded(CardInfo *, const QImage &)), this,
|
||||
SLOT(imageLoaded(CardInfo *, const QImage &)));
|
||||
connect(worker, SIGNAL(imageLoaded(CardInfoPtr, const QImage &)), this,
|
||||
SLOT(imageLoaded(CardInfoPtr, const QImage &)));
|
||||
}
|
||||
|
||||
PictureLoader::~PictureLoader()
|
||||
|
@ -424,7 +413,7 @@ void PictureLoader::getCardBackPixmap(QPixmap &pixmap, QSize size)
|
|||
}
|
||||
}
|
||||
|
||||
void PictureLoader::getPixmap(QPixmap &pixmap, CardInfo *card, QSize size)
|
||||
void PictureLoader::getPixmap(QPixmap &pixmap, CardInfoPtr card, QSize size)
|
||||
{
|
||||
if (card == nullptr)
|
||||
return;
|
||||
|
@ -447,7 +436,7 @@ void PictureLoader::getPixmap(QPixmap &pixmap, CardInfo *card, QSize size)
|
|||
getInstance().worker->enqueueImageLoad(card);
|
||||
}
|
||||
|
||||
void PictureLoader::imageLoaded(CardInfo *card, const QImage &image)
|
||||
void PictureLoader::imageLoaded(CardInfoPtr card, const QImage &image)
|
||||
{
|
||||
if (image.isNull()) {
|
||||
QPixmapCache::insert(card->getPixmapCacheKey(), QPixmap());
|
||||
|
@ -463,7 +452,7 @@ void PictureLoader::imageLoaded(CardInfo *card, const QImage &image)
|
|||
card->emitPixmapUpdated();
|
||||
}
|
||||
|
||||
void PictureLoader::clearPixmapCache(CardInfo *card)
|
||||
void PictureLoader::clearPixmapCache(CardInfoPtr card)
|
||||
{
|
||||
if (card)
|
||||
QPixmapCache::remove(card->getPixmapCacheKey());
|
||||
|
@ -474,12 +463,12 @@ void PictureLoader::clearPixmapCache()
|
|||
QPixmapCache::clear();
|
||||
}
|
||||
|
||||
void PictureLoader::cacheCardPixmaps(QList<CardInfo *> cards)
|
||||
void PictureLoader::cacheCardPixmaps(QList<CardInfoPtr> cards)
|
||||
{
|
||||
QPixmap tmp;
|
||||
int max = qMin(cards.size(), CACHED_CARD_PER_DECK_MAX);
|
||||
for (int i = 0; i < max; ++i) {
|
||||
CardInfo *card = cards.at(i);
|
||||
CardInfoPtr card = cards.at(i);
|
||||
if (!card)
|
||||
continue;
|
||||
|
||||
|
|
|
@ -6,8 +6,7 @@
|
|||
#include <QMutex>
|
||||
#include <QNetworkRequest>
|
||||
|
||||
class CardInfo;
|
||||
class CardSet;
|
||||
#include "carddatabase.h"
|
||||
class QNetworkAccessManager;
|
||||
class QNetworkReply;
|
||||
class QThread;
|
||||
|
@ -17,17 +16,21 @@ class PictureToLoad
|
|||
private:
|
||||
class SetDownloadPriorityComparator;
|
||||
|
||||
CardInfo *card;
|
||||
QList<CardSet *> sortedSets;
|
||||
CardInfoPtr card;
|
||||
QList<CardSetPtr> sortedSets;
|
||||
int setIndex;
|
||||
|
||||
public:
|
||||
PictureToLoad(CardInfo *_card = 0);
|
||||
CardInfo *getCard() const
|
||||
PictureToLoad(CardInfoPtr _card = CardInfoPtr());
|
||||
CardInfoPtr getCard() const
|
||||
{
|
||||
return card;
|
||||
}
|
||||
CardSet *getCurrentSet() const;
|
||||
void clear()
|
||||
{
|
||||
card.clear();
|
||||
}
|
||||
CardSetPtr getCurrentSet() const;
|
||||
QString getSetName() const;
|
||||
bool nextSet();
|
||||
};
|
||||
|
@ -39,7 +42,7 @@ public:
|
|||
PictureLoaderWorker();
|
||||
~PictureLoaderWorker();
|
||||
|
||||
void enqueueImageLoad(CardInfo *card);
|
||||
void enqueueImageLoad(CardInfoPtr card);
|
||||
|
||||
private:
|
||||
static QStringList md5Blacklist;
|
||||
|
@ -67,7 +70,7 @@ public slots:
|
|||
void processLoadQueue();
|
||||
signals:
|
||||
void startLoadQueue();
|
||||
void imageLoaded(CardInfo *card, const QImage &image);
|
||||
void imageLoaded(CardInfoPtr card, const QImage &image);
|
||||
};
|
||||
|
||||
class PictureLoader : public QObject
|
||||
|
@ -90,15 +93,15 @@ private:
|
|||
PictureLoaderWorker *worker;
|
||||
|
||||
public:
|
||||
static void getPixmap(QPixmap &pixmap, CardInfo *card, QSize size);
|
||||
static void getPixmap(QPixmap &pixmap, CardInfoPtr card, QSize size);
|
||||
static void getCardBackPixmap(QPixmap &pixmap, QSize size);
|
||||
static void clearPixmapCache(CardInfo *card);
|
||||
static void clearPixmapCache(CardInfoPtr card);
|
||||
static void clearPixmapCache();
|
||||
static void cacheCardPixmaps(QList<CardInfo *> cards);
|
||||
static void cacheCardPixmaps(QList<CardInfoPtr> cards);
|
||||
private slots:
|
||||
void picDownloadChanged();
|
||||
void picsPathChanged();
|
||||
public slots:
|
||||
void imageLoaded(CardInfo *card, const QImage &image);
|
||||
void imageLoaded(CardInfoPtr card, const QImage &image);
|
||||
};
|
||||
#endif
|
||||
|
|
|
@ -1066,7 +1066,7 @@ void Player::actCreateToken()
|
|||
|
||||
lastTokenName = dlg.getName();
|
||||
lastTokenPT = dlg.getPT();
|
||||
CardInfo *correctedCard = db->getCardBySimpleName(lastTokenName);
|
||||
CardInfoPtr correctedCard = db->getCardBySimpleName(lastTokenName);
|
||||
if (correctedCard) {
|
||||
lastTokenName = correctedCard->getName();
|
||||
lastTokenTableRow = table->clampValidTableRow(2 - correctedCard->getTableRow());
|
||||
|
@ -1102,7 +1102,7 @@ void Player::actCreateAnotherToken()
|
|||
void Player::actCreatePredefinedToken()
|
||||
{
|
||||
QAction *action = static_cast<QAction *>(sender());
|
||||
CardInfo *cardInfo = db->getCard(action->text());
|
||||
CardInfoPtr cardInfo = db->getCard(action->text());
|
||||
if (!cardInfo)
|
||||
return;
|
||||
|
||||
|
@ -1128,7 +1128,7 @@ void Player::actCreateRelatedCard()
|
|||
* then let's allow it to be created via "create another token"
|
||||
*/
|
||||
if (createRelatedFromRelation(sourceCard, cardRelation) && cardRelation->getCanCreateAnother()) {
|
||||
CardInfo *cardInfo = db->getCard(dbNameFromTokenDisplayName(cardRelation->getName()));
|
||||
CardInfoPtr cardInfo = db->getCard(dbNameFromTokenDisplayName(cardRelation->getName()));
|
||||
setLastToken(cardInfo);
|
||||
}
|
||||
}
|
||||
|
@ -1207,7 +1207,7 @@ void Player::actCreateAllRelatedCards()
|
|||
* then assign the first to the "Create another" shortcut.
|
||||
*/
|
||||
if (cardRelation != nullptr && cardRelation->getCanCreateAnother()) {
|
||||
CardInfo *cardInfo = db->getCard(dbNameFromTokenDisplayName(cardRelation->getName()));
|
||||
CardInfoPtr cardInfo = db->getCard(dbNameFromTokenDisplayName(cardRelation->getName()));
|
||||
setLastToken(cardInfo);
|
||||
}
|
||||
}
|
||||
|
@ -1244,7 +1244,7 @@ bool Player::createRelatedFromRelation(const CardItem *sourceCard, const CardRel
|
|||
|
||||
void Player::createCard(const CardItem *sourceCard, const QString &dbCardName, bool attach)
|
||||
{
|
||||
CardInfo *cardInfo = db->getCard(dbCardName);
|
||||
CardInfoPtr cardInfo = db->getCard(dbCardName);
|
||||
|
||||
if (cardInfo == nullptr || sourceCard == nullptr)
|
||||
return;
|
||||
|
@ -1407,7 +1407,7 @@ void Player::eventCreateToken(const Event_CreateToken &event)
|
|||
if (!QString::fromStdString(event.pt()).isEmpty()) {
|
||||
card->setPT(QString::fromStdString(event.pt()));
|
||||
} else {
|
||||
CardInfo *dbCard = db->getCard(QString::fromStdString(event.card_name()));
|
||||
CardInfoPtr dbCard = db->getCard(QString::fromStdString(event.card_name()));
|
||||
if (dbCard)
|
||||
card->setPT(dbCard->getPowTough());
|
||||
}
|
||||
|
@ -1909,7 +1909,7 @@ void Player::playCard(CardItem *c, bool faceDown, bool tapped)
|
|||
CardToMove *cardToMove = cmd.mutable_cards_to_move()->add_card();
|
||||
cardToMove->set_card_id(c->getId());
|
||||
|
||||
CardInfo *ci = c->getInfo();
|
||||
CardInfoPtr ci = c->getInfo();
|
||||
if (!ci)
|
||||
return;
|
||||
if (!faceDown && ((!settingsCache->getPlayToStack() && ci->getTableRow() == 3) ||
|
||||
|
@ -2820,7 +2820,7 @@ void Player::processSceneSizeChange(int newPlayerWidth)
|
|||
hand->setWidth(tableWidth + stack->boundingRect().width());
|
||||
}
|
||||
|
||||
void Player::setLastToken(CardInfo *cardInfo)
|
||||
void Player::setLastToken(CardInfoPtr cardInfo)
|
||||
{
|
||||
if (cardInfo == nullptr || aCreateAnotherToken == nullptr)
|
||||
return;
|
||||
|
|
|
@ -403,7 +403,7 @@ public:
|
|||
void sendGameCommand(PendingCommand *pend);
|
||||
void sendGameCommand(const google::protobuf::Message &command);
|
||||
|
||||
void setLastToken(CardInfo *cardInfo);
|
||||
void setLastToken(CardInfoPtr cardInfo);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3,15 +3,13 @@
|
|||
SetsModel::SetsModel(CardDatabase *_db, QObject *parent) : QAbstractTableModel(parent), sets(_db->getSetList())
|
||||
{
|
||||
sets.sortByKey();
|
||||
foreach (CardSet *set, sets) {
|
||||
for (const CardSetPtr &set : sets) {
|
||||
if (set->getEnabled())
|
||||
enabledSets.insert(set);
|
||||
}
|
||||
}
|
||||
|
||||
SetsModel::~SetsModel()
|
||||
{
|
||||
}
|
||||
SetsModel::~SetsModel() = default;
|
||||
|
||||
int SetsModel::rowCount(const QModelIndex &parent) const
|
||||
{
|
||||
|
@ -26,7 +24,7 @@ QVariant SetsModel::data(const QModelIndex &index, int role) const
|
|||
if (!index.isValid() || (index.column() >= NUM_COLS) || (index.row() >= rowCount()))
|
||||
return QVariant();
|
||||
|
||||
CardSet *set = sets[index.row()];
|
||||
CardSetPtr set = sets[index.row()];
|
||||
|
||||
if (index.column() == EnabledCol) {
|
||||
switch (role) {
|
||||
|
@ -146,7 +144,7 @@ bool SetsModel::dropMimeData(const QMimeData *data,
|
|||
|
||||
void SetsModel::toggleRow(int row, bool enable)
|
||||
{
|
||||
CardSet *temp = sets.at(row);
|
||||
CardSetPtr temp = sets.at(row);
|
||||
|
||||
if (enable)
|
||||
enabledSets.insert(temp);
|
||||
|
@ -158,7 +156,7 @@ void SetsModel::toggleRow(int row, bool enable)
|
|||
|
||||
void SetsModel::toggleRow(int row)
|
||||
{
|
||||
CardSet *tmp = sets.at(row);
|
||||
CardSetPtr tmp = sets.at(row);
|
||||
|
||||
if (tmp == nullptr)
|
||||
return;
|
||||
|
@ -176,7 +174,7 @@ void SetsModel::toggleAll(bool enabled)
|
|||
enabledSets.clear();
|
||||
|
||||
if (enabled)
|
||||
foreach (CardSet *set, sets)
|
||||
for (CardSetPtr set : sets)
|
||||
enabledSets.insert(set);
|
||||
|
||||
emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1));
|
||||
|
@ -185,7 +183,7 @@ void SetsModel::toggleAll(bool enabled)
|
|||
void SetsModel::swapRows(int oldRow, int newRow)
|
||||
{
|
||||
beginRemoveRows(QModelIndex(), oldRow, oldRow);
|
||||
CardSet *temp = sets.takeAt(oldRow);
|
||||
CardSetPtr temp = sets.takeAt(oldRow);
|
||||
endRemoveRows();
|
||||
|
||||
beginInsertRows(QModelIndex(), newRow, newRow);
|
||||
|
@ -197,14 +195,14 @@ void SetsModel::swapRows(int oldRow, int newRow)
|
|||
|
||||
void SetsModel::sort(int column, Qt::SortOrder order)
|
||||
{
|
||||
QMap<QString, CardSet *> setMap;
|
||||
QMap<QString, CardSetPtr> setMap;
|
||||
int numRows = rowCount();
|
||||
int row;
|
||||
|
||||
for (row = 0; row < numRows; ++row)
|
||||
setMap.insertMulti(index(row, column).data(SetsModel::SortRole).toString(), sets.at(row));
|
||||
|
||||
QList<CardSet *> tmp = setMap.values();
|
||||
QList<CardSetPtr> tmp = setMap.values();
|
||||
sets.clear();
|
||||
if (order == Qt::AscendingOrder) {
|
||||
for (row = 0; row < tmp.size(); row++) {
|
||||
|
@ -222,11 +220,11 @@ void SetsModel::sort(int column, Qt::SortOrder order)
|
|||
void SetsModel::save(CardDatabase *db)
|
||||
{
|
||||
// order
|
||||
for (int i = 0; i < sets.size(); i++)
|
||||
for (unsigned int i = 0; i < sets.size(); i++)
|
||||
sets[i]->setSortKey(i + 1);
|
||||
|
||||
// enabled sets
|
||||
foreach (CardSet *set, sets)
|
||||
for (const CardSetPtr &set : sets)
|
||||
set->setEnabled(enabledSets.contains(set));
|
||||
|
||||
sets.sortByKey();
|
||||
|
@ -242,7 +240,7 @@ void SetsModel::restore(CardDatabase *db)
|
|||
|
||||
// enabled sets
|
||||
enabledSets.clear();
|
||||
foreach (CardSet *set, sets) {
|
||||
for (const CardSetPtr &set : sets) {
|
||||
if (set->getEnabled())
|
||||
enabledSets.insert(set);
|
||||
}
|
||||
|
|
|
@ -36,7 +36,7 @@ class SetsModel : public QAbstractTableModel
|
|||
private:
|
||||
static const int NUM_COLS = 7;
|
||||
SetList sets;
|
||||
QSet<CardSet *> enabledSets;
|
||||
QSet<CardSetPtr> enabledSets;
|
||||
|
||||
public:
|
||||
enum SetsColumns
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
#include "tab_deck_editor.h"
|
||||
#include "abstractclient.h"
|
||||
#include "carddatabase.h"
|
||||
#include "carddatabasemodel.h"
|
||||
#include "cardframe.h"
|
||||
#include "decklistmodel.h"
|
||||
|
@ -872,11 +871,13 @@ void TabDeckEditor::recursiveExpand(const QModelIndex &index)
|
|||
deckView->expand(index);
|
||||
}
|
||||
|
||||
CardInfo *TabDeckEditor::currentCardInfo() const
|
||||
CardInfoPtr TabDeckEditor::currentCardInfo() const
|
||||
{
|
||||
const QModelIndex currentIndex = databaseView->selectionModel()->currentIndex();
|
||||
if (!currentIndex.isValid())
|
||||
return NULL;
|
||||
if (!currentIndex.isValid()) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
|
||||
|
||||
return db->getCard(cardName);
|
||||
|
@ -884,9 +885,7 @@ CardInfo *TabDeckEditor::currentCardInfo() const
|
|||
|
||||
void TabDeckEditor::addCardHelper(QString zoneName)
|
||||
{
|
||||
const CardInfo *info;
|
||||
|
||||
info = currentCardInfo();
|
||||
const CardInfoPtr info = currentCardInfo();
|
||||
if (!info)
|
||||
return;
|
||||
if (info->getIsToken())
|
||||
|
@ -961,10 +960,9 @@ void TabDeckEditor::offsetCountAtIndex(const QModelIndex &idx, int offset)
|
|||
|
||||
void TabDeckEditor::decrementCardHelper(QString zoneName)
|
||||
{
|
||||
const CardInfo *info;
|
||||
const CardInfoPtr info = currentCardInfo();
|
||||
QModelIndex idx;
|
||||
|
||||
info = currentCardInfo();
|
||||
if (!info)
|
||||
return;
|
||||
if (info->getIsToken())
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
#include <QDir>
|
||||
#include <QLineEdit>
|
||||
|
||||
#include "carddatabase.h"
|
||||
|
||||
class CardDatabaseModel;
|
||||
class CardDatabaseDisplayModel;
|
||||
class DeckListModel;
|
||||
|
@ -19,7 +21,6 @@ class DeckLoader;
|
|||
class Response;
|
||||
class FilterTreeModel;
|
||||
class FilterBuilder;
|
||||
class CardInfo;
|
||||
class QGroupBox;
|
||||
class QHBoxLayout;
|
||||
class QVBoxLayout;
|
||||
|
@ -95,7 +96,7 @@ private slots:
|
|||
void saveDbHeaderState();
|
||||
|
||||
private:
|
||||
CardInfo *currentCardInfo() const;
|
||||
CardInfoPtr currentCardInfo() const;
|
||||
void addCardHelper(QString zoneName);
|
||||
void offsetCountAtIndex(const QModelIndex &idx, int offset);
|
||||
void decrementCardHelper(QString zoneName);
|
||||
|
|
|
@ -100,7 +100,7 @@ struct CopyMainOrSide
|
|||
|
||||
void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const
|
||||
{
|
||||
CardInfo *dbCard = cardDatabase.getCard(card->getName());
|
||||
CardInfoPtr dbCard = cardDatabase.getCard(card->getName());
|
||||
if (!dbCard || dbCard->getIsToken())
|
||||
return;
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ bool OracleImporter::readSetsFromByteArray(const QByteArray &data)
|
|||
return true;
|
||||
}
|
||||
|
||||
CardInfo *OracleImporter::addCard(const QString &setName,
|
||||
CardInfoPtr OracleImporter::addCard(const QString &setName,
|
||||
QString cardName,
|
||||
bool isToken,
|
||||
int cardId,
|
||||
|
@ -74,7 +74,7 @@ CardInfo *OracleImporter::addCard(const QString &setName,
|
|||
cardName = cardName.replace("Æ", "AE");
|
||||
cardName = cardName.replace("’", "'");
|
||||
|
||||
CardInfo *card;
|
||||
CardInfoPtr card;
|
||||
if (cards.contains(cardName)) {
|
||||
card = cards.value(cardName);
|
||||
} else {
|
||||
|
@ -95,7 +95,7 @@ CardInfo *OracleImporter::addCard(const QString &setName,
|
|||
!cardText.contains(cardName + " enters the battlefield tapped unless"));
|
||||
|
||||
// insert the card and its properties
|
||||
card = new CardInfo(cardName, isToken, cardCost, cmc, cardType, cardPT, cardText, colors, relatedCards,
|
||||
card = CardInfo::newInstance(cardName, isToken, cardCost, cmc, cardType, cardPT, cardText, colors, relatedCards,
|
||||
reverseRelatedCards, upsideDown, cardLoyalty, cipt);
|
||||
int tableRow = 1;
|
||||
QString mainCardType = card->getMainCardType();
|
||||
|
@ -134,7 +134,7 @@ void OracleImporter::extractColors(const QStringList &in, QStringList &out)
|
|||
}
|
||||
}
|
||||
|
||||
int OracleImporter::importTextSpoiler(CardSet *set, const QVariant &data)
|
||||
int OracleImporter::importTextSpoiler(CardSetPtr set, const QVariant &data)
|
||||
{
|
||||
int cards = 0;
|
||||
|
||||
|
@ -202,7 +202,7 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QVariant &data)
|
|||
colors.clear();
|
||||
extractColors(map.value("colors").toStringList(), colors);
|
||||
|
||||
CardInfo *card =
|
||||
CardInfoPtr card =
|
||||
addCard(set->getShortName(), cardName, false, cardId, setNumber, cardCost, cmc, cardType, cardPT,
|
||||
cardLoyalty, cardText, colors, relatedCards, reverseRelatedCards, upsideDown, rarity);
|
||||
|
||||
|
@ -290,8 +290,9 @@ int OracleImporter::importTextSpoiler(CardSet *set, const QVariant &data)
|
|||
upsideDown = false;
|
||||
|
||||
// add the card
|
||||
CardInfo *card = addCard(set->getShortName(), cardName, false, muid, setNumber, cardCost, cmc, cardType, cardPT,
|
||||
cardLoyalty, cardText, colors, relatedCards, reverseRelatedCards, upsideDown, rarity);
|
||||
CardInfoPtr card =
|
||||
addCard(set->getShortName(), cardName, false, muid, setNumber, cardCost, cmc, cardType, cardPT, cardLoyalty,
|
||||
cardText, colors, relatedCards, reverseRelatedCards, upsideDown, rarity);
|
||||
|
||||
if (!set->contains(card)) {
|
||||
card->addToSet(set);
|
||||
|
@ -311,21 +312,21 @@ int OracleImporter::startImport()
|
|||
const SetToDownload *curSet;
|
||||
|
||||
// add an empty set for tokens
|
||||
CardSet *tokenSet = new CardSet(TOKENS_SETNAME, tr("Dummy set containing tokens"), "Tokens");
|
||||
CardSetPtr tokenSet = CardSet::newInstance(TOKENS_SETNAME, tr("Dummy set containing tokens"), "Tokens");
|
||||
sets.insert(TOKENS_SETNAME, tokenSet);
|
||||
|
||||
while (it.hasNext()) {
|
||||
curSet = &it.next();
|
||||
CardSet *set =
|
||||
new CardSet(curSet->getShortName(), curSet->getLongName(), curSet->getSetType(), curSet->getReleaseDate());
|
||||
CardSetPtr set = CardSet::newInstance(curSet->getShortName(), curSet->getLongName(), curSet->getSetType(),
|
||||
curSet->getReleaseDate());
|
||||
if (!sets.contains(set->getShortName()))
|
||||
sets.insert(set->getShortName(), set);
|
||||
|
||||
int setCards = importTextSpoiler(set, curSet->getCards());
|
||||
int setCardsHere = importTextSpoiler(set, curSet->getCards());
|
||||
|
||||
++setIndex;
|
||||
|
||||
emit setIndexChanged(setCards, setIndex, curSet->getLongName());
|
||||
emit setIndexChanged(setCardsHere, setIndex, curSet->getLongName());
|
||||
}
|
||||
|
||||
emit setIndexChanged(setCards, setIndex, QString());
|
||||
|
|
|
@ -57,7 +57,7 @@ private:
|
|||
QVariantMap setsMap;
|
||||
QString dataDir;
|
||||
|
||||
CardInfo *addCard(const QString &setName,
|
||||
CardInfoPtr addCard(const QString &setName,
|
||||
QString cardName,
|
||||
bool isToken,
|
||||
int cardId,
|
||||
|
@ -81,7 +81,7 @@ public:
|
|||
OracleImporter(const QString &_dataDir, QObject *parent = 0);
|
||||
bool readSetsFromByteArray(const QByteArray &data);
|
||||
int startImport();
|
||||
int importTextSpoiler(CardSet *set, const QVariant &data);
|
||||
int importTextSpoiler(CardSetPtr set, const QVariant &data);
|
||||
QList<SetToDownload> &getSets()
|
||||
{
|
||||
return allSets;
|
||||
|
|
|
@ -145,7 +145,7 @@ IntroPage::IntroPage(QWidget *parent) : OracleWizardPage(parent)
|
|||
layout->addWidget(label, 0, 0, 1, 2);
|
||||
layout->addWidget(languageLabel, 1, 0);
|
||||
layout->addWidget(languageBox, 1, 1);
|
||||
layout->addWidget(versionLabel, 4, 0);
|
||||
layout->addWidget(versionLabel, 2, 0, 1, 2);
|
||||
|
||||
setLayout(layout);
|
||||
}
|
||||
|
|
|
@ -19,10 +19,7 @@ CardDatabaseSettings& SettingsCache::cardDatabase() const { return *cardDatabase
|
|||
|
||||
SettingsCache *settingsCache;
|
||||
|
||||
void PictureLoader::clearPixmapCache(CardInfo * /* card */) { }
|
||||
|
||||
// include out main header file _after_ the hack is complete
|
||||
#include "../../cockatrice/src/carddatabase.h"
|
||||
void PictureLoader::clearPixmapCache(CardInfoPtr /* card */) { }
|
||||
|
||||
namespace {
|
||||
|
||||
|
|
|
@ -6,6 +6,8 @@
|
|||
#include <QObject>
|
||||
#include <QString>
|
||||
|
||||
#include "../../cockatrice/src/carddatabase.h"
|
||||
|
||||
#define SETTINGSCACHE_H
|
||||
|
||||
class CardDatabaseSettings
|
||||
|
@ -38,8 +40,7 @@ signals:
|
|||
|
||||
|
||||
#define PICTURELOADER_H
|
||||
class CardInfo;
|
||||
|
||||
class PictureLoader {
|
||||
void clearPixmapCache(CardInfo *card);
|
||||
void clearPixmapCache(CardInfoPtr card);
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue