diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index 45895678..721a3d20 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -14,6 +14,7 @@ DlgFilterGames::DlgFilterGames(const QMap &allGameTypes, QWidget * : QDialog(parent) { unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games")); + passwordProtectedGamesVisibleCheckBox = new QCheckBox(tr("Show &password protected games")); QLabel *gameNameFilterLabel = new QLabel(tr("Game &description:")); gameNameFilterEdit = new QLineEdit; @@ -68,6 +69,7 @@ DlgFilterGames::DlgFilterGames(const QMap &allGameTypes, QWidget * leftGrid->addWidget(creatorNameFilterEdit, 1, 1); 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); @@ -102,6 +104,16 @@ void DlgFilterGames::setUnavailableGamesVisible(bool _unavailableGamesVisible) unavailableGamesVisibleCheckBox->setChecked(_unavailableGamesVisible); } +bool DlgFilterGames::getPasswordProtectedGamesVisible() const +{ + return passwordProtectedGamesVisibleCheckBox->isChecked(); +} + +void DlgFilterGames::setPasswordProtectedGamesVisible(bool _passwordProtectedGamesVisible) +{ + passwordProtectedGamesVisibleCheckBox->setChecked(_passwordProtectedGamesVisible); +} + QString DlgFilterGames::getGameNameFilter() const { return gameNameFilterEdit->text(); diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index d79c1841..5c768bc1 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -13,6 +13,7 @@ class DlgFilterGames : public QDialog { Q_OBJECT private: QCheckBox *unavailableGamesVisibleCheckBox; + QCheckBox *passwordProtectedGamesVisibleCheckBox; QLineEdit *gameNameFilterEdit; QLineEdit *creatorNameFilterEdit; QMap gameTypeFilterCheckBoxes; @@ -23,6 +24,8 @@ public: bool getUnavailableGamesVisible() const; void setUnavailableGamesVisible(bool _unavailableGamesVisible); + bool getPasswordProtectedGamesVisible() const; + void setPasswordProtectedGamesVisible(bool _passwordProtectedGamesVisible); QString getGameNameFilter() const; void setGameNameFilter(const QString &_gameNameFilter); QString getCreatorNameFilter() const; diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 14350789..86f86df9 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -82,6 +82,7 @@ void GameSelector::actSetFilter() gameTypeMap = gameListModel->getGameTypes().value(room->getRoomId()); DlgFilterGames dlg(gameTypeMap, this); dlg.setUnavailableGamesVisible(gameListProxyModel->getUnavailableGamesVisible()); + dlg.setPasswordProtectedGamesVisible(gameListProxyModel->getPasswordProtectedGamesVisible()); dlg.setGameNameFilter(gameListProxyModel->getGameNameFilter()); dlg.setCreatorNameFilter(gameListProxyModel->getCreatorNameFilter()); dlg.setGameTypeFilter(gameListProxyModel->getGameTypeFilter()); @@ -93,6 +94,7 @@ void GameSelector::actSetFilter() clearFilterButton->setEnabled(true); gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible()); + gameListProxyModel->setPasswordProtectedGamesVisible(dlg.getPasswordProtectedGamesVisible()); gameListProxyModel->setGameNameFilter(dlg.getGameNameFilter()); gameListProxyModel->setCreatorNameFilter(dlg.getCreatorNameFilter()); gameListProxyModel->setGameTypeFilter(dlg.getGameTypeFilter()); diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 5a1d6e6c..cbffc86d 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -105,6 +105,12 @@ void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible) invalidateFilter(); } +void GamesProxyModel::setPasswordProtectedGamesVisible(bool _passwordProtectedGamesVisible) +{ + passwordProtectedGamesVisible = _passwordProtectedGamesVisible; + invalidateFilter(); +} + void GamesProxyModel::setGameNameFilter(const QString &_gameNameFilter) { gameNameFilter = _gameNameFilter; @@ -133,6 +139,7 @@ void GamesProxyModel::setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlay void GamesProxyModel::resetFilterParameters() { unavailableGamesVisible = false; + passwordProtectedGamesVisible = false; gameNameFilter = QString(); creatorNameFilter = QString(); gameTypeFilter.clear(); @@ -158,6 +165,8 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc if (game.only_registered()) return false; } + if (!passwordProtectedGamesVisible && game.with_password()) + return false; if (!gameNameFilter.isEmpty()) if (!QString::fromStdString(game.description()).contains(gameNameFilter, Qt::CaseInsensitive)) return false; diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 977bf75d..843fb043 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -33,6 +33,7 @@ class GamesProxyModel : public QSortFilterProxyModel { private: ServerInfo_User *ownUser; bool unavailableGamesVisible; + bool passwordProtectedGamesVisible; QString gameNameFilter, creatorNameFilter; QSet gameTypeFilter; int maxPlayersFilterMin, maxPlayersFilterMax; @@ -41,6 +42,8 @@ public: bool getUnavailableGamesVisible() const { return unavailableGamesVisible; } void setUnavailableGamesVisible(bool _unavailableGamesVisible); + bool getPasswordProtectedGamesVisible() const { return passwordProtectedGamesVisible; } + void setPasswordProtectedGamesVisible(bool _passwordProtectedGamesVisible); QString getGameNameFilter() const { return gameNameFilter; } void setGameNameFilter(const QString &_gameNameFilter); QString getCreatorNameFilter() const { return creatorNameFilter; }