Cockatrice 2026-03-05-Development-2.11.0-beta.54
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
tab_game.h
Go to the documentation of this file.
1
8
9#ifndef TAB_GAME_H
10#define TAB_GAME_H
11
12#include "../game/abstract_game.h"
13#include "../game/log/message_log_widget.h"
14#include "../game/player/player.h"
15#include "../interface/widgets/menus/tearoff_menu.h"
16#include "../interface/widgets/replay/replay_manager.h"
17#include "tab.h"
18
19#include <QCompleter>
20#include <QLoggingCategory>
21#include <QMap>
22
23class ServerInfo_PlayerProperties;
25inline Q_LOGGING_CATEGORY(TabGameLog, "tab_game");
26
27class UserListProxy;
29class AbstractClient;
30class CardDatabase;
31class GameView;
32class GameScene;
33class ReplayManager;
35class QTimer;
36class QSplitter;
37class QLabel;
38class QToolButton;
39class QMenu;
40class ZoneViewLayout;
41class ZoneViewWidget;
42class PhasesToolbar;
45class CardZone;
47class CardItem;
48class QVBoxLayout;
49class QHBoxLayout;
50class GameReplay;
52class QDockWidget;
53class QStackedWidget;
54
55class TabGame : public Tab
56{
57 Q_OBJECT
58private:
62 QStringList gameTypes;
63 QCompleter *completer;
65 QStackedWidget *mainWidget;
66
71 QLabel *sayLabel;
76 QMap<int, TabbedDeckViewContainer *> deckViewContainers;
85 QAction *aFocusChat;
86 QList<QAction *> phaseActions;
87 QAction *aCardMenu;
88
93 {
94 QMenu *menu;
95 QAction *aVisible;
96 QAction *aFloating;
98 };
99
100 QMap<QDockWidget *, DockActions> dockToActions;
101
102 Player *addPlayer(Player *newPlayer);
103 void addLocalPlayer(Player *newPlayer, int playerId);
104 void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName);
105 void processMultipleRemotePlayerDeckSelect(QVector<QPair<int, QPair<QString, QString>>> playerIdDeckMap);
106 void processLocalPlayerDeckSelect(Player *localPlayer, int playerId, ServerInfo_Player playerInfo);
107 void loadDeckForLocalPlayer(Player *localPlayer, int playerId, ServerInfo_Player playerInfo);
108 void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo);
109 void createZoneForPlayer(Player *newPlayer, int playerId);
110
111 void startGame(bool resuming);
112 void stopGame();
113 void closeGame();
114 bool leaveGame();
115
116 Player *setActivePlayer(int id);
117 void setActivePhase(int phase);
118 void createMenuItems();
120 void createViewMenuItems();
121 void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize);
122 void createCardInfoDock(bool bReplay = false);
123 void createPlayerListDock(bool bReplay = false);
124 void createMessageDock(bool bReplay = false);
125 void createPlayAreaWidget(bool bReplay = false);
126 void createDeckViewContainerWidget(bool bReplay = false);
127 void createReplayDock(GameReplay *replay);
128signals:
130 void containerProcessingStarted(const GameEventContext &context);
132 void openMessageDialog(const QString &userName, bool focus);
133 void openDeckEditor(const LoadedDeck &deck);
134 void notIdle();
135
136 void phaseChanged(int phase);
137 void gameLeft();
138 void chatMessageSent(QString chatMessage);
140 void arrowDeletionRequested(int arrowId);
141
142private slots:
143 void adminLockChanged(bool lock);
144 void newCardAdded(AbstractCardItem *card);
145 void setCardMenu(QMenu *menu);
146
147 void actGameInfo();
148 void actConcede();
150 void actRotateViewCW();
151 void actRotateViewCCW();
152 void actSay();
153 void actPhaseAction();
154 void actNextPhase();
155 void actNextPhaseAction();
156
157 void addMentionTag(const QString &value);
158 void linkCardToChat(const QString &cardName);
159
160 void refreshShortcuts();
161
162 void loadLayout();
163 void actCompleterChanged();
164 void notifyPlayerJoin(QString playerName);
165 void notifyPlayerKicked();
166 void processPlayerLeave(Player *leavingPlayer);
167 void actResetLayout();
168 void freeDocksSize();
169
170 void hideEvent(QHideEvent *event) override;
171
172protected slots:
173 void closeEvent(QCloseEvent *event) override;
174
175public:
176 TabGame(TabSupervisor *_tabSupervisor,
177 QList<AbstractClient *> &_clients,
178 const Event_GameJoined &event,
179 const QMap<int, QString> &_roomGameTypes);
180 void connectToGameState();
185 TabGame(TabSupervisor *_tabSupervisor, GameReplay *replay);
186 ~TabGame() override;
187 void retranslateUi() override;
189 bool closeRequest() override;
190
191 [[nodiscard]] QString getTabText() const override;
192
193 [[nodiscard]] AbstractGame *getGame() const
194 {
195 return game;
196 }
197
198public slots:
199 void viewCardInfo(const CardRef &cardRef = {}) const;
200 void resetChatAndPhase();
201 void updateTimeElapsedLabel(QString newTime);
202 void addPlayerToAutoCompleteList(QString playerName);
203 void removePlayerFromAutoCompleteList(QString playerName);
204 void removeSpectator(int spectatorId, ServerInfo_User spectator);
205 void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked);
206 void processLocalPlayerReadyStateChanged(int playerId, bool ready);
207 void emitUserEvent();
208};
209
210#endif
Definition abstract_card_item.h:22
Definition abstract_client.h:51
Definition abstract_game.h:21
Core in-memory container for card and set data.
Definition card_database.h:29
Definition card_info_frame_widget.h:22
Definition card_item.h:29
Definition card_zone.h:26
Definition deck_view_container.h:49
Manages the game board display including players, zones, cards, and animations.
Definition game_scene.h:38
Definition game_view.h:16
Definition line_edit_completer.h:15
Definition message_log_widget.h:20
Definition phases_toolbar.h:66
Definition player_list_widget.h:41
Definition player.h:65
Definition replay_manager.h:20
Definition replay_timeline_widget.h:19
TabGame(TabSupervisor *_tabSupervisor, QList< AbstractClient * > &_clients, const Event_GameJoined &event, const QMap< int, QString > &_roomGameTypes)
Definition tab_game.cpp:87
void actCompleterChanged()
Definition tab_game.cpp:616
AbstractGame * game
Definition tab_game.h:59
Player * addPlayer(Player *newPlayer)
Definition tab_game.cpp:641
void gameLeft()
QDockWidget * cardInfoDock
Definition tab_game.h:79
void createPlayAreaWidget(bool bReplay=false)
Definition tab_game.cpp:1162
QAction * aResetReplayLayout
Definition tab_game.h:84
void closeEvent(QCloseEvent *event) override
Definition tab_game.cpp:457
QDockWidget * playerListDock
Definition tab_game.h:79
QStringList gameTypes
Definition tab_game.h:62
void createDeckViewContainerWidget(bool bReplay=false)
Definition tab_game.cpp:1194
QAction * aReverseTurn
Definition tab_game.h:83
void startGame(bool resuming)
Definition tab_game.cpp:791
void actNextPhaseAction()
Definition tab_game.cpp:575
QAction * aRotateViewCW
Definition tab_game.h:84
void createViewMenuItems()
Definition tab_game.cpp:1031
QCompleter * completer
Definition tab_game.h:63
QAction * aLeaveGame
Definition tab_game.h:83
QLabel * timeElapsedLabel
Definition tab_game.h:69
QLabel * sayLabel
Definition tab_game.h:71
void addPlayerToAutoCompleteList(QString playerName)
Definition tab_game.cpp:538
void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize)
Definition tab_game.cpp:1052
void containerProcessingDone()
void actSay()
Definition tab_game.cpp:521
void newCardAdded(AbstractCardItem *card)
Definition tab_game.cpp:880
void actResetLayout()
Definition tab_game.cpp:1123
QAction * aGameInfo
Definition tab_game.h:83
bool leaveGame()
Definition tab_game.cpp:505
void notifyPlayerJoin(QString playerName)
Definition tab_game.cpp:622
void removePlayerFromAutoCompleteList(QString playerName)
Definition tab_game.cpp:546
void adminLockChanged(bool lock)
Definition tab_game.cpp:468
void stopGame()
Definition tab_game.cpp:821
void connectToGameState()
Definition tab_game.cpp:134
GameScene * scene
Definition tab_game.h:74
TearOffMenu * phasesMenu
Definition tab_game.h:82
CardInfoFrameWidget * cardInfoFrameWidget
Definition tab_game.h:67
void refreshShortcuts()
Definition tab_game.cpp:370
void actGameInfo()
Definition tab_game.cpp:475
QStringList autocompleteUserList
Definition tab_game.h:64
void actRotateViewCCW()
Definition tab_game.cpp:611
Player * setActivePlayer(int id)
Definition tab_game.cpp:848
void actPhaseAction()
Definition tab_game.cpp:560
void arrowDeletionRequested(int arrowId)
void createReplayMenuItems()
Definition tab_game.cpp:1006
void retranslateUi() override
Definition tab_game.cpp:274
void viewCardInfo(const CardRef &cardRef={}) const
Definition tab_game.cpp:1205
void setCardMenu(QMenu *menu)
Definition tab_game.cpp:922
void connectMessageLogToGameEventHandler()
Definition tab_game.cpp:169
void createZoneForPlayer(Player *newPlayer, int playerId)
Definition tab_game.cpp:770
QAction * aResetLayout
Definition tab_game.h:84
QMap< int, TabbedDeckViewContainer * > deckViewContainers
Definition tab_game.h:76
void notifyPlayerKicked()
Definition tab_game.cpp:631
void loadLayout()
Definition tab_game.cpp:1082
QAction * aNextPhaseAction
Definition tab_game.h:83
void updateTimeElapsedLabel(QString newTime)
Definition tab_game.cpp:463
void processLocalPlayerDeckSelect(Player *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:737
void actRemoveLocalArrows()
Definition tab_game.cpp:591
void freeDocksSize()
Definition tab_game.cpp:1115
PhasesToolbar * phasesToolbar
Definition tab_game.h:73
void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName)
Definition tab_game.cpp:715
void linkCardToChat(const QString &cardName)
Definition tab_game.cpp:234
void createCardInfoDock(bool bReplay=false)
Definition tab_game.cpp:1210
void phaseChanged(int phase)
void actConcede()
Definition tab_game.cpp:481
void processPlayerLeave(Player *leavingPlayer)
Definition tab_game.cpp:690
bool closeRequest() override
Definition tab_game.cpp:448
void loadDeckForLocalPlayer(Player *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:743
QList< QAction * > phaseActions
Definition tab_game.h:86
void emitUserEvent()
Definition tab_game.cpp:249
QMenu * viewMenu
Definition tab_game.h:81
AbstractGame * getGame() const
Definition tab_game.h:193
void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:754
QString getTabText() const override
Definition tab_game.cpp:889
void removeSpectator(int spectatorId, ServerInfo_User spectator)
Definition tab_game.cpp:553
GameView * gameView
Definition tab_game.h:75
QAction * aNextPhase
Definition tab_game.h:83
QDockWidget * replayDock
Definition tab_game.h:79
QMenu * gameMenu
Definition tab_game.h:81
PlayerListWidget * playerListWidget
Definition tab_game.h:68
QAction * aNextTurn
Definition tab_game.h:83
const UserListProxy * userListProxy
Definition tab_game.h:60
void closeGame()
Definition tab_game.cpp:842
void connectToPlayerManager()
Definition tab_game.cpp:142
void addMentionTag(const QString &value)
Definition tab_game.cpp:228
QAction * aConcede
Definition tab_game.h:83
QAction * aRemoveLocalArrows
Definition tab_game.h:84
void openMessageDialog(const QString &userName, bool focus)
void turnAdvanced()
void createPlayerListDock(bool bReplay=false)
Definition tab_game.cpp:1232
QWidget * gamePlayAreaWidget
Definition tab_game.h:78
QWidget * deckViewContainerWidget
Definition tab_game.h:78
void createMessageDock(bool bReplay=false)
Definition tab_game.cpp:1251
void updatePlayerListDockTitle()
Definition tab_game.cpp:264
void createReplayDock(GameReplay *replay)
Definition tab_game.cpp:1182
~TabGame() override
Definition tab_game.cpp:257
void setActivePhase(int phase)
Definition tab_game.cpp:875
QAction * aRotateViewCCW
Definition tab_game.h:84
QStackedWidget * mainWidget
Definition tab_game.h:65
ReplayManager * replayManager
Definition tab_game.h:61
QAction * aCardMenu
Definition tab_game.h:87
void gameClosing(TabGame *tab)
void notIdle()
void connectPlayerListToGameEventHandler()
Definition tab_game.cpp:214
QAction * playersSeparator
Definition tab_game.h:80
QDockWidget * messageLayoutDock
Definition tab_game.h:79
void containerProcessingStarted(const GameEventContext &context)
void hideEvent(QHideEvent *event) override
Definition tab_game.cpp:1331
void actRotateViewCW()
Definition tab_game.cpp:606
MessageLogWidget * messageLog
Definition tab_game.h:70
QVBoxLayout * deckViewContainerLayout
Definition tab_game.h:77
QAction * aFocusChat
Definition tab_game.h:85
void openDeckEditor(const LoadedDeck &deck)
void chatMessageSent(QString chatMessage)
void processLocalPlayerReadyStateChanged(int playerId, bool ready)
Definition tab_game.cpp:765
void connectToGameEventHandler()
Definition tab_game.cpp:151
void createMenuItems()
Definition tab_game.cpp:935
LineEditCompleter * sayEdit
Definition tab_game.h:72
void actNextPhase()
Definition tab_game.cpp:566
void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked)
Definition tab_game.cpp:760
void addLocalPlayer(Player *newPlayer, int playerId)
Definition tab_game.cpp:669
void processMultipleRemotePlayerDeckSelect(QVector< QPair< int, QPair< QString, QString > > > playerIdDeckMap)
Definition tab_game.cpp:726
void resetChatAndPhase()
Definition tab_game.cpp:240
QMap< QDockWidget *, DockActions > dockToActions
Definition tab_game.h:100
Definition tab_supervisor.h:83
Tab(TabSupervisor *_tabSupervisor)
Definition tab.cpp:11
Definition tabbed_deck_view_container.h:14
Definition tearoff_menu.h:14
Definition user_list_proxy.h:19
Definition view_zone_widget.h:51
Definition card_ref.h:14
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
The actions associated with managing a QDockWidget.
Definition tab_game.h:93
QAction * aVisible
Definition tab_game.h:95
QAction * aFloating
Definition tab_game.h:96
QMenu * menu
Definition tab_game.h:94
QSize defaultSize
Definition tab_game.h:97
TODO: Document this.
Q_LOGGING_CATEGORY(TabGameLog, "tab_game")