diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index f1f6877e..a02ab941 100644 --- a/cockatrice/src/gameselector.cpp +++ b/cockatrice/src/gameselector.cpp @@ -20,7 +20,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); @@ -31,12 +31,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; @@ -68,20 +66,14 @@ 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(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() @@ -152,8 +144,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 797243d2..c4cb4b58 100644 --- a/cockatrice/src/gameselector.h +++ b/cockatrice/src/gameselector.h @@ -19,8 +19,7 @@ class ServerInfo_Game; 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(Response::ResponseCode response); @@ -35,11 +34,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(const ServerInfo_Game &info); }; -#endif \ No newline at end of file +#endif diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index cd893746..877fe896 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -98,21 +98,15 @@ void GamesModel::updateGameList(const 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(); } @@ -123,10 +117,15 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc return false; const ServerInfo_Game &game = model->getGame(sourceRow); - if ((game.player_count() == game.max_players()) && !fullGamesVisible) - return false; - if (game.started() && !runningGamesVisible) - return false; + if (!unavailableGamesVisible) { + if (game.player_count() == game.max_players()) + return false; + if (game.started()) + return false; + if (!(ownUser->user_level() & ServerInfo_User::IsRegistered)) + if (game.only_registered()) + return false; + } return true; } diff --git a/cockatrice/src/gamesmodel.h b/cockatrice/src/gamesmodel.h index 059d257e..e27cf0f0 100644 --- a/cockatrice/src/gamesmodel.h +++ b/cockatrice/src/gamesmodel.h @@ -7,6 +7,7 @@ #include "gametypemap.h" class ServerInfo_Game; +class ServerInfo_User; class GamesModel : public QAbstractTableModel { Q_OBJECT @@ -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 e60cdf7f..1961d8de 100644 --- a/cockatrice/src/tab_room.cpp +++ b/cockatrice/src/tab_room.cpp @@ -25,8 +25,8 @@ #include "pb/event_room_say.pb.h" #include "pending_command.h" -TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_ownName, const ServerInfo_Room &info) - : Tab(_tabSupervisor), client(_client), roomId(info.room_id()), roomName(QString::fromStdString(info.name())), ownName(_ownName) +TabRoom::TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *_ownUser, const ServerInfo_Room &info) + : Tab(_tabSupervisor), client(_client), roomId(info.room_id()), roomName(QString::fromStdString(info.name())), ownUser(_ownUser) { const int gameTypeListSize = info.gametype_list_size(); for (int i = 0; i < gameTypeListSize; ++i) @@ -38,7 +38,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(QString::fromStdString(ownUser->name()), 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 bce51fc1..16ed082f 100644 --- a/cockatrice/src/tab_room.h +++ b/cockatrice/src/tab_room.h @@ -23,6 +23,7 @@ class Event_RoomSay; class GameSelector; class Response; class PendingCommand; +class ServerInfo_User; class TabRoom : public Tab { Q_OBJECT @@ -30,7 +31,7 @@ private: AbstractClient *client; int roomId; QString roomName; - QString ownName; + ServerInfo_User *ownUser; QMap gameTypes; GameSelector *gameSelector; @@ -55,7 +56,7 @@ private slots: void processLeaveRoomEvent(const Event_LeaveRoom &event); void processRoomSayEvent(const Event_RoomSay &event); public: - TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, const QString &_ownName, const ServerInfo_Room &info); + TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *_ownUser, const ServerInfo_Room &info); ~TabRoom(); void retranslateUi(); void closeRequest(); diff --git a/cockatrice/src/tab_supervisor.cpp b/cockatrice/src/tab_supervisor.cpp index 353537bb..36753402 100644 --- a/cockatrice/src/tab_supervisor.cpp +++ b/cockatrice/src/tab_supervisor.cpp @@ -273,7 +273,7 @@ void TabSupervisor::gameLeft(TabGame *tab) void TabSupervisor::addRoomTab(const ServerInfo_Room &info, bool setCurrent) { - TabRoom *tab = new TabRoom(this, client, QString::fromStdString(userInfo->name()), 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);