diff --git a/cockatrice/src/setsmodel.cpp b/cockatrice/src/setsmodel.cpp index ca1be306..206932c4 100644 --- a/cockatrice/src/setsmodel.cpp +++ b/cockatrice/src/setsmodel.cpp @@ -90,6 +90,10 @@ bool SetsModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int r for (int i = 0; i < sets.size(); i++) sets[i]->setSortKey(i); + sets.sortByKey(); + + emit dataChanged(index(0, 0), index(rowCount() - 1, columnCount() - 1)); + return true; } @@ -104,3 +108,17 @@ SetsProxyModel::SetsProxyModel(QObject *parent) setDynamicSortFilter(true); } +void SetsProxyModel::saveOrder() +{ + int numRows = rowCount(); + SetsModel * model = (SetsModel*) sourceModel(); + for(int row = 0; row < numRows; ++row) { + QModelIndex idx = index(row, 0); + int oldRow = data(idx, Qt::DisplayRole).toInt(); + CardSet *temp = model->sets.at(oldRow); + temp->setSortKey(row); + } + model->sets.sortByKey(); + + emit model->dataChanged(model->index(0, 0), model->index(model->rowCount() - 1, model->columnCount() - 1)); +} diff --git a/cockatrice/src/setsmodel.h b/cockatrice/src/setsmodel.h index eaf7d89b..69f69343 100644 --- a/cockatrice/src/setsmodel.h +++ b/cockatrice/src/setsmodel.h @@ -6,6 +6,8 @@ #include #include "carddatabase.h" +class SetsProxyModel; + class SetsMimeData : public QMimeData { Q_OBJECT private: @@ -18,6 +20,7 @@ public: class SetsModel : public QAbstractTableModel { Q_OBJECT + friend class SetsProxyModel; private: static const int NUM_COLS = 5; SetList sets; @@ -42,5 +45,6 @@ class SetsProxyModel : public QSortFilterProxyModel { Q_OBJECT public: SetsProxyModel(QObject *parent = 0); + void saveOrder(); }; #endif diff --git a/cockatrice/src/window_sets.cpp b/cockatrice/src/window_sets.cpp index d56f3487..c0fbb8f8 100644 --- a/cockatrice/src/window_sets.cpp +++ b/cockatrice/src/window_sets.cpp @@ -2,8 +2,9 @@ #include "setsmodel.h" #include "main.h" #include -#include +#include #include +#include WndSets::WndSets(QWidget *parent) : QMainWindow(parent) @@ -30,8 +31,15 @@ WndSets::WndSets(QWidget *parent) view->header()->setSectionResizeMode(SetsModel::LongNameCol, QHeaderView::ResizeToContents); #endif - QHBoxLayout *mainLayout = new QHBoxLayout; - mainLayout->addWidget(view); + saveButton = new QPushButton(tr("Save sets order")); + connect(saveButton, SIGNAL(clicked()), this, SLOT(actSave())); + restoreButton = new QPushButton(tr("Restore saved sets order")); + connect(restoreButton, SIGNAL(clicked()), this, SLOT(actRestore())); + + QGridLayout *mainLayout = new QGridLayout; + mainLayout->addWidget(view, 0, 0, 1, 2); + mainLayout->addWidget(saveButton, 1, 0, 1, 1); + mainLayout->addWidget(restoreButton, 1, 1, 1, 1); QWidget *centralWidget = new QWidget; centralWidget->setLayout(mainLayout); @@ -44,3 +52,13 @@ WndSets::WndSets(QWidget *parent) WndSets::~WndSets() { } + +void WndSets::actSave() +{ + proxyModel->saveOrder(); +} + +void WndSets::actRestore() +{ + view->sortByColumn(SetsModel::SortKeyCol, Qt::AscendingOrder); +} diff --git a/cockatrice/src/window_sets.h b/cockatrice/src/window_sets.h index 45317dd6..46570519 100644 --- a/cockatrice/src/window_sets.h +++ b/cockatrice/src/window_sets.h @@ -6,6 +6,7 @@ class SetsModel; class SetsProxyModel; class QTreeView; +class QPushButton; class CardDatabase; class WndSets : public QMainWindow { @@ -14,9 +15,13 @@ private: SetsModel *model; SetsProxyModel *proxyModel; QTreeView *view; + QPushButton *saveButton, *restoreButton; public: WndSets(QWidget *parent = 0); ~WndSets(); +private slots: + void actSave(); + void actRestore(); }; #endif