diff --git a/cockatrice/src/carddatabasemodel.cpp b/cockatrice/src/carddatabasemodel.cpp index 146aadc26..9772c6da8 100644 --- a/cockatrice/src/carddatabasemodel.cpp +++ b/cockatrice/src/carddatabasemodel.cpp @@ -69,3 +69,20 @@ CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent) setFilterCaseSensitivity(Qt::CaseInsensitive); setSortCaseSensitivity(Qt::CaseInsensitive); } + +bool CardDatabaseDisplayModel::filterAcceptsRow(int sourceRow, const QModelIndex & /*sourceParent*/) const +{ + CardInfo *info = static_cast(sourceModel())->getCard(sourceRow); + + if (!cardNameBeginning.isEmpty()) + if (!info->getName().startsWith(cardNameBeginning, Qt::CaseInsensitive)) + return false; + + return true; +} + +void CardDatabaseDisplayModel::setCardNameBeginning(const QString &_beginning) +{ + cardNameBeginning = _beginning; + invalidateFilter(); +} diff --git a/cockatrice/src/carddatabasemodel.h b/cockatrice/src/carddatabasemodel.h index 339178e74..0649d18b9 100644 --- a/cockatrice/src/carddatabasemodel.h +++ b/cockatrice/src/carddatabasemodel.h @@ -15,6 +15,7 @@ public: int columnCount(const QModelIndex &parent = QModelIndex()) const; QVariant data(const QModelIndex &index, int role) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + CardInfo *getCard(int index) const { return cardList[index]; } private: QList cardList; CardDatabase *db; @@ -22,8 +23,13 @@ private: class CardDatabaseDisplayModel : public QSortFilterProxyModel { Q_OBJECT +private: + QString cardNameBeginning; public: CardDatabaseDisplayModel(QObject *parent = 0); + void setCardNameBeginning(const QString &_beginning); +protected: + bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; }; #endif diff --git a/cockatrice/src/window_deckeditor.cpp b/cockatrice/src/window_deckeditor.cpp index 273e46d7c..0981d30c7 100644 --- a/cockatrice/src/window_deckeditor.cpp +++ b/cockatrice/src/window_deckeditor.cpp @@ -31,6 +31,7 @@ WndDeckEditor::WndDeckEditor(QWidget *parent) databaseModel = new CardDatabaseModel(db, this); databaseDisplayModel = new CardDatabaseDisplayModel(this); databaseDisplayModel->setSourceModel(databaseModel); + databaseDisplayModel->setFilterKeyColumn(0); databaseDisplayModel->sort(0, Qt::AscendingOrder); databaseView = new QTreeView(); databaseView->setModel(databaseDisplayModel); @@ -197,7 +198,7 @@ void WndDeckEditor::updateCardInfoRight(const QModelIndex ¤t, const QModel void WndDeckEditor::updateSearch(const QString &search) { - databaseDisplayModel->setFilterFixedString(search); + databaseDisplayModel->setCardNameBeginning(search); } bool WndDeckEditor::confirmClose()