deck editor improvement

This commit is contained in:
Max-Wilhelm Bruker 2009-10-12 15:46:45 +02:00
parent 9f35340188
commit 841b91bc89
4 changed files with 21 additions and 32 deletions

View file

@ -63,29 +63,9 @@ QVariant CardDatabaseModel::headerData(int section, Qt::Orientation orientation,
} }
} }
class CardInfoCompare { CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent)
private: : QSortFilterProxyModel(parent)
int column;
Qt::SortOrder order;
public:
CardInfoCompare(int _column, Qt::SortOrder _order) : column(_column), order(_order) { }
inline bool operator()(CardInfo *a, CardInfo *b) const
{
bool result;
switch (column) {
case 0: result = (a->getName() < b->getName()); break;
case 1: result = (a->getSets().at(0)->getShortName() < b->getSets().at(0)->getShortName()); break;
case 2: result = (a->getManaCost() < b->getManaCost()); break;
case 3: result = (a->getCardType() < b->getCardType()); break;
case 4: result = (a->getPowTough() < b->getPowTough()); break;
default: result = false;
}
return (order == Qt::AscendingOrder) ^ result;
}
};
void CardDatabaseModel::sort(int column, Qt::SortOrder order)
{ {
CardInfoCompare cmp(column, order); setFilterCaseSensitivity(Qt::CaseInsensitive);
qSort(cardList.begin(), cardList.end(), cmp); setSortCaseSensitivity(Qt::CaseInsensitive);
} }

View file

@ -2,6 +2,7 @@
#define CARDDATABASEMODEL_H #define CARDDATABASEMODEL_H
#include <QAbstractListModel> #include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QList> #include <QList>
#include "carddatabase.h" #include "carddatabase.h"
@ -14,10 +15,15 @@ public:
int columnCount(const QModelIndex &parent = QModelIndex()) const; int columnCount(const QModelIndex &parent = QModelIndex()) const;
QVariant data(const QModelIndex &index, int role) const; QVariant data(const QModelIndex &index, int role) const;
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
private: private:
QList<CardInfo *> cardList; QList<CardInfo *> cardList;
CardDatabase *db; CardDatabase *db;
}; };
class CardDatabaseDisplayModel : public QSortFilterProxyModel {
Q_OBJECT
public:
CardDatabaseDisplayModel(QObject *parent = 0);
};
#endif #endif

View file

@ -19,11 +19,15 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
searchLayout->addWidget(searchLabel); searchLayout->addWidget(searchLabel);
searchLayout->addWidget(searchEdit); searchLayout->addWidget(searchEdit);
databaseModel = new CardDatabaseModel(db); databaseModel = new CardDatabaseModel(db, this);
databaseDisplayModel = new CardDatabaseDisplayModel(this);
databaseDisplayModel->setSourceModel(databaseModel);
databaseDisplayModel->sort(0, Qt::AscendingOrder);
databaseView = new QTreeView(); databaseView = new QTreeView();
databaseView->setModel(databaseModel); databaseView->setModel(databaseDisplayModel);
databaseView->setUniformRowHeights(true); databaseView->setUniformRowHeights(true);
databaseView->setSortingEnabled(true); databaseView->setSortingEnabled(true);
databaseView->sortByColumn(0, Qt::AscendingOrder);
databaseView->resizeColumnToContents(0); databaseView->resizeColumnToContents(0);
connect(databaseView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoLeft(const QModelIndex &, const QModelIndex &))); connect(databaseView->selectionModel(), SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(updateCardInfoLeft(const QModelIndex &, const QModelIndex &)));
connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard())); connect(databaseView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(actAddCard()));
@ -173,10 +177,7 @@ void WndDeckEditor::updateCardInfoRight(const QModelIndex &current, const QModel
void WndDeckEditor::updateSearch(const QString &search) void WndDeckEditor::updateSearch(const QString &search)
{ {
QModelIndexList matches = databaseModel->match(databaseModel->index(0, 0), Qt::DisplayRole, search); databaseDisplayModel->setFilterRegExp(search);
if (matches.isEmpty())
return;
databaseView->selectionModel()->setCurrentIndex(matches[0], QItemSelectionModel::SelectCurrent);
} }
bool WndDeckEditor::confirmClose() bool WndDeckEditor::confirmClose()
@ -279,7 +280,7 @@ void WndDeckEditor::addCardHelper(const QString &zoneName)
const QModelIndex currentIndex = databaseView->selectionModel()->currentIndex(); const QModelIndex currentIndex = databaseView->selectionModel()->currentIndex();
if (!currentIndex.isValid()) if (!currentIndex.isValid())
return; return;
const QString cardName = databaseModel->index(currentIndex.row(), 0).data().toString(); const QString cardName = currentIndex.sibling(currentIndex.row(), 0).data().toString();
QModelIndex newCardIndex = deckModel->addCard(cardName, zoneName); QModelIndex newCardIndex = deckModel->addCard(cardName, zoneName);
recursiveExpand(newCardIndex); recursiveExpand(newCardIndex);

View file

@ -7,6 +7,7 @@
class CardDatabase; class CardDatabase;
class CardDatabaseModel; class CardDatabaseModel;
class CardDatabaseDisplayModel;
class DeckListModel; class DeckListModel;
class QTreeView; class QTreeView;
class QTableView; class QTableView;
@ -46,6 +47,7 @@ private:
CardDatabase *db; CardDatabase *db;
CardDatabaseModel *databaseModel; CardDatabaseModel *databaseModel;
CardDatabaseDisplayModel *databaseDisplayModel;
DeckListModel *deckModel; DeckListModel *deckModel;
QTreeView *databaseView; QTreeView *databaseView;
QTreeView *deckView; QTreeView *deckView;