mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-06-22 06:43:54 -07:00
* CardDB: merge all card properties in a new structure * Pre Json parser changes * Cockatrice: use qt's builtin json support * Move qt-json src dir from cockatrice to oracle * Add dummy cockatricexml4 parser (yet to be implemented) * Implement a new parser and xml format * cockatricexml4: new xml parser following the "generic properties hash" pattern; * oracleimporter: refactor the parsing code to better adapt to cockatricexml4; rewrote split cards parsing * carddb: change "colors" from a stringlist to a string * carddb: move the getMainCardType() method to the cockatricexml3 parser * * CardInfo: show all properties (stil missing: nice name + translation) * Rework the "add related card" feature so that it doesn't change the card name in the carddb Also, fix token count display * Picture loader: Added support for transform cards * Fix side information for flip cards Mtgjson uses side a/b for flip cards, while scryfall doesn't * Pictureloader: dynamic tag resolution from card properties Examples old => new * !cardid! => !set:muid! * !uuid! => !set:uuid! * !collectornumber! => !set:num! New examples: * !prop:type! * !prop:manacost! * Start moving mtg-related property names to a specific file * Clangify * Fix tests * Make gcc an happy puppy * Revert "Make gcc an happy puppy" This reverts commit 446ec5f27516c4d3b32dbfc79557f4827c5c5bdf. * Some gcc fixes * Share set list between different db parsers, so they won't overwrite one each other * All glory to the hypnoclangifier! * Fix test compilation * Cleanup edited files in the prior PR. (#3519) * Cleanup edited files in the prior PR. Signed-off-by: Zach Halpern <ZaHalpern+github@gmail.com> * Fix includes Signed-off-by: Zach Halpern <ZaHalpern+github@gmail.com> * Update carddatabase.h
148 lines
4.1 KiB
C++
148 lines
4.1 KiB
C++
#ifndef CARDDATABASEMODEL_H
|
|
#define CARDDATABASEMODEL_H
|
|
|
|
#include "carddatabase.h"
|
|
#include <QAbstractListModel>
|
|
#include <QList>
|
|
#include <QSet>
|
|
#include <QSortFilterProxyModel>
|
|
|
|
class FilterTree;
|
|
|
|
class CardDatabaseModel : public QAbstractListModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum Columns
|
|
{
|
|
NameColumn,
|
|
SetListColumn,
|
|
ManaCostColumn,
|
|
PTColumn,
|
|
CardTypeColumn,
|
|
ColorColumn
|
|
};
|
|
enum Role
|
|
{
|
|
SortRole = Qt::UserRole
|
|
};
|
|
CardDatabaseModel(CardDatabase *_db, bool _showOnlyCardsFromEnabledSets, QObject *parent = nullptr);
|
|
~CardDatabaseModel() override;
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
QVariant data(const QModelIndex &index, int role) const override;
|
|
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
|
CardDatabase *getDatabase() const
|
|
{
|
|
return db;
|
|
}
|
|
CardInfoPtr getCard(int index) const
|
|
{
|
|
return cardList[index];
|
|
}
|
|
|
|
private:
|
|
QList<CardInfoPtr> cardList;
|
|
CardDatabase *db;
|
|
bool showOnlyCardsFromEnabledSets;
|
|
|
|
inline bool checkCardHasAtLeastOneEnabledSet(CardInfoPtr card);
|
|
private slots:
|
|
void cardAdded(CardInfoPtr card);
|
|
void cardRemoved(CardInfoPtr card);
|
|
void cardInfoChanged(CardInfoPtr card);
|
|
void cardDatabaseEnabledSetsChanged();
|
|
};
|
|
|
|
class CardDatabaseDisplayModel : public QSortFilterProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum FilterBool
|
|
{
|
|
ShowTrue,
|
|
ShowFalse,
|
|
ShowAll
|
|
};
|
|
|
|
private:
|
|
FilterBool isToken;
|
|
QString cardNameBeginning, cardName, cardText;
|
|
QString searchTerm;
|
|
QSet<QString> cardNameSet, cardTypes, cardColors;
|
|
FilterTree *filterTree;
|
|
int loadedRowCount;
|
|
|
|
/** The translation table that will be used for sanitizeCardName. */
|
|
static QMap<wchar_t, wchar_t> characterTranslation;
|
|
|
|
public:
|
|
explicit CardDatabaseDisplayModel(QObject *parent = nullptr);
|
|
void setFilterTree(FilterTree *filterTree);
|
|
void setIsToken(FilterBool _isToken)
|
|
{
|
|
isToken = _isToken;
|
|
invalidate();
|
|
}
|
|
void setCardNameBeginning(const QString &_beginning)
|
|
{
|
|
cardNameBeginning = _beginning;
|
|
invalidate();
|
|
}
|
|
void setCardName(const QString &_cardName)
|
|
{
|
|
cardName = sanitizeCardName(_cardName, characterTranslation);
|
|
invalidate();
|
|
}
|
|
void setCardNameSet(const QSet<QString> &_cardNameSet)
|
|
{
|
|
cardNameSet = _cardNameSet;
|
|
invalidate();
|
|
}
|
|
void setSearchTerm(const QString &_searchTerm)
|
|
{
|
|
searchTerm = _searchTerm;
|
|
}
|
|
void setCardText(const QString &_cardText)
|
|
{
|
|
cardText = _cardText;
|
|
invalidate();
|
|
}
|
|
void setCardTypes(const QSet<QString> &_cardTypes)
|
|
{
|
|
cardTypes = _cardTypes;
|
|
invalidate();
|
|
}
|
|
void setCardColors(const QSet<QString> &_cardColors)
|
|
{
|
|
cardColors = _cardColors;
|
|
invalidate();
|
|
}
|
|
void clearFilterAll();
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
|
|
protected:
|
|
bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
|
static int lessThanNumerically(const QString &left, const QString &right);
|
|
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
|
bool rowMatchesCardName(CardInfoPtr info) const;
|
|
bool canFetchMore(const QModelIndex &parent) const override;
|
|
void fetchMore(const QModelIndex &parent) override;
|
|
private slots:
|
|
void filterTreeChanged();
|
|
/** Will translate all undesirable characters in DIRTYNAME according to the TABLE. */
|
|
const QString sanitizeCardName(const QString &dirtyName, const QMap<wchar_t, wchar_t> &table);
|
|
};
|
|
|
|
class TokenDisplayModel : public CardDatabaseDisplayModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
explicit TokenDisplayModel(QObject *parent = nullptr);
|
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
|
|
protected:
|
|
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
|
};
|
|
|
|
#endif
|