diff --git a/cockatrice/src/gameselector.cpp b/cockatrice/src/gameselector.cpp index db6402c5..4ec06863 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, room->getCurrentUser()); gameListProxyModel->setSourceModel(gameListModel); gameListProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive); gameListView->setModel(gameListProxyModel); diff --git a/cockatrice/src/gamesmodel.cpp b/cockatrice/src/gamesmodel.cpp index 46a93d73..5f5f05da 100644 --- a/cockatrice/src/gamesmodel.cpp +++ b/cockatrice/src/gamesmodel.cpp @@ -106,8 +106,8 @@ void GamesModel::updateGameList(ServerInfo_Game *_game) endInsertRows(); } -GamesProxyModel::GamesProxyModel(QObject *parent) - : QSortFilterProxyModel(parent), unjoinableGamesVisible(false) +GamesProxyModel::GamesProxyModel(QObject *parent, ServerInfo_User *_ownUser) + : QSortFilterProxyModel(parent), ownUser(_ownUser), unjoinableGamesVisible(false) { setDynamicSortFilter(true); } @@ -130,6 +130,9 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc 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 5a859abe..bafd15b4 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,9 +30,10 @@ public: class GamesProxyModel : public QSortFilterProxyModel { Q_OBJECT private: + ServerInfo_User *ownUser; bool unjoinableGamesVisible; public: - GamesProxyModel(QObject *parent = 0); + GamesProxyModel(QObject *parent = 0, ServerInfo_User *_ownUser = 0); void setUnjoinableGamesVisible(bool _unjoinableGamesVisible); 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..a3b767ec 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(); @@ -62,6 +63,7 @@ public: const QMap &getGameTypes() const { return gameTypes; } QString getChannelName() const { return roomName; } QString getTabText() const { return roomName; } + ServerInfo_User *getCurrentUser() { return ownUser; } }; #endif 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);