Fix #3068: Add hint text about game list filters (#3946)

Kaitlin Huben <kaitlin.huben+gitlab@gmail.com>
This commit is contained in:
Kaitlin 2020-04-07 17:55:36 -04:00 committed by GitHub
parent 27b7ebe208
commit 2c3eab9b0c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 63 additions and 4 deletions

View file

@ -18,6 +18,7 @@
#include <QHBoxLayout>
#include <QHeaderView>
#include <QInputDialog>
#include <QLabel>
#include <QMessageBox>
#include <QPushButton>
#include <QTreeView>
@ -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&lters"));
setAlteredFiltersText(gameListProxyModel->getNumberOfAlteredFilters());
if (createButton)
createButton->setText(tr("C&reate"));
joinButton->setText(tr("&Join"));
@ -282,3 +289,14 @@ void GameSelector::actSelectedGameChanged(const QModelIndex &current, 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));
}
}
}

View file

@ -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,

View file

@ -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<int, QString> &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<GamesModel *>(sourceModel());

View file

@ -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<int, QString> &allGameTypes);
void saveFilterParameters(const QMap<int, QString> &allGameTypes);
int getNumberOfAlteredFilters() const;
void refresh();
protected: