deck editor improvement
This commit is contained in:
parent
9f35340188
commit
841b91bc89
4 changed files with 21 additions and 32 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 ¤t, 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);
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue