filter buddies only

This commit is contained in:
poixen 2016-07-03 16:28:21 +02:00
parent e038534a51
commit 089edc53d0
7 changed files with 56 additions and 3 deletions

View file

@ -16,6 +16,9 @@ DlgFilterGames::DlgFilterGames(const QMap<int, QString> &_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<int, QString> &_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();

View file

@ -4,6 +4,7 @@
#include <QDialog>
#include <QSet>
#include <QMap>
#include <QCheckBox>
#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;

View file

@ -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());

View file

@ -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<int, QString> &allGameType
void GamesProxyModel::saveFilterParameters(const QMap<int, QString> &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;

View file

@ -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; }

View file

@ -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");

View file

@ -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);