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 {
private:
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)
CardDatabaseDisplayModel::CardDatabaseDisplayModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
CardInfoCompare cmp(column, order);
qSort(cardList.begin(), cardList.end(), cmp);
setFilterCaseSensitivity(Qt::CaseInsensitive);
setSortCaseSensitivity(Qt::CaseInsensitive);
}

View file

@ -2,6 +2,7 @@
#define CARDDATABASEMODEL_H
#include <QAbstractListModel>
#include <QSortFilterProxyModel>
#include <QList>
#include "carddatabase.h"
@ -14,10 +15,15 @@ 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;
void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
private:
QList<CardInfo *> cardList;
CardDatabase *db;
};
class CardDatabaseDisplayModel : public QSortFilterProxyModel {
Q_OBJECT
public:
CardDatabaseDisplayModel(QObject *parent = 0);
};
#endif

View file

@ -19,11 +19,15 @@ WndDeckEditor::WndDeckEditor(CardDatabase *_db, QWidget *parent)
searchLayout->addWidget(searchLabel);
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->setModel(databaseModel);
databaseView->setModel(databaseDisplayModel);
databaseView->setUniformRowHeights(true);
databaseView->setSortingEnabled(true);
databaseView->sortByColumn(0, Qt::AscendingOrder);
databaseView->resizeColumnToContents(0);
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()));
@ -173,10 +177,7 @@ void WndDeckEditor::updateCardInfoRight(const QModelIndex &current, const QModel
void WndDeckEditor::updateSearch(const QString &search)
{
QModelIndexList matches = databaseModel->match(databaseModel->index(0, 0), Qt::DisplayRole, search);
if (matches.isEmpty())
return;
databaseView->selectionModel()->setCurrentIndex(matches[0], QItemSelectionModel::SelectCurrent);
databaseDisplayModel->setFilterRegExp(search);
}
bool WndDeckEditor::confirmClose()
@ -279,7 +280,7 @@ void WndDeckEditor::addCardHelper(const QString &zoneName)
const QModelIndex currentIndex = databaseView->selectionModel()->currentIndex();
if (!currentIndex.isValid())
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);
recursiveExpand(newCardIndex);

View file

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