From 089edc53d01aa28bd61c70a06a22bf89d98308c9 Mon Sep 17 00:00:00 2001 From: poixen Date: Sun, 3 Jul 2016 16:28:21 +0200 Subject: [PATCH] filter buddies only --- cockatrice/src/dlg_filter_games.cpp | 26 +++++++++++++++++-- cockatrice/src/dlg_filter_games.h | 4 +++ cockatrice/src/gameselector.cpp | 1 + cockatrice/src/gamesmodel.cpp | 10 +++++++ cockatrice/src/gamesmodel.h | 3 +++ .../src/settings/gamefilterssettings.cpp | 11 ++++++++ cockatrice/src/settings/gamefilterssettings.h | 4 ++- 7 files changed, 56 insertions(+), 3 deletions(-) diff --git a/cockatrice/src/dlg_filter_games.cpp b/cockatrice/src/dlg_filter_games.cpp index ff02dcc6..6aeba14b 100644 --- a/cockatrice/src/dlg_filter_games.cpp +++ b/cockatrice/src/dlg_filter_games.cpp @@ -16,6 +16,9 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, const Ga allGameTypes(_allGameTypes), gamesProxyModel(_gamesProxyModel) { + showBuddiesOnlyGames = new QCheckBox(tr("Show '&buddies only' games")); + showBuddiesOnlyGames->setChecked(gamesProxyModel->getShowBuddiesOnlyGames()); + unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games")); unavailableGamesVisibleCheckBox->setChecked(gamesProxyModel->getUnavailableGamesVisible()); @@ -73,14 +76,23 @@ DlgFilterGames::DlgFilterGames(const QMap &_allGameTypes, const Ga QGroupBox *maxPlayersGroupBox = new QGroupBox(tr("Maximum player count")); maxPlayersGroupBox->setLayout(maxPlayersFilterLayout); + QGridLayout *restrictionsLayout = new QGridLayout; + restrictionsLayout->addWidget(unavailableGamesVisibleCheckBox, 0, 0); + restrictionsLayout->addWidget(showPasswordProtectedGames, 1, 0); + restrictionsLayout->addWidget(showBuddiesOnlyGames, 2, 0); + + QGroupBox *restrictionsGroupBox = new QGroupBox(tr("Restrictions")); + restrictionsGroupBox->setLayout(restrictionsLayout); + + QGridLayout *leftGrid = new QGridLayout; leftGrid->addWidget(gameNameFilterLabel, 0, 0); leftGrid->addWidget(gameNameFilterEdit, 0, 1); leftGrid->addWidget(creatorNameFilterLabel, 1, 0); leftGrid->addWidget(creatorNameFilterEdit, 1, 1); leftGrid->addWidget(maxPlayersGroupBox, 2, 0, 1, 2); - leftGrid->addWidget(unavailableGamesVisibleCheckBox, 3, 0, 1, 2); - leftGrid->addWidget(showPasswordProtectedGames, 4, 0, 1, 2); + leftGrid->addWidget(restrictionsGroupBox, 3, 0, 1, 2); + QVBoxLayout *leftColumn = new QVBoxLayout; leftColumn->addLayout(leftGrid); @@ -119,6 +131,16 @@ void DlgFilterGames::setUnavailableGamesVisible(bool _unavailableGamesVisible) unavailableGamesVisibleCheckBox->setChecked(_unavailableGamesVisible); } +bool DlgFilterGames::getShowBuddiesOnlyGames() const +{ + return showBuddiesOnlyGames->isChecked(); +} + +void DlgFilterGames::setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames) +{ + showBuddiesOnlyGames->setChecked(_showBuddiesOnlyGames); +} + bool DlgFilterGames::getShowPasswordProtectedGames() const { return showPasswordProtectedGames->isChecked(); diff --git a/cockatrice/src/dlg_filter_games.h b/cockatrice/src/dlg_filter_games.h index 57ae5b8d..5b7ca6be 100644 --- a/cockatrice/src/dlg_filter_games.h +++ b/cockatrice/src/dlg_filter_games.h @@ -4,6 +4,7 @@ #include #include #include +#include #include "gamesmodel.h" class QCheckBox; @@ -13,6 +14,7 @@ class QSpinBox; class DlgFilterGames : public QDialog { Q_OBJECT private: + QCheckBox *showBuddiesOnlyGames; QCheckBox *unavailableGamesVisibleCheckBox; QCheckBox *showPasswordProtectedGames; QLineEdit *gameNameFilterEdit; @@ -33,6 +35,8 @@ public: void setUnavailableGamesVisible(bool _unavailableGamesVisible); bool getShowPasswordProtectedGames() const; void setShowPasswordProtectedGames(bool _passwordProtectedGamesHidden); + bool getShowBuddiesOnlyGames() const; + void setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames); QString getGameNameFilter() const; void setGameNameFilter(const QString &_gameNameFilter); QString getCreatorNameFilter() const; diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 802812b5..2f1a3c08 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -109,6 +109,7 @@ void GameSelector::actSetFilter() clearFilterButton->setEnabled(true); + gameListProxyModel->setShowBuddiesOnlyGames(dlg.getShowBuddiesOnlyGames()); gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible()); gameListProxyModel->setShowPasswordProtectedGames(dlg.getShowPasswordProtectedGames()); gameListProxyModel->setGameNameFilter(dlg.getGameNameFilter()); diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 0e537fee..fe1f6919 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -231,6 +231,11 @@ GamesProxyModel::GamesProxyModel(QObject *parent, ServerInfo_User *_ownUser) setDynamicSortFilter(true); } +void GamesProxyModel::setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames) { + showBuddiesOnlyGames = _showBuddiesOnlyGames; + invalidateFilter(); +} + void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible) { unavailableGamesVisible = _unavailableGamesVisible; @@ -303,6 +308,7 @@ void GamesProxyModel::loadFilterParameters(const QMap &allGameType void GamesProxyModel::saveFilterParameters(const QMap &allGameTypes) { + settingsCache->gameFilters().setShowBuddiesOnlyGames(showBuddiesOnlyGames); settingsCache->gameFilters().setUnavailableGamesVisible(unavailableGamesVisible); settingsCache->gameFilters().setShowPasswordProtectedGames(showPasswordProtectedGames); settingsCache->gameFilters().setGameNameFilter(gameNameFilter); @@ -325,6 +331,10 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc return false; const ServerInfo_Game &game = model->getGame(sourceRow); + + if (!showBuddiesOnlyGames && game.only_buddies()) { + return false; + } if (!unavailableGamesVisible) { if (game.player_count() == game.max_players()) return false; diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 97d31b94..4c4e4d8c 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -46,6 +46,7 @@ class GamesProxyModel : public QSortFilterProxyModel { Q_OBJECT private: ServerInfo_User *ownUser; + bool showBuddiesOnlyGames; bool unavailableGamesVisible; bool showPasswordProtectedGames; QString gameNameFilter, creatorNameFilter; @@ -56,6 +57,8 @@ private: public: GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0); + bool getShowBuddiesOnlyGames() const {return showBuddiesOnlyGames; } + void setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames); bool getUnavailableGamesVisible() const { return unavailableGamesVisible; } void setUnavailableGamesVisible(bool _unavailableGamesVisible); bool getShowPasswordProtectedGames() const { return showPasswordProtectedGames; } diff --git a/cockatrice/src/settings/gamefilterssettings.cpp b/cockatrice/src/settings/gamefilterssettings.cpp index 105924a4..169ca79e 100644 --- a/cockatrice/src/settings/gamefilterssettings.cpp +++ b/cockatrice/src/settings/gamefilterssettings.cpp @@ -15,6 +15,17 @@ QString GameFiltersSettings::hashGameType(const QString &gameType) const return QCryptographicHash::hash(gameType.toUtf8(), QCryptographicHash::Md5).toHex(); } +void GameFiltersSettings::setShowBuddiesOnlyGames(bool show) +{ + setValue(show, "show_buddies_only_games", "filter_games"); +} + +bool GameFiltersSettings::isShowBuddiesOnlyGames() +{ + QVariant previous = getValue("show_buddies_only_games", "filter_games"); + return previous == QVariant() ? true : previous.toBool(); +} + void GameFiltersSettings::setUnavailableGamesVisible(bool enabled) { setValue(enabled, "unavailable_games_visible","filter_games"); diff --git a/cockatrice/src/settings/gamefilterssettings.h b/cockatrice/src/settings/gamefilterssettings.h index 16035960..f8e3fac9 100644 --- a/cockatrice/src/settings/gamefilterssettings.h +++ b/cockatrice/src/settings/gamefilterssettings.h @@ -7,7 +7,8 @@ class GameFiltersSettings : public SettingsManager { Q_OBJECT friend class SettingsCache; -public: +public: + bool isShowBuddiesOnlyGames(); bool isUnavailableGamesVisible(); bool isShowPasswordProtectedGames(); QString getGameNameFilter(); @@ -15,6 +16,7 @@ public: int getMaxPlayers(); bool isGameTypeEnabled(QString gametype); + void setShowBuddiesOnlyGames(bool show); void setUnavailableGamesVisible(bool enabled); void setShowPasswordProtectedGames(bool show); void setGameNameFilter(QString gameName);