From 6a4384f90352a5565ad5e188d529bec7d7167bcc Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 15:05:33 -0800 Subject: [PATCH 1/9] WIP: Refactor gamesproxymodel to own the persistence layer. --- cockatrice/src/dlg_filter_games.cpp | 66 ++++++++++++----------------- cockatrice/src/dlg_filter_games.h | 7 ++- cockatrice/src/gameselector.cpp | 39 +++++++++++------ cockatrice/src/gamesmodel.cpp | 38 +++++++++++++++-- cockatrice/src/gamesmodel.h | 8 ++++ 5 files changed, 98 insertions(+), 60 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index eb2e8f78..9b7f2982 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -1,4 +1,5 @@ #include "dlg_filter_games.h" +#include #include #include #include @@ -12,49 +13,38 @@ #include #include -DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, QWidget *parent) +DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, GamesProxyModel *_gamesProxyModel, QWidget *parent) : QDialog(parent), - allGameTypes(_allGameTypes) + allGameTypes(_allGameTypes), + gamesProxyModel(_gamesProxyModel) { QSettings settings; settings.beginGroup("filter_games"); unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games")); - unavailableGamesVisibleCheckBox->setChecked( - settings.value("unavailable_games_visible", false).toBool() - ); + qDebug() << "getUnavailableGamesVisible() == " << gamesProxyModel->getUnavailableGamesVisible(); + unavailableGamesVisibleCheckBox->setChecked(gamesProxyModel->getUnavailableGamesVisible()); passwordProtectedGamesVisibleCheckBox = new QCheckBox(tr("Show &password protected games")); - passwordProtectedGamesVisibleCheckBox->setChecked( - settings.value("password_protected_games_visible", false).toBool() - ); - + passwordProtectedGamesVisibleCheckBox->setChecked(gamesProxyModel->getPasswordProtectedGamesVisible()); + gameNameFilterEdit = new QLineEdit; - gameNameFilterEdit->setText( - settings.value("game_name_filter", "").toString() - ); + gameNameFilterEdit->setText(gamesProxyModel->getGameNameFilter()); QLabel *gameNameFilterLabel = new QLabel(tr("Game &description:")); gameNameFilterLabel->setBuddy(gameNameFilterEdit); - + creatorNameFilterEdit = new QLineEdit; - creatorNameFilterEdit->setText( - settings.value("creator_name_filter", "").toString() - ); + creatorNameFilterEdit->setText(gamesProxyModel->getCreatorNameFilter()); QLabel *creatorNameFilterLabel = new QLabel(tr("&Creator name:")); creatorNameFilterLabel->setBuddy(creatorNameFilterEdit); - + QVBoxLayout *gameTypeFilterLayout = new QVBoxLayout; QMapIterator gameTypesIterator(allGameTypes); while (gameTypesIterator.hasNext()) { gameTypesIterator.next(); QCheckBox *temp = new QCheckBox(gameTypesIterator.value()); - temp->setChecked( - settings.value( - "game_type/" + hashGameType(gameTypesIterator.value()), - false - ).toBool() - ); + temp->setChecked(gamesProxyModel->getGameTypeFilter().contains(gameTypesIterator.key())); gameTypeFilterCheckBoxes.insert(gameTypesIterator.key(), temp); gameTypeFilterLayout->addWidget(temp); @@ -65,34 +55,30 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, QWidget gameTypeFilterGroupBox->setLayout(gameTypeFilterLayout); } else gameTypeFilterGroupBox = 0; - + QLabel *maxPlayersFilterMinLabel = new QLabel(tr("at &least:")); maxPlayersFilterMinSpinBox = new QSpinBox; maxPlayersFilterMinSpinBox->setMinimum(1); maxPlayersFilterMinSpinBox->setMaximum(99); - maxPlayersFilterMinSpinBox->setValue( - settings.value("min_players", 1).toInt() - ); + maxPlayersFilterMinSpinBox->setValue(gamesProxyModel->getMaxPlayersFilterMin()); maxPlayersFilterMinLabel->setBuddy(maxPlayersFilterMinSpinBox); - + QLabel *maxPlayersFilterMaxLabel = new QLabel(tr("at &most:")); maxPlayersFilterMaxSpinBox = new QSpinBox; maxPlayersFilterMaxSpinBox->setMinimum(1); maxPlayersFilterMaxSpinBox->setMaximum(99); - maxPlayersFilterMaxSpinBox->setValue( - settings.value("max_players", 99).toInt() - ); + maxPlayersFilterMaxSpinBox->setValue(gamesProxyModel->getMaxPlayersFilterMax()); maxPlayersFilterMaxLabel->setBuddy(maxPlayersFilterMaxSpinBox); - + QGridLayout *maxPlayersFilterLayout = new QGridLayout; maxPlayersFilterLayout->addWidget(maxPlayersFilterMinLabel, 0, 0); maxPlayersFilterLayout->addWidget(maxPlayersFilterMinSpinBox, 0, 1); maxPlayersFilterLayout->addWidget(maxPlayersFilterMaxLabel, 1, 0); maxPlayersFilterLayout->addWidget(maxPlayersFilterMaxSpinBox, 1, 1); - + QGroupBox *maxPlayersGroupBox = new QGroupBox(tr("Maximum player count")); maxPlayersGroupBox->setLayout(maxPlayersFilterLayout); - + QGridLayout *leftGrid = new QGridLayout; leftGrid->addWidget(gameNameFilterLabel, 0, 0); leftGrid->addWidget(gameNameFilterEdit, 0, 1); @@ -101,26 +87,26 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, QWidget leftGrid->addWidget(maxPlayersGroupBox, 2, 0, 1, 2); leftGrid->addWidget(unavailableGamesVisibleCheckBox, 3, 0, 1, 2); leftGrid->addWidget(passwordProtectedGamesVisibleCheckBox, 4, 0, 1, 2); - + QVBoxLayout *leftColumn = new QVBoxLayout; leftColumn->addLayout(leftGrid); leftColumn->addStretch(); - + QVBoxLayout *rightColumn = new QVBoxLayout; rightColumn->addWidget(gameTypeFilterGroupBox); - + QHBoxLayout *hbox = new QHBoxLayout; hbox->addLayout(leftColumn); hbox->addLayout(rightColumn); - + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); connect(buttonBox, SIGNAL(accepted()), this, SLOT(actOk())); connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addLayout(hbox); mainLayout->addWidget(buttonBox); - + setLayout(mainLayout); setWindowTitle(tr("Filter games")); } diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index 2480e642..31723cca 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -4,6 +4,7 @@ #include #include #include +#include "gamesmodel.h" class QCheckBox; class QLineEdit; @@ -21,6 +22,8 @@ private: QSpinBox *maxPlayersFilterMaxSpinBox; const QMap &allGameTypes; + // This needs a const someplace + GamesProxyModel *gamesProxyModel; /* * The game type might contain special characters, so to use it in @@ -30,8 +33,8 @@ private: private slots: void actOk(); public: - DlgFilterGames(const QMap &allGameTypes, QWidget *parent = 0); - + DlgFilterGames(const QMap &_allGameTypes, GamesProxyModel *_gamesProxyModel, QWidget *parent = 0); + bool getUnavailableGamesVisible() const; void setUnavailableGamesVisible(bool _unavailableGamesVisible); bool getPasswordProtectedGamesVisible() const; diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 4cbfbedb..8187a875 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -32,8 +33,17 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup gameListView->setRootIsDecorated(true); if (_room) gameListView->header()->hideSection(gameListModel->roomColIndex()); - else - gameListProxyModel->setUnavailableGamesVisible(true); + + GameTypeMap gameTypeMap; + if (room) + gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); + + gameListProxyModel->loadFilterParameters(gameTypeMap); + + qDebug() << "Check unavailable" << gameListProxyModel->getUnavailableGamesVisible(); + + // set the reset filter button enabled + #if QT_VERSION < 0x050000 gameListView->header()->setResizeMode(0, QHeaderView::ResizeToContents); #else @@ -82,16 +92,17 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup void GameSelector::actSetFilter() { - GameTypeMap gameTypeMap; - if (room) - gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); - DlgFilterGames dlg(gameTypeMap, this); - + GameTypeMap gameTypeMap; + if (room) + gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); + qDebug() << "Check unavailable" << gameListProxyModel->getUnavailableGamesVisible(); + DlgFilterGames dlg(gameTypeMap, gameListProxyModel, this); + if (!dlg.exec()) return; - + clearFilterButton->setEnabled(true); - + gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible()); gameListProxyModel->setPasswordProtectedGamesVisible(dlg.getPasswordProtectedGamesVisible()); gameListProxyModel->setGameNameFilter(dlg.getGameNameFilter()); @@ -103,7 +114,7 @@ void GameSelector::actSetFilter() void GameSelector::actClearFilter() { clearFilterButton->setEnabled(false); - + gameListProxyModel->resetFilterParameters(); } @@ -136,7 +147,7 @@ void GameSelector::checkResponse(const Response &response) void GameSelector::actJoin() { bool spectator = sender() == spectateButton; - + QModelIndex ind = gameListView->currentIndex(); if (!ind.isValid()) return; @@ -149,19 +160,19 @@ void GameSelector::actJoin() if (!ok) return; } - + Command_JoinGame cmd; cmd.set_game_id(game.game_id()); cmd.set_password(password.toStdString()); cmd.set_spectator(spectator); cmd.set_override_restrictions(overrideRestrictions); - + TabRoom *r = tabSupervisor->getRoomTabs().value(game.room_id()); if (!r) { QMessageBox::critical(this, tr("Error"), tr("Please join the respective room first.")); return; } - + PendingCommand *pend = r->prepareRoomCommand(cmd); connect(pend, SIGNAL(finished(Response, CommandContainer, QVariant)), this, SLOT(checkResponse(Response))); r->sendRoomCommand(pend); diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 112b4324..de6db572 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include namespace { const unsigned SECS_PER_MIN = 60; @@ -10,7 +12,7 @@ namespace { /** * Pretty print an integer number of seconds ago. Accurate to only one unit, - * rounded; <5 minutes and >5 hours are displayed as such. As a special case, + * rounded; <5 minutes and >5 hours are displayed as such. As a special case, * time between 60 and 90 minutes will display both the hours and minutes. * * For example... @@ -85,7 +87,7 @@ QVariant GamesModel::data(const QModelIndex &index, int role) const QDateTime then; then.setTime_t(g.start_time()); unsigned int secs = then.secsTo(QDateTime::currentDateTime()); - + switch (role) { case Qt::DisplayRole: return prettyPrintSecsAgo(secs); case SORT_ROLE: return QVariant(secs); @@ -221,8 +223,32 @@ void GamesProxyModel::resetFilterParameters() gameNameFilter = QString(); creatorNameFilter = QString(); gameTypeFilter.clear(); - maxPlayersFilterMin = -1; - maxPlayersFilterMax = -1; + maxPlayersFilterMin = 1; + maxPlayersFilterMax = 99; + + invalidateFilter(); +} + +void GamesProxyModel::loadFilterParameters(const QMap &allGameTypes) +{ + QSettings settings; + settings.beginGroup("filter_games"); + + unavailableGamesVisible = settings.value("unavailable_games_visible", false).toBool(); + qDebug() << "Load unavailable = " << unavailableGamesVisible; + passwordProtectedGamesVisible = settings.value("password_protected_games_visible", false).toBool(); + gameNameFilter = settings.value("game_name_filter", "").toString(); + creatorNameFilter = settings.value("creator_name_filter", "").toString(); + maxPlayersFilterMin = settings.value("min_players", 1).toInt(); + maxPlayersFilterMax = settings.value("max_players", 99).toInt(); + + QMapIterator gameTypesIterator(allGameTypes); + while (gameTypesIterator.hasNext()) { + gameTypesIterator.next(); + if (settings.value("game_type/" + hashGameType(gameTypesIterator.value()), false).toBool()) { + gameTypeFilter.insert(gameTypesIterator.key()); + } + } invalidateFilter(); } @@ -265,3 +291,7 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc return true; } + +QString GamesProxyModel::hashGameType(const QString &gameType) const { + return QCryptographicHash::hash(gameType.toUtf8(), QCryptographicHash::Md5).toHex(); +} diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 85432cf1..cb719299 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -49,6 +49,12 @@ private: QString gameNameFilter, creatorNameFilter; QSet gameTypeFilter; int maxPlayersFilterMin, maxPlayersFilterMax; + + /* + * The game type might contain special characters, so to use it in + * QSettings we just hash it. + */ + QString hashGameType(const QString &gameType) const; public: GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0); @@ -66,6 +72,8 @@ public: int getMaxPlayersFilterMax() const { return maxPlayersFilterMax; } void setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlayersFilterMax); void resetFilterParameters(); + void loadFilterParameters(const QMap &allGameTypes); + void saveFilterParameters(); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; }; From dbfbfcc837e04888fdc1162b28d6d4a9fce043f2 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 15:19:36 -0800 Subject: [PATCH 2/9] WIP: refactor filters to save to persistence from within model. --- cockatrice/src/dlg_filter_games.cpp | 28 ---------------------------- cockatrice/src/gameselector.cpp | 1 + cockatrice/src/gamesmodel.cpp | 27 +++++++++++++++++++++++++++ cockatrice/src/gamesmodel.h | 2 +- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index 9b7f2982..3d82f419 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -112,34 +112,6 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, GamesPro } void DlgFilterGames::actOk() { - QSettings settings; - settings.beginGroup("filter_games"); - settings.setValue( - "unavailable_games_visible", - unavailableGamesVisibleCheckBox->isChecked() - ); - settings.setValue( - "password_protected_games_visible", - passwordProtectedGamesVisibleCheckBox->isChecked() - ); - settings.setValue("game_name_filter", gameNameFilterEdit->text()); - settings.setValue("creator_name_filter", creatorNameFilterEdit->text()); - - QMapIterator gameTypeIterator(allGameTypes); - QMapIterator checkboxIterator(gameTypeFilterCheckBoxes); - while (gameTypeIterator.hasNext()) { - gameTypeIterator.next(); - checkboxIterator.next(); - - settings.setValue( - "game_type/" + hashGameType(gameTypeIterator.value()), - checkboxIterator.value()->isChecked() - ); - } - - settings.setValue("min_players", maxPlayersFilterMinSpinBox->value()); - settings.setValue("max_players", maxPlayersFilterMaxSpinBox->value()); - accept(); } diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 8187a875..3c158ac4 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -109,6 +109,7 @@ void GameSelector::actSetFilter() gameListProxyModel->setCreatorNameFilter(dlg.getCreatorNameFilter()); gameListProxyModel->setGameTypeFilter(dlg.getGameTypeFilter()); gameListProxyModel->setMaxPlayersFilter(dlg.getMaxPlayersFilterMin(), dlg.getMaxPlayersFilterMax()); + gameListProxyModel->saveFilterParameters(gameTypeMap); } void GameSelector::actClearFilter() diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index de6db572..dd8adece 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -253,6 +253,33 @@ void GamesProxyModel::loadFilterParameters(const QMap &allGameType invalidateFilter(); } +void GamesProxyModel::saveFilterParameters(const QMap &allGameTypes) +{ + QSettings settings; + settings.beginGroup("filter_games"); + + settings.setValue("unavailable_games_visible", unavailableGamesVisible); + settings.setValue( + "password_protected_games_visible", + passwordProtectedGamesVisible + ); + settings.setValue("game_name_filter", gameNameFilter); + settings.setValue("creator_name_filter", creatorNameFilter); + + QMapIterator gameTypeIterator(allGameTypes); + while (gameTypeIterator.hasNext()) { + gameTypeIterator.next(); + + settings.setValue( + "game_type/" + hashGameType(gameTypeIterator.value()), + gameTypeFilter.contains(gameTypeIterator.key()) + ); + } + + settings.setValue("min_players", maxPlayersFilterMin); + settings.setValue("max_players", maxPlayersFilterMax); +} + bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourceParent*/) const { GamesModel *model = qobject_cast(sourceModel()); diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index cb719299..0f4056e3 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -73,7 +73,7 @@ public: void setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlayersFilterMax); void resetFilterParameters(); void loadFilterParameters(const QMap &allGameTypes); - void saveFilterParameters(); + void saveFilterParameters(const QMap &allGameTypes); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; }; From b1e5153ea5d05a4bb2a171c381e7290dcdca13b8 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 17:03:17 -0800 Subject: [PATCH 3/9] Should be a const ptr. --- cockatrice/src/dlg_filter_games.cpp | 2 +- cockatrice/src/dlg_filter_games.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index 3d82f419..cb369d49 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -13,7 +13,7 @@ #include #include -DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, GamesProxyModel *_gamesProxyModel, QWidget *parent) +DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, const GamesProxyModel *_gamesProxyModel, QWidget *parent) : QDialog(parent), allGameTypes(_allGameTypes), gamesProxyModel(_gamesProxyModel) diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index 31723cca..7cd02c89 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -23,7 +23,7 @@ private: const QMap &allGameTypes; // This needs a const someplace - GamesProxyModel *gamesProxyModel; + const GamesProxyModel *gamesProxyModel; /* * The game type might contain special characters, so to use it in @@ -33,7 +33,7 @@ private: private slots: void actOk(); public: - DlgFilterGames(const QMap &_allGameTypes, GamesProxyModel *_gamesProxyModel, QWidget *parent = 0); + DlgFilterGames(const QMap &_allGameTypes, const GamesProxyModel *_gamesProxyModel, QWidget *parent = 0); bool getUnavailableGamesVisible() const; void setUnavailableGamesVisible(bool _unavailableGamesVisible); From f1803fe879877096879d9b9db1d04cb2971baba1 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 17:06:30 -0800 Subject: [PATCH 4/9] Remove some debug. --- cockatrice/src/dlg_filter_games.cpp | 2 -- cockatrice/src/gameselector.cpp | 4 ---- cockatrice/src/gamesmodel.cpp | 1 - 3 files changed, 7 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index cb369d49..257d7b80 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -1,5 +1,4 @@ #include "dlg_filter_games.h" -#include #include #include #include @@ -22,7 +21,6 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, const Ga settings.beginGroup("filter_games"); unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games")); - qDebug() << "getUnavailableGamesVisible() == " << gamesProxyModel->getUnavailableGamesVisible(); unavailableGamesVisibleCheckBox->setChecked(gamesProxyModel->getUnavailableGamesVisible()); passwordProtectedGamesVisibleCheckBox = new QCheckBox(tr("Show &password protected games")); diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 3c158ac4..8e4878e3 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -40,8 +39,6 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup gameListProxyModel->loadFilterParameters(gameTypeMap); - qDebug() << "Check unavailable" << gameListProxyModel->getUnavailableGamesVisible(); - // set the reset filter button enabled #if QT_VERSION < 0x050000 @@ -95,7 +92,6 @@ void GameSelector::actSetFilter() GameTypeMap gameTypeMap; if (room) gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); - qDebug() << "Check unavailable" << gameListProxyModel->getUnavailableGamesVisible(); DlgFilterGames dlg(gameTypeMap, gameListProxyModel, this); if (!dlg.exec()) diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index dd8adece..22cf6b33 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -235,7 +235,6 @@ void GamesProxyModel::loadFilterParameters(const QMap &allGameType settings.beginGroup("filter_games"); unavailableGamesVisible = settings.value("unavailable_games_visible", false).toBool(); - qDebug() << "Load unavailable = " << unavailableGamesVisible; passwordProtectedGamesVisible = settings.value("password_protected_games_visible", false).toBool(); gameNameFilter = settings.value("game_name_filter", "").toString(); creatorNameFilter = settings.value("creator_name_filter", "").toString(); From 1e78596dfaebe2b2b3ca4efd6f2a80a24e55721a Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 17:07:30 -0800 Subject: [PATCH 5/9] Remove unused function. --- cockatrice/src/dlg_filter_games.cpp | 4 ---- cockatrice/src/dlg_filter_games.h | 5 ----- 2 files changed, 9 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index 257d7b80..7c33b8b8 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -113,10 +113,6 @@ void DlgFilterGames::actOk() { accept(); } -QString DlgFilterGames::hashGameType(const QString &gameType) const { - return QCryptographicHash::hash(gameType.toUtf8(), QCryptographicHash::Md5).toHex(); -} - bool DlgFilterGames::getUnavailableGamesVisible() const { return unavailableGamesVisibleCheckBox->isChecked(); diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index 7cd02c89..18c01b0c 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -25,11 +25,6 @@ private: // This needs a const someplace const GamesProxyModel *gamesProxyModel; - /* - * The game type might contain special characters, so to use it in - * QSettings we just hash it. - */ - QString hashGameType(const QString &gameType) const; private slots: void actOk(); public: From f01d26bf96e848918a316aeeb2175e1d1385f23f Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 17:10:55 -0800 Subject: [PATCH 6/9] Enable the clear filter button by default. --- cockatrice/src/gameselector.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 8e4878e3..a043e561 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -39,8 +39,6 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup gameListProxyModel->loadFilterParameters(gameTypeMap); - // set the reset filter button enabled - #if QT_VERSION < 0x050000 gameListView->header()->setResizeMode(0, QHeaderView::ResizeToContents); #else @@ -51,7 +49,7 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter())); clearFilterButton = new QPushButton; clearFilterButton->setIcon(QIcon(":/resources/icon_clearsearch.svg")); - clearFilterButton->setEnabled(false); + clearFilterButton->setEnabled(true); connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter())); if (room) { From bb317003b40dc270f89247b2060e8361a6a65b03 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Fri, 2 Jan 2015 17:23:15 -0800 Subject: [PATCH 7/9] Save filters after a filter clear. Remove some duplicated code. --- cockatrice/src/gameselector.cpp | 5 +---- cockatrice/src/gameselector.h | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index a043e561..a04cd694 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -33,7 +33,6 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup if (_room) gameListView->header()->hideSection(gameListModel->roomColIndex()); - GameTypeMap gameTypeMap; if (room) gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); @@ -87,9 +86,6 @@ GameSelector::GameSelector(AbstractClient *_client, const TabSupervisor *_tabSup void GameSelector::actSetFilter() { - GameTypeMap gameTypeMap; - if (room) - gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); DlgFilterGames dlg(gameTypeMap, gameListProxyModel, this); if (!dlg.exec()) @@ -111,6 +107,7 @@ void GameSelector::actClearFilter() clearFilterButton->setEnabled(false); gameListProxyModel->resetFilterParameters(); + gameListProxyModel->saveFilterParameters(gameTypeMap); } void GameSelector::actCreate() diff --git a/cockatrice/src/gameselector.h b/cockatrice/src/gameselector.h index 47a9c395..8e043850 100644 --- a/cockatrice/src/gameselector.h +++ b/cockatrice/src/gameselector.h @@ -34,6 +34,7 @@ private: GamesModel *gameListModel; GamesProxyModel *gameListProxyModel; QPushButton *filterButton, *clearFilterButton, *createButton, *joinButton, *spectateButton; + GameTypeMap gameTypeMap; public: GameSelector(AbstractClient *_client, const TabSupervisor *_tabSupervisor, TabRoom *_room, const QMap &_rooms, const QMap &_gameTypes, QWidget *parent = 0); void retranslateUi(); From 8eb0e2dbef04804b68f2cf884df2b268b65765f5 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Sun, 4 Jan 2015 15:31:59 -0800 Subject: [PATCH 8/9] Remove reminder. --- cockatrice/src/dlg_filter_games.h | 1 - 1 file changed, 1 deletion(-) diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index 18c01b0c..9374e387 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -22,7 +22,6 @@ private: QSpinBox *maxPlayersFilterMaxSpinBox; const QMap &allGameTypes; - // This needs a const someplace const GamesProxyModel *gamesProxyModel; private slots: From 4a2a61ef46dc4a34e540ca5e3add20b09c4ab988 Mon Sep 17 00:00:00 2001 From: Jeffrey Oliver Date: Sun, 4 Jan 2015 15:32:29 -0800 Subject: [PATCH 9/9] Replace the 99 with a const int. --- cockatrice/src/gamesmodel.cpp | 4 ++-- cockatrice/src/gamesmodel.h | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 22cf6b33..e8e55d44 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -224,7 +224,7 @@ void GamesProxyModel::resetFilterParameters() creatorNameFilter = QString(); gameTypeFilter.clear(); maxPlayersFilterMin = 1; - maxPlayersFilterMax = 99; + maxPlayersFilterMax = DEFAULT_MAX_PLAYERS_MAX; invalidateFilter(); } @@ -239,7 +239,7 @@ void GamesProxyModel::loadFilterParameters(const QMap &allGameType gameNameFilter = settings.value("game_name_filter", "").toString(); creatorNameFilter = settings.value("creator_name_filter", "").toString(); maxPlayersFilterMin = settings.value("min_players", 1).toInt(); - maxPlayersFilterMax = settings.value("max_players", 99).toInt(); + maxPlayersFilterMax = settings.value("max_players", DEFAULT_MAX_PLAYERS_MAX).toInt(); QMapIterator gameTypesIterator(allGameTypes); while (gameTypesIterator.hasNext()) { diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 0f4056e3..23c7e592 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -50,6 +50,8 @@ private: QSet gameTypeFilter; int maxPlayersFilterMin, maxPlayersFilterMax; + static const int DEFAULT_MAX_PLAYERS_MAX = 99; + /* * The game type might contain special characters, so to use it in * QSettings we just hash it.