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:
ctrlaltca 2018-02-02 18:52:47 +01:00 committed by Zach H
parent 3e418ba3c6
commit 517420cccb
37 changed files with 409 additions and 342 deletions

View file

@ -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();

View file

@ -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;
}

View file

@ -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"))))

View file

@ -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;
}

View file

@ -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

View file

@ -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);
}

View file

@ -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:

View file

@ -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);
}

View file

@ -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();

View file

@ -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();

View file

@ -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();
};

View file

@ -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());

View file

@ -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

View file

@ -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);
}

View file

@ -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);

View file

@ -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();
}

View file

@ -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 {};
}

View file

@ -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());

View file

@ -144,9 +144,14 @@ void DlgCreateToken::closeEvent(QCloseEvent *event)
void DlgCreateToken::tokenSelectionChanged(const QModelIndex &current, 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));

View file

@ -116,9 +116,14 @@ DlgEditTokens::DlgEditTokens(QWidget *parent) : QDialog(parent), currentCard(0)
void DlgEditTokens::tokenSelectionChanged(const QModelIndex &current, 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;
}
}

View file

@ -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

View file

@ -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)) {

View file

@ -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();
};

View file

@ -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;

View file

@ -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

View file

@ -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;

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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())

View file

@ -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);

View file

@ -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;

View file

@ -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());

View file

@ -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;

View file

@ -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);
}

View file

@ -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 {

View file

@ -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);
};