Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
tab_room.h
Go to the documentation of this file.
1
7
8#ifndef TAB_ROOM_H
9#define TAB_ROOM_H
10
11#include "tab.h"
12
13#include <QColor>
14#include <QList>
15#include <QMap>
16#include <QString>
17#include <QStringList>
18#include <qtmetamacros.h>
19
20class UserListProxy;
21class QAction;
22class QTabBar;
23class QWidget;
24class QGroupBox;
25class QSplitter;
26class QMenu;
27class QStackedWidget;
28class QStringListModel;
29class TabSupervisor;
30
31namespace google
32{
33namespace protobuf
34{
35class Message;
36}
37} // namespace google
38class AbstractClient;
39class UserListWidget;
41class QLabel;
42class ChatView;
43class QCompleter;
44class RoomEvent;
45class ServerInfo_Room;
46class Event_ListGames;
47class Event_JoinRoom;
48class Event_LeaveRoom;
49class Event_RoomSay;
52class GameSelector;
53class Response;
54class PendingCommand;
55class ServerInfo_User;
57
58class TabRoom : public Tab
59{
60 Q_OBJECT
61private:
63 int roomId;
64 QString roomName;
67
73 QStackedWidget *chatViewStack;
74 QTabBar *channelTabBar;
75 QWidget *sayWidget;
81 QStringList channelIds;
84 QLabel *sayLabel;
86 QStringListModel *mentionModel;
87 QGroupBox *chatGroupBox;
88 QSplitter *chatSplitter;
90
91 QMenu *roomMenu;
92 QAction *aLeaveRoom;
94 QAction *aClearChat;
95 [[nodiscard]] QString sanitizeHtml(QString dirty) const;
96
98 QCompleter *mentionCompleter;
99signals:
101 void openMessageDialog(const QString &userName, bool focus);
103 void notIdle();
105private slots:
106 void sendMessage();
107 void onChannelChanged(int index);
108 void onChannelTabClicked(int index);
109 void setChatCollapsed(bool collapsed);
110 void actClearChat();
111 void actOpenChatSettings();
112 void addMentionTag(QString mentionTag);
113 void focusTab();
114 void actShowMentionPopup(const QString &sender);
115 void actShowPopup(const QString &message);
116 void actCompleterChanged();
117
118 void processListGamesEvent(const Event_ListGames &event);
119 void processJoinRoomEvent(const Event_JoinRoom &event);
120 void processLeaveRoomEvent(const Event_LeaveRoom &event);
121 void processRoomSayEvent(const Event_RoomSay &event);
124 void refreshShortcuts();
125
127 void updateChannelTab(const QString &channelId);
128 void updateSayEnabled();
129 void markChannelMessage(const QString &channelId, const QString &message, const ServerInfo_User &senderInfo);
130 [[nodiscard]] bool messageContainsMention(const QString &message, const ServerInfo_User &senderInfo) const;
131 [[nodiscard]] bool isRoomMessageIgnored(const QString &senderName, ServerInfo_User &userInfoOut) const;
132 static QColor parseColorHex(const QString &hex, const QColor &fallback);
133
134protected slots:
135 void closeEvent(QCloseEvent *event) override;
136
137public:
138 TabRoom(TabSupervisor *_tabSupervisor,
139 AbstractClient *_client,
140 ServerInfo_User *_ownUser,
141 const ServerInfo_Room &info);
142 void retranslateUi() override;
143 void tabActivated() override;
144 void processRoomEvent(const RoomEvent &event);
145 [[nodiscard]] int getRoomId() const
146 {
147 return roomId;
148 }
149 [[nodiscard]] QString getRoomName() const
150 {
151 return roomName;
152 }
153 [[nodiscard]] const QMap<int, QString> &getGameTypes() const
154 {
155 return gameTypes;
156 }
157 [[nodiscard]] QString getChannelName() const
158 {
159 return roomName;
160 }
161 [[nodiscard]] QString getTabText() const override
162 {
163 return roomName;
164 }
165 [[nodiscard]] const ServerInfo_User *getUserInfo() const
166 {
167 return ownUser;
168 }
169 [[nodiscard]] GameSelector *getGameSelector() const
170 {
171 return gameSelector;
172 }
173
174 PendingCommand *prepareRoomCommand(const ::google::protobuf::Message &cmd);
176};
177
178#endif
Definition abstract_client.h:73
Definition chat_view.h:56
Provides a widget for displaying, filtering, joining, spectating, and creating games in a room.
Definition game_selector.h:44
Definition line_edit_completer.h:33
Definition pending_command.h:20
Definition remote_connection_controller.h:20
Definition game.h:18
QStringList channelIds
Definition tab_room.h:81
QString getTabText() const override
Definition tab_room.h:161
void openMessageDialog(const QString &userName, bool focus)
void processJoinRoomEvent(const Event_JoinRoom &event)
Definition tab_room.cpp:628
void actClearChat()
Definition tab_room.cpp:576
const QMap< int, QString > & getGameTypes() const
Definition tab_room.h:153
void processListGamesEvent(const Event_ListGames &event)
Definition tab_room.cpp:619
TabRoom(TabSupervisor *_tabSupervisor, AbstractClient *_client, ServerInfo_User *_ownUser, const ServerInfo_Room &info)
Definition tab_room.cpp:100
void markChannelMessage(const QString &channelId, const QString &message, const ServerInfo_User &senderInfo)
Definition tab_room.cpp:530
QList< int > savedSplitterSizes
Definition tab_room.h:89
ChatView * makeChatView()
Definition tab_room.cpp:563
UserListPanelWidget * userListPanel
Definition tab_room.h:69
QMenu * roomMenu
Definition tab_room.h:91
QString activeChannelId
Definition tab_room.h:82
QMap< QString, bool > channelWritable
Definition tab_room.h:80
int roomId
Definition tab_room.h:63
void processRoomEvent(const RoomEvent &event)
Definition tab_room.cpp:594
QTabBar * channelTabBar
Definition tab_room.h:74
QMap< int, QString > gameTypes
Definition tab_room.h:66
const ServerInfo_User * getUserInfo() const
Definition tab_room.h:165
GameSelector * getGameSelector() const
Definition tab_room.h:169
void sendRoomCommand(PendingCommand *pend)
Definition tab_room.cpp:736
void actOpenChatSettings()
Definition tab_room.cpp:581
PendingCommand * prepareRoomCommand(const ::google::protobuf::Message &cmd)
Definition tab_room.cpp:731
bool chatCollapsed
Definition tab_room.h:83
QString roomName
Definition tab_room.h:64
void focusTab()
Definition tab_room.cpp:302
QAction * aClearChat
Definition tab_room.h:94
void maximizeClient()
QCompleter * mentionCompleter
Definition tab_room.h:98
void setChatCollapsed(bool collapsed)
Definition tab_room.cpp:430
ChatView * chatView
Definition tab_room.h:72
QStackedWidget * chatViewStack
Definition tab_room.h:73
void sendMessage()
Definition tab_room.cpp:356
bool isRoomMessageIgnored(const QString &senderName, ServerInfo_User &userInfoOut) const
Definition tab_room.cpp:544
void processRoomSayEvent(const Event_RoomSay &event)
Definition tab_room.cpp:644
void tabActivated() override
Definition tab_room.cpp:331
QLabel * sayLabel
Definition tab_room.h:84
QAction * aLeaveRoom
Definition tab_room.h:92
void roomClosing(TabRoom *tab)
void actCompleterChanged()
Definition tab_room.cpp:588
void gameListUpdated()
void onChannelTabClicked(int index)
Definition tab_room.cpp:419
int getRoomId() const
Definition tab_room.h:145
void actShowPopup(const QString &message)
Definition tab_room.cpp:314
QAction * aOpenChatSettings
Definition tab_room.h:93
LineEditCompleter * sayEdit
Definition tab_room.h:85
QStringList autocompleteUserList
Definition tab_room.h:97
static QColor parseColorHex(const QString &hex, const QColor &fallback)
Definition tab_room.cpp:451
GameSelector * gameSelector
Definition tab_room.h:68
void notIdle()
QString getRoomName() const
Definition tab_room.h:149
QString getChannelName() const
Definition tab_room.h:157
QWidget * sayWidget
Definition tab_room.h:75
QMap< QString, int > channelUnreadCounts
Definition tab_room.h:78
void actShowMentionPopup(const QString &sender)
Definition tab_room.cpp:309
QGroupBox * chatGroupBox
Definition tab_room.h:87
bool messageContainsMention(const QString &message, const ServerInfo_User &senderInfo) const
Definition tab_room.cpp:489
QString sanitizeHtml(QString dirty) const
Definition tab_room.cpp:343
UserListWidget * userList
Definition tab_room.h:70
const UserListProxy * userListProxy
Definition tab_room.h:71
ServerInfo_User * ownUser
Definition tab_room.h:65
void updateChannelTab(const QString &channelId)
Definition tab_room.cpp:462
QSplitter * chatSplitter
Definition tab_room.h:88
void processRemoveMessagesEvent(const Event_RemoveMessages &event)
Definition tab_room.cpp:711
void retranslateUi() override
Definition tab_room.cpp:282
QMap< QString, QString > channelDisplayNames
Definition tab_room.h:77
void refreshShortcuts()
Definition tab_room.cpp:720
void processRoomChannelSayEvent(const Event_RoomChannelSay &event)
Definition tab_room.cpp:677
QMap< QString, bool > channelMentioned
Definition tab_room.h:79
QMap< QString, ChatView * > channelViews
Definition tab_room.h:76
void processLeaveRoomEvent(const Event_LeaveRoom &event)
Definition tab_room.cpp:637
AbstractClient * client
Definition tab_room.h:62
void addMentionTag(QString mentionTag)
Definition tab_room.cpp:725
QStringListModel * mentionModel
Definition tab_room.h:86
void updateSayEnabled()
Definition tab_room.cpp:348
void closeEvent(QCloseEvent *event) override
Definition tab_room.cpp:324
void onChannelChanged(int index)
Definition tab_room.cpp:398
Definition tab_supervisor.h:92
Tab(TabSupervisor *_tabSupervisor)
Definition tab.cpp:16
Definition user_list_panel_widget.h:25
Definition user_list_proxy.h:19
Definition user_list_widget.h:78
Definition game_event_handler.h:57
Definition game_event_handler.h:55
Definition event_join_room.proto:4
Definition event_leave_room.proto:3
Definition event_list_games.proto:4
Definition event_remove_messages.proto:3
Definition event_room_channel_say.proto:3
Definition event_room_say.proto:3
Definition response.proto:11
Definition room_event.proto:2
Definition serverinfo_room.proto:6
Definition serverinfo_user.proto:2