Fix #3957: Properly set filters to defaults on initial load and disable "Clear filters" button if filters are set to defaults. (#4088)

* Fix #3957: Properly set filters to defaults on initial load and disable "Clear filters" button if filters are set to defaults

* Reuse resetFilterParameters() in GamesProxyModel constructor, and remove "off" designation for player min/max (as a default of 1/99 is enforced by the UI).
This commit is contained in:
Kaitlin 2020-09-09 11:24:54 -04:00 committed by GitHub
parent ade3e81682
commit 79f590c99a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 11 deletions

View file

@ -74,7 +74,11 @@ GameSelector::GameSelector(AbstractClient *_client,
connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter())); connect(filterButton, SIGNAL(clicked()), this, SLOT(actSetFilter()));
clearFilterButton = new QPushButton; clearFilterButton = new QPushButton;
clearFilterButton->setIcon(QPixmap("theme:icons/clearsearch")); clearFilterButton->setIcon(QPixmap("theme:icons/clearsearch"));
clearFilterButton->setEnabled(true); if (showFilters && gameListProxyModel->areFilterParametersSetToDefaults()) {
clearFilterButton->setEnabled(false);
} else {
clearFilterButton->setEnabled(true);
}
connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter())); connect(clearFilterButton, SIGNAL(clicked()), this, SLOT(actClearFilter()));
if (room) { if (room) {
@ -149,8 +153,6 @@ void GameSelector::actSetFilter()
if (!dlg.exec()) if (!dlg.exec())
return; return;
clearFilterButton->setEnabled(true);
gameListProxyModel->setShowBuddiesOnlyGames(dlg.getShowBuddiesOnlyGames()); gameListProxyModel->setShowBuddiesOnlyGames(dlg.getShowBuddiesOnlyGames());
gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible()); gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible());
gameListProxyModel->setShowPasswordProtectedGames(dlg.getShowPasswordProtectedGames()); gameListProxyModel->setShowPasswordProtectedGames(dlg.getShowPasswordProtectedGames());
@ -161,6 +163,8 @@ void GameSelector::actSetFilter()
gameListProxyModel->setMaxPlayersFilter(dlg.getMaxPlayersFilterMin(), dlg.getMaxPlayersFilterMax()); gameListProxyModel->setMaxPlayersFilter(dlg.getMaxPlayersFilterMin(), dlg.getMaxPlayersFilterMax());
gameListProxyModel->saveFilterParameters(gameTypeMap); gameListProxyModel->saveFilterParameters(gameTypeMap);
clearFilterButton->setEnabled(!gameListProxyModel->areFilterParametersSetToDefaults());
updateTitle(); updateTitle();
} }

View file

