Merge pull request #2049 from Cockatrice/filterBuddiesOnly

filter buddies only
This commit is contained in:
ctrlaltca 2016-07-03 23:08:44 +02:00 committed by GitHub
commit 066aff96d7
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), allGameTypes(_allGameTypes),
gamesProxyModel(_gamesProxyModel) gamesProxyModel(_gamesProxyModel)
{ {
showBuddiesOnlyGames = new QCheckBox(tr("Show '&buddies only' games"));
showBuddiesOnlyGames->setChecked(gamesProxyModel->getShowBuddiesOnlyGames());
unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games")); unavailableGamesVisibleCheckBox = new QCheckBox(tr("Show &unavailable games"));
unavailableGamesVisibleCheckBox->setChecked(gamesProxyModel->getUnavailableGamesVisible()); 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")); QGroupBox *maxPlayersGroupBox = new QGroupBox(tr("Maximum player count"));
maxPlayersGroupBox->setLayout(maxPlayersFilterLayout); 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; QGridLayout *leftGrid = new QGridLayout;
leftGrid->addWidget(gameNameFilterLabel, 0, 0); leftGrid->addWidget(gameNameFilterLabel, 0, 0);
leftGrid->addWidget(gameNameFilterEdit, 0, 1); leftGrid->addWidget(gameNameFilterEdit, 0, 1);
leftGrid->addWidget(creatorNameFilterLabel, 1, 0); leftGrid->addWidget(creatorNameFilterLabel, 1, 0);
leftGrid->addWidget(creatorNameFilterEdit, 1, 1); leftGrid->addWidget(creatorNameFilterEdit, 1, 1);
leftGrid->addWidget(maxPlayersGroupBox, 2, 0, 1, 2); leftGrid->addWidget(maxPlayersGroupBox, 2, 0, 1, 2);
leftGrid->addWidget(unavailableGamesVisibleCheckBox, 3, 0, 1, 2); leftGrid->addWidget(restrictionsGroupBox, 3, 0, 1, 2);
leftGrid->addWidget(showPasswordProtectedGames, 4, 0, 1, 2);
QVBoxLayout *leftColumn = new QVBoxLayout; QVBoxLayout *leftColumn = new QVBoxLayout;
leftColumn->addLayout(leftGrid); leftColumn->addLayout(leftGrid);
@ -119,6 +131,16 @@ void DlgFilterGames::setUnavailableGamesVisible(bool _unavailableGamesVisible)
unavailableGamesVisibleCheckBox->setChecked(_unavailableGamesVisible); unavailableGamesVisibleCheckBox->setChecked(_unavailableGamesVisible);
} }
bool DlgFilterGames::getShowBuddiesOnlyGames() const
{
return showBuddiesOnlyGames->isChecked();
}
void DlgFilterGames::setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames)
{
showBuddiesOnlyGames->setChecked(_showBuddiesOnlyGames);
}
bool DlgFilterGames::getShowPasswordProtectedGames() const bool DlgFilterGames::getShowPasswordProtectedGames() const
{ {
return showPasswordProtectedGames->isChecked(); return showPasswordProtectedGames->isChecked();

View file

@ -4,6 +4,7 @@
#include <QDialog> #include <QDialog>
#include <QSet> #include <QSet>
#include <QMap> #include <QMap>
#include <QCheckBox>
#include "gamesmodel.h" #include "gamesmodel.h"
class QCheckBox; class QCheckBox;
@ -13,6 +14,7 @@ class QSpinBox;
class DlgFilterGames : public QDialog { class DlgFilterGames : public QDialog {
Q_OBJECT Q_OBJECT
private: private:
QCheckBox *showBuddiesOnlyGames;
QCheckBox *unavailableGamesVisibleCheckBox; QCheckBox *unavailableGamesVisibleCheckBox;
QCheckBox *showPasswordProtectedGames; QCheckBox *showPasswordProtectedGames;
QLineEdit *gameNameFilterEdit; QLineEdit *gameNameFilterEdit;
@ -33,6 +35,8 @@ public:
void setUnavailableGamesVisible(bool _unavailableGamesVisible); void setUnavailableGamesVisible(bool _unavailableGamesVisible);
bool getShowPasswordProtectedGames() const; bool getShowPasswordProtectedGames() const;
void setShowPasswordProtectedGames(bool _passwordProtectedGamesHidden); void setShowPasswordProtectedGames(bool _passwordProtectedGamesHidden);
bool getShowBuddiesOnlyGames() const;
void setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames);
QString getGameNameFilter() const; QString getGameNameFilter() const;
void setGameNameFilter(const QString &_gameNameFilter); void setGameNameFilter(const QString &_gameNameFilter);
QString getCreatorNameFilter() const; QString getCreatorNameFilter() const;

View file

@ -109,6 +109,7 @@ void GameSelector::actSetFilter()
clearFilterButton->setEnabled(true); clearFilterButton->setEnabled(true);
gameListProxyModel->setShowBuddiesOnlyGames(dlg.getShowBuddiesOnlyGames());
gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible()); gameListProxyModel->setUnavailableGamesVisible(dlg.getUnavailableGamesVisible());
gameListProxyModel->setShowPasswordProtectedGames(dlg.getShowPasswordProtectedGames()); gameListProxyModel->setShowPasswordProtectedGames(dlg.getShowPasswordProtectedGames());
gameListProxyModel->setGameNameFilter(dlg.getGameNameFilter()); gameListProxyModel->setGameNameFilter(dlg.getGameNameFilter());

View file

@ -231,6 +231,11 @@ GamesProxyModel::GamesProxyModel(QObject *parent, ServerInfo_User *_ownUser)
setDynamicSortFilter(true); setDynamicSortFilter(true);
} }
void GamesProxyModel::setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames) {
showBuddiesOnlyGames = _showBuddiesOnlyGames;
invalidateFilter();
}
void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible) void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible)
{ {
unavailableGamesVisible = _unavailableGamesVisible; unavailableGamesVisible = _unavailableGamesVisible;
@ -303,6 +308,7 @@ void GamesProxyModel::loadFilterParameters(const QMap<int, QString> &allGameType
void GamesProxyModel::saveFilterParameters(const QMap<int, QString> &allGameTypes) void GamesProxyModel::saveFilterParameters(const QMap<int, QString> &allGameTypes)
{ {
settingsCache->gameFilters().setShowBuddiesOnlyGames(showBuddiesOnlyGames);
settingsCache->gameFilters().setUnavailableGamesVisible(unavailableGamesVisible); settingsCache->gameFilters().setUnavailableGamesVisible(unavailableGamesVisible);
settingsCache->gameFilters().setShowPasswordProtectedGames(showPasswordProtectedGames); settingsCache->gameFilters().setShowPasswordProtectedGames(showPasswordProtectedGames);
settingsCache->gameFilters().setGameNameFilter(gameNameFilter); settingsCache->gameFilters().setGameNameFilter(gameNameFilter);
@ -325,6 +331,10 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc
return false; return false;
const ServerInfo_Game &game = model->getGame(sourceRow); const ServerInfo_Game &game = model->getGame(sourceRow);
if (!showBuddiesOnlyGames && game.only_buddies()) {
return false;
}
if (!unavailableGamesVisible) { if (!unavailableGamesVisible) {
if (game.player_count() == game.max_players()) if (game.player_count() == game.max_players())
return false; return false;

View file

@ -46,6 +46,7 @@ class GamesProxyModel : public QSortFilterProxyModel {
Q_OBJECT Q_OBJECT
private: private:
ServerInfo_User *ownUser; ServerInfo_User *ownUser;
bool showBuddiesOnlyGames;
bool unavailableGamesVisible; bool unavailableGamesVisible;
bool showPasswordProtectedGames; bool showPasswordProtectedGames;
QString gameNameFilter, creatorNameFilter; QString gameNameFilter, creatorNameFilter;
@ -56,6 +57,8 @@ private:
public: public:
GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0); GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0);
bool getShowBuddiesOnlyGames() const {return showBuddiesOnlyGames; }
void setShowBuddiesOnlyGames(bool _showBuddiesOnlyGames);
bool getUnavailableGamesVisible() const { return unavailableGamesVisible; } bool getUnavailableGamesVisible() const { return unavailableGamesVisible; }
void setUnavailableGamesVisible(bool _unavailableGamesVisible); void setUnavailableGamesVisible(bool _unavailableGamesVisible);
bool getShowPasswordProtectedGames() const { return showPasswordProtectedGames; } 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(); 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) void GameFiltersSettings::setUnavailableGamesVisible(bool enabled)
{ {
setValue(enabled, "unavailable_games_visible","filter_games"); setValue(enabled, "unavailable_games_visible","filter_games");

View file

@ -7,7 +7,8 @@ class GameFiltersSettings : public SettingsManager
{ {
Q_OBJECT Q_OBJECT
friend class SettingsCache; friend class SettingsCache;
public: public:
bool isShowBuddiesOnlyGames();
bool isUnavailableGamesVisible(); bool isUnavailableGamesVisible();
bool isShowPasswordProtectedGames(); bool isShowPasswordProtectedGames();
QString getGameNameFilter(); QString getGameNameFilter();
@ -15,6 +16,7 @@ public:
int getMaxPlayers(); int getMaxPlayers();
bool isGameTypeEnabled(QString gametype); bool isGameTypeEnabled(QString gametype);
void setShowBuddiesOnlyGames(bool show);
void setUnavailableGamesVisible(bool enabled); void setUnavailableGamesVisible(bool enabled);
void setShowPasswordProtectedGames(bool show); void setShowPasswordProtectedGames(bool show);
void setGameNameFilter(QString gameName); void setGameNameFilter(QString gameName);