diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index 63ede6ec..927d2e62 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -18,7 +18,7 @@ GameSelector::GameSelector(AbstractClient *_client, TabSupervisor *_tabSuperviso { gameListView = new QTreeView; gameListModel = new GamesModel(_rooms, _gameTypes, this); - gameListProxyModel = new GamesProxyModel(this); + gameListProxyModel = new GamesProxyModel(this, tabSupervisor->getUserInfo()); gameListProxyModel->setSourceModel(gameListModel); gameListProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); gameListView->setModel(gameListProxyModel); @@ -29,12 +29,10 @@ GameSelector::GameSelector(AbstractClient *_client, TabSupervisor *_tabSuperviso gameListView->header()->hideSection(1); gameListView->header()->setResizeMode(1, QHeaderView::ResizeToContents); - showFullGamesCheckBox = new QCheckBox; - showRunningGamesCheckBox = new QCheckBox; + showUnavailableGamesCheckBox = new QCheckBox; QVBoxLayout *filterLayout = new QVBoxLayout; - filterLayout->addWidget(showFullGamesCheckBox); - filterLayout->addWidget(showRunningGamesCheckBox); + filterLayout->addWidget(showUnavailableGamesCheckBox); if (room) createButton = new QPushButton; @@ -65,21 +63,15 @@ GameSelector::GameSelector(AbstractClient *_client, TabSupervisor *_tabSuperviso setMinimumWidth((qreal) (gameListView->columnWidth(0) * gameListModel->columnCount()) / 1.5); setMinimumHeight(200); - connect(showFullGamesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(showFullGamesChanged(int))); - connect(showRunningGamesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(showRunningGamesChanged(int))); + connect(showUnavailableGamesCheckBox, SIGNAL(stateChanged(int)), this, SLOT(showUnavailableGamesChanged(int))); connect(createButton, SIGNAL(clicked()), this, SLOT(actCreate())); connect(joinButton, SIGNAL(clicked()), this, SLOT(actJoin())); connect(spectateButton, SIGNAL(clicked()), this, SLOT(actJoin())); } -void GameSelector::showFullGamesChanged(int state) +void GameSelector::showUnavailableGamesChanged(int state) { - gameListProxyModel->setFullGamesVisible(state); -} - -void GameSelector::showRunningGamesChanged(int state) -{ - gameListProxyModel->setRunningGamesVisible(state); + gameListProxyModel->setUnavailableGamesVisible(state); } void GameSelector::actCreate() @@ -138,8 +130,7 @@ void GameSelector::actJoin() void GameSelector::retranslateUi() { setTitle(tr("Games")); - showFullGamesCheckBox->setText(tr("Show &full games")); - showRunningGamesCheckBox->setText(tr("Show &running games")); + showUnavailableGamesCheckBox->setText(tr("Show u&navailable games")); if (createButton) createButton->setText(tr("C&reate")); joinButton->setText(tr("&Join")); diff --git a/cockatrice/src/gameselector.h b/cockatrice/src/gameselector.h index 16fc2d7d..13ec71a5 100644 --- a/cockatrice/src/gameselector.h +++ b/cockatrice/src/gameselector.h @@ -18,8 +18,7 @@ class TabRoom; class GameSelector : public QGroupBox { Q_OBJECT private slots: - void showFullGamesChanged(int state); - void showRunningGamesChanged(int state); + void showUnavailableGamesChanged(int state); void actCreate(); void actJoin(); void checkResponse(ResponseCode response); @@ -34,11 +33,11 @@ private: GamesModel *gameListModel; GamesProxyModel *gameListProxyModel; QPushButton *createButton, *joinButton, *spectateButton; - QCheckBox *showFullGamesCheckBox, *showRunningGamesCheckBox; + QCheckBox *showUnavailableGamesCheckBox; public: GameSelector(AbstractClient *_client, TabSupervisor *_tabSupervisor, TabRoom *_room, const QMap &_rooms, const QMap &_gameTypes, QWidget *parent = 0); void retranslateUi(); void processGameInfo(ServerInfo_Game *info); }; -#endif \ No newline at end of file +#endif diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 031c4207..5b9dd77e 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -106,21 +106,15 @@ void GamesModel::updateGameList(ServerInfo_Game *_game) endInsertRows(); } -GamesProxyModel::GamesProxyModel(QObject *parent) - : QSortFilterProxyModel(parent), fullGamesVisible(false) +GamesProxyModel::GamesProxyModel(QObject *parent, ServerInfo_User *_ownUser) + : QSortFilterProxyModel(parent), ownUser(_ownUser), unavailableGamesVisible(false) { setDynamicSortFilter(true); } -void GamesProxyModel::setFullGamesVisible(bool _fullGamesVisible) +void GamesProxyModel::setUnavailableGamesVisible(bool _unavailableGamesVisible) { - fullGamesVisible = _fullGamesVisible; - invalidateFilter(); -} - -void GamesProxyModel::setRunningGamesVisible(bool _runningGamesVisible) -{ - runningGamesVisible = _runningGamesVisible; + unavailableGamesVisible = _unavailableGamesVisible; invalidateFilter(); } @@ -131,10 +125,15 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc return false; ServerInfo_Game *game = model->getGame(sourceRow); - if ((game->getPlayerCount() == game->getMaxPlayers()) && !fullGamesVisible) - return false; - if (game->getStarted() && !runningGamesVisible) - return false; + if (!unavailableGamesVisible) { + if (game->getPlayerCount() == game->getMaxPlayers()) + return false; + if (game->getStarted()) + return false; + if (!(ownUser->getUserLevel() & ServerInfo_User::IsRegistered)) + if (game->getOnlyRegistered()) + return false; + } return true; } diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 8461faf6..3832157c 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -5,6 +5,7 @@ #include #include #include "gametypemap.h" +#include "protocol_datastructures.h" class ServerInfo_Game; @@ -29,12 +30,11 @@ public: class GamesProxyModel : public QSortFilterProxyModel { Q_OBJECT private: - bool fullGamesVisible; - bool runningGamesVisible; + ServerInfo_User *ownUser; + bool unavailableGamesVisible; public: - GamesProxyModel(QObject *parent = 0); - void setFullGamesVisible(bool _fullGamesVisible); - void setRunningGamesVisible(bool _runningGamesVisible); + GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0); + void setUnavailableGamesVisible(bool _unavailableGamesVisible); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; }; diff --git a/cockatrice/src/tab_room.cpp b/cockatrice/src/tab_room.cpp index ed418824..49090cd6 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -17,8 +17,8 @@ #include "chatview.h" #include "gameselector.h" -TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_ownName, ServerInfo_Room *info) - : Tab(_tabSupervisor), client(_client), roomId(info->getRoomId()), roomName(info->getName()), ownName(_ownName) +TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *_ownUser, ServerInfo_Room *info) + : Tab(_tabSupervisor), client(_client), roomId(info->getRoomId()), roomName(info->getName()), ownUser(_ownUser) { const QList gameTypeList = info->getGameTypeList(); for (int i = 0; i < gameTypeList.size(); ++i) @@ -30,7 +30,7 @@ TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const Q userList = new UserList(tabSupervisor, client, UserList::RoomList); connect(userList, SIGNAL(openMessageDialog(const QString &, bool)), this, SIGNAL(openMessageDialog(const QString &, bool))); - chatView = new ChatView(ownName, true); + chatView = new ChatView(ownUser->getName(), true); connect(chatView, SIGNAL(showCardInfoPopup(QPoint, QString)), this, SLOT(showCardInfoPopup(QPoint, QString))); connect(chatView, SIGNAL(deleteCardInfoPopup(QString)), this, SLOT(deleteCardInfoPopup(QString))); sayLabel = new QLabel; diff --git a/cockatrice/src/tab_room.h b/cockatrice/src/tab_room.h index 37e6a3d1..676bd8e0 100644 --- a/cockatrice/src/tab_room.h +++ b/cockatrice/src/tab_room.h @@ -2,6 +2,7 @@ #define TAB_ROOM_H #include "tab.h" +#include "protocol_datastructures.h" #include #include @@ -28,7 +29,7 @@ private: AbstractClient *client; int roomId; QString roomName; - QString ownName; + ServerInfo_User *ownUser; QMap gameTypes; GameSelector *gameSelector; @@ -53,7 +54,7 @@ private slots: void processLeaveRoomEvent(Event_LeaveRoom *event); void processSayEvent(Event_RoomSay *event); public: - TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_ownName, ServerInfo_Room *info); + TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *_ownUser, ServerInfo_Room *info); ~TabRoom(); void retranslateUi(); void closeRequest(); diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index 62bf331e..6f56d1ae 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -265,7 +265,7 @@ void TabSupervisor::gameLeft(TabGame *tab) void TabSupervisor::addRoomTab(ServerInfo_Room *info, bool setCurrent) { - TabRoom *tab = new TabRoom(this, client, userInfo->getName(), info); + TabRoom *tab = new TabRoom(this, client, userInfo, info); connect(tab, SIGNAL(roomClosing(TabRoom *)), this, SLOT(roomLeft(TabRoom *))); connect(tab, SIGNAL(openMessageDialog(const QString &, bool)), this, SLOT(addMessageTab(const QString &, bool))); int tabIndex = myAddTab(tab);