@ -258,9 +258,9 @@ void GamesModel::updateGameList(const ServerInfo_Game &game)
GamesProxyModel::GamesProxyModel(QObject *parent, const TabSupervisor *_tabSupervisor) GamesProxyModel::GamesProxyModel(QObject *parent, const TabSupervisor *_tabSupervisor)
: QSortFilterProxyModel(parent), ownUserIsRegistered(_tabSupervisor->isOwnUserRegistered()), : QSortFilterProxyModel(parent), ownUserIsRegistered(_tabSupervisor->isOwnUserRegistered()),
tabSupervisor(_tabSupervisor), showBuddiesOnlyGames(false), hideIgnoredUserGames(false), tabSupervisor(_tabSupervisor)
unavailableGamesVisible(false), showPasswordProtectedGames(true), maxPlayersFilterMin(-1), maxPlayersFilterMax(-1)
{ {
resetFilterParameters();
setSortRole(GamesModel::SORT_ROLE); setSortRole(GamesModel::SORT_ROLE);
setDynamicSortFilter(true); setDynamicSortFilter(true);
} }
@ -331,18 +331,29 @@ int GamesProxyModel::getNumFilteredGames() const
void GamesProxyModel::resetFilterParameters() void GamesProxyModel::resetFilterParameters()
{ {
unavailableGamesVisible = false; unavailableGamesVisible = DEFAULT_UNAVAILABLE_GAMES_VISIBLE;
showPasswordProtectedGames = true; showPasswordProtectedGames = DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES;
showBuddiesOnlyGames = true; showBuddiesOnlyGames = DEFAULT_SHOW_BUDDIES_ONLY_GAMES;
hideIgnoredUserGames = DEFAULT_HIDE_IGNORED_USER_GAMES;
gameNameFilter = QString(); gameNameFilter = QString();
creatorNameFilter = QString(); creatorNameFilter = QString();
gameTypeFilter.clear(); gameTypeFilter.clear();
maxPlayersFilterMin = 1; maxPlayersFilterMin = DEFAULT_MAX_PLAYERS_MIN;
maxPlayersFilterMax = DEFAULT_MAX_PLAYERS_MAX; maxPlayersFilterMax = DEFAULT_MAX_PLAYERS_MAX;
invalidateFilter(); invalidateFilter();
} }
bool GamesProxyModel::areFilterParametersSetToDefaults() const
{
return unavailableGamesVisible == DEFAULT_UNAVAILABLE_GAMES_VISIBLE &&
showPasswordProtectedGames == DEFAULT_SHOW_PASSWORD_PROTECTED_GAMES &&
showBuddiesOnlyGames == DEFAULT_SHOW_BUDDIES_ONLY_GAMES &&
hideIgnoredUserGames == DEFAULT_HIDE_IGNORED_USER_GAMES && gameNameFilter.isEmpty() &&
creatorNameFilter.isEmpty() && gameTypeFilter.isEmpty() && maxPlayersFilterMin == DEFAULT_MAX_PLAYERS_MIN &&
maxPlayersFilterMax == DEFAULT_MAX_PLAYERS_MAX;
}
void GamesProxyModel::loadFilterParameters(const QMap<int, QString> &allGameTypes) void GamesProxyModel::loadFilterParameters(const QMap<int, QString> &allGameTypes)
{ {
GameFiltersSettings &gameFilters = SettingsCache::instance().gameFilters(); GameFiltersSettings &gameFilters = SettingsCache::instance().gameFilters();
@ -428,9 +439,9 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow) const
if (!gameTypeFilter.isEmpty() && gameTypes.intersect(gameTypeFilter).isEmpty()) if (!gameTypeFilter.isEmpty() && gameTypes.intersect(gameTypeFilter).isEmpty())
return false; return false;
if ((maxPlayersFilterMin != -1) && ((int)game.max_players() < maxPlayersFilterMin)) if ((int)game.max_players() < maxPlayersFilterMin)
return false; return false;
if ((maxPlayersFilterMax != -1) && ((int)game.max_players() > maxPlayersFilterMax)) if ((int)game.max_players() > maxPlayersFilterMax)
return false; return false;
return true; return true;

View file

@ -76,6 +76,11 @@ private:
QSet<int> gameTypeFilter; QSet<int> gameTypeFilter;
int maxPlayersFilterMin, maxPlayersFilterMax; int maxPlayersFilterMin, maxPlayersFilterMax;
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;
static const bool DEFAULT_HIDE_IGNORED_USER_GAMES = false;
static const int DEFAULT_MAX_PLAYERS_MIN = 1;
static const int DEFAULT_MAX_PLAYERS_MAX = 99; static const int DEFAULT_MAX_PLAYERS_MAX = 99;
public: public:
@ -127,6 +132,7 @@ public:
void setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlayersFilterMax); void setMaxPlayersFilter(int _maxPlayersFilterMin, int _maxPlayersFilterMax);
int getNumFilteredGames() const; int getNumFilteredGames() const;
void resetFilterParameters(); void resetFilterParameters();
bool areFilterParametersSetToDefaults() const;
void loadFilterParameters(const QMap<int, QString> &allGameTypes); void loadFilterParameters(const QMap<int, QString> &allGameTypes);
void saveFilterParameters(const QMap<int, QString> &allGameTypes); void saveFilterParameters(const QMap<int, QString> &allGameTypes);
void refresh(); void refresh();