diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index dd762065..733c02dc 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -75,6 +76,7 @@ GameSelector::GameSelector(AbstractClient *_client, clearFilterButton->setIcon(QPixmap("theme:icons/clearsearch")); clearFilterButton->setEnabled(true); connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter())); + alteredFiltersLabel = new QLabel; if (room) { createButton = new QPushButton; @@ -88,6 +90,7 @@ GameSelector::GameSelector(AbstractClient *_client, if (showfilters) { buttonLayout->addWidget(filterButton); buttonLayout->addWidget(clearFilterButton); + buttonLayout->addWidget(alteredFiltersLabel); } buttonLayout->addStretch(); if (room) @@ -157,6 +160,8 @@ void GameSelector::actSetFilter() gameListProxyModel->setGameTypeFilter(dlg.getGameTypeFilter()); gameListProxyModel->setMaxPlayersFilter(dlg.getMaxPlayersFilterMin(), dlg.getMaxPlayersFilterMax()); gameListProxyModel->saveFilterParameters(gameTypeMap); + + setAlteredFiltersText(gameListProxyModel->getNumberOfAlteredFilters()); } void GameSelector::actClearFilter() @@ -165,6 +170,7 @@ void GameSelector::actClearFilter() gameListProxyModel->resetFilterParameters(); gameListProxyModel->saveFilterParameters(gameTypeMap); + alteredFiltersLabel->setText(tr("Filters reset to default")); } void GameSelector::actCreate() @@ -259,7 +265,8 @@ void GameSelector::retranslateUi() { setTitle(tr("Games")); filterButton->setText(tr("&Filter games")); - clearFilterButton->setText(tr("C&lear filter")); + clearFilterButton->setText(tr("Reset fi<ers")); + setAlteredFiltersText(gameListProxyModel->getNumberOfAlteredFilters()); if (createButton) createButton->setText(tr("C&reate")); joinButton->setText(tr("&Join")); @@ -282,3 +289,14 @@ void GameSelector::actSelectedGameChanged(const QModelIndex ¤t, const QMod spectateButton->setEnabled(game.spectators_allowed() || overrideRestrictions); joinButton->setEnabled(game.player_count() < game.max_players() || overrideRestrictions); } + +void GameSelector::setAlteredFiltersText(const int numAlteredFilters) +{ + if (alteredFiltersLabel != nullptr) { + if (numAlteredFilters == 0) { + alteredFiltersLabel->setText(tr("Default filters applied")); + } else { + alteredFiltersLabel->setText(tr("%1 filter(s) applied").arg(numAlteredFilters)); + } + } +} diff --git a/cockatrice/src/gameselector.h b/cockatrice/src/gameselector.h index 0e3249db..96b9889e 100644 --- a/cockatrice/src/gameselector.h +++ b/cockatrice/src/gameselector.h @@ -11,6 +11,7 @@ class QTreeView; class GamesModel; class GamesProxyModel; class QPushButton; +class QLabel; class QCheckBox; class AbstractClient; class TabSupervisor; @@ -44,8 +45,11 @@ private: GamesModel *gameListModel; GamesProxyModel *gameListProxyModel; QPushButton *filterButton, *clearFilterButton, *createButton, *joinButton, *spectateButton; + QLabel *alteredFiltersLabel; GameTypeMap gameTypeMap; + void setAlteredFiltersText(int numAlteredFilters); + public: GameSelector(AbstractClient *_client, const TabSupervisor *_tabSupervisor, diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 4aace4aa..01e39cd3 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -316,9 +316,9 @@ void GamesProxyModel::setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlay void GamesProxyModel::resetFilterParameters() { - unavailableGamesVisible = false; - showPasswordProtectedGames = true; - showBuddiesOnlyGames = true; + unavailableGamesVisible = DEFAULT_UNAVAILABLE_GAMES_VISIBLE; + showPasswordProtectedGames = DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES; + showBuddiesOnlyGames = DEFAULT_SHOW_BUDDIES_ONLY_GAMES; gameNameFilter = QString(); creatorNameFilter = QString(); gameTypeFilter.clear(); @@ -368,6 +368,39 @@ void GamesProxyModel::saveFilterParameters(const QMap &allGameType settingsCache->gameFilters().setMaxPlayers(maxPlayersFilterMax); } +int GamesProxyModel::getNumberOfAlteredFilters() const +{ + int numFiltersAltered = 0; + if (showBuddiesOnlyGames != DEFAULT_SHOW_BUDDIES_ONLY_GAMES) { + numFiltersAltered++; + } + if (hideIgnoredUserGames) { + numFiltersAltered++; + } + if (unavailableGamesVisible != DEFAULT_UNAVAILABLE_GAMES_VISIBLE) { + numFiltersAltered++; + } + if (showPasswordProtectedGames != DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES) { + numFiltersAltered++; + } + if (!gameNameFilter.isEmpty()) { + numFiltersAltered++; + } + if (!creatorNameFilter.isEmpty()) { + numFiltersAltered++; + } + if (!gameTypeFilter.isEmpty()) { + numFiltersAltered++; + } + if (maxPlayersFilterMin != -1 && maxPlayersFilterMin != 1) { + numFiltersAltered++; + } + if (maxPlayersFilterMax != -1 && maxPlayersFilterMax != DEFAULT_MAX_PLAYERS_MAX) { + numFiltersAltered++; + } + return numFiltersAltered; +} + 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 6a2484fe..fa605863 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -77,6 +77,9 @@ private: int maxPlayersFilterMin, maxPlayersFilterMax; static const int DEFAULT_MAX_PLAYERS_MAX = 99; + static const bool DEFAULT_UNAVAILABLE_GAMES_VISIBLE = false; + static const bool DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES = true; + static const bool DEFAULT_SHOW_BUDDIES_ONLY_GAMES = true; public: GamesProxyModel(QObject *parent = nullptr, const TabSupervisor *_tabSupervisor = nullptr); @@ -128,6 +131,7 @@ public: void resetFilterParameters(); void loadFilterParameters(const QMap &allGameTypes); void saveFilterParameters(const QMap &allGameTypes); + int getNumberOfAlteredFilters() const; void refresh(); protected: