mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-09-22 01:25:10 -07:00
Localized card names and texts can now be searched too, controlled by a 'Language used in card search' toggle (English, selected card language, or both) on the general settings page. Untranslated cards always keep matching in English. Removed the redundant local copy of the URL templates list in the localized picture loader while here.
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
/**
|
|
* @file card_database_display_model.h
|
|
* @ingroup CardDatabaseModels
|
|
* @brief The CardDatabaseDisplayModel is a QSortFilterProxyModel that allows applying filters and sorting to a
|
|
* CardDatabaseModel.
|
|
*/
|
|
|
|
#ifndef COCKATRICE_CARD_DATABASE_DISPLAY_MODEL_H
|
|
#define COCKATRICE_CARD_DATABASE_DISPLAY_MODEL_H
|
|
|
|
#include <QSortFilterProxyModel>
|
|
#include <QTimer>
|
|
#include <libcockatrice/card/card_localization.h>
|
|
#include <libcockatrice/filters/filter_string.h>
|
|
|
|
class FilterTree;
|
|
class CardDatabaseDisplayModel : public QSortFilterProxyModel
|
|
{
|
|
Q_OBJECT
|
|
public:
|
|
enum FilterBool
|
|
{
|
|
ShowTrue,
|
|
ShowFalse,
|
|
ShowAll
|
|
};
|
|
|
|
private:
|
|
FilterBool isToken;
|
|
QString cardName, cardText;
|
|
QSet<QString> cardNameSet, cardTypes, cardColors;
|
|
FilterTree *filterTree;
|
|
FilterString *filterString;
|
|
int loadedRowCount;
|
|
QTimer dirtyTimer;
|
|
QString searchLanguage;
|
|
CardSearchLanguage searchLanguageMode = CardSearchLanguage::English;
|
|
|
|
/** The translation table that will be used for sanitizeCardName. */
|
|
static QMap<wchar_t, wchar_t> characterTranslation;
|
|
|
|
public:
|
|
explicit CardDatabaseDisplayModel(QObject *parent = nullptr);
|
|
void setSourceModel(QAbstractItemModel *model) override;
|
|
void setFilterTree(FilterTree *_filterTree);
|
|
void setIsToken(FilterBool _isToken)
|
|
{
|
|
isToken = _isToken;
|
|
dirty();
|
|
}
|
|
|
|
void setCardName(const QString &_cardName)
|
|
{
|
|
if (filterString != nullptr) {
|
|
delete filterString;
|
|
filterString = nullptr;
|
|
}
|
|
cardName = sanitizeCardName(_cardName, characterTranslation);
|
|
dirty();
|
|
}
|
|
void setStringFilter(const QString &_src);
|
|
void setCardNameSet(const QSet<QString> &_cardNameSet)
|
|
{
|
|
cardNameSet = _cardNameSet;
|
|
dirty();
|
|
}
|
|
void setSearchLanguage(const QString &searchLang, CardSearchLanguage mode);
|
|
|
|
void dirty()
|
|
{
|
|
dirtyTimer.start(20);
|
|
}
|
|
void clearFilterAll();
|
|
[[nodiscard]] int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
|
[[nodiscard]] bool canFetchMore(const QModelIndex &parent) const override;
|
|
void fetchMore(const QModelIndex &parent) override;
|
|
signals:
|
|
void modelDirty();
|
|
|
|
protected:
|
|
[[nodiscard]] bool lessThan(const QModelIndex &left, const QModelIndex &right) const override;
|
|
static int lessThanNumerically(const QString &left, const QString &right);
|
|
[[nodiscard]] bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
|
|
[[nodiscard]] bool rowMatchesCardName(CardInfoPtr info) const;
|
|
|
|
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);
|
|
};
|
|
|
|
#endif // COCKATRICE_CARD_DATABASE_DISPLAY_MODEL_H
|