Cockatrice 2025-11-30-Development-2.11.0-beta.38
A cross-platform 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 DeckLoader;
49class QVBoxLayout;
50class QHBoxLayout;
51class GameReplay;
53class QDockWidget;
54class QStackedWidget;
55
56class TabGame : public Tab
57{
58 Q_OBJECT
59private:
63 QStringList gameTypes;
64 QCompleter *completer;
66 QStackedWidget *mainWidget;
67
72 QLabel *sayLabel;
77 QMap<int, TabbedDeckViewContainer *> deckViewContainers;
88 QAction *aFocusChat;
89 QList<QAction *> phaseActions;
90 QAction *aCardMenu;
91
92 Player *addPlayer(Player *newPlayer);
93 void addLocalPlayer(Player *newPlayer, int playerId);
94 void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName);
95 void processMultipleRemotePlayerDeckSelect(QVector<QPair<int, QPair<QString, QString>>> playerIdDeckMap);
96 void processLocalPlayerDeckSelect(Player *localPlayer, int playerId, ServerInfo_Player playerInfo);
97 void loadDeckForLocalPlayer(Player *localPlayer, int playerId, ServerInfo_Player playerInfo);
98 void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo);
99 void createZoneForPlayer(Player *newPlayer, int playerId);
100
101 void startGame(bool resuming);
102 void stopGame();
103 void closeGame();
104 bool leaveGame();
105
106 Player *setActivePlayer(int id);
107 void setActivePhase(int phase);
108 void createMenuItems();
110 void createViewMenuItems();
111 void createCardInfoDock(bool bReplay = false);
112 void createPlayerListDock(bool bReplay = false);
113 void createMessageDock(bool bReplay = false);
114 void createPlayAreaWidget(bool bReplay = false);
115 void createDeckViewContainerWidget(bool bReplay = false);
116 void createReplayDock(GameReplay *replay);
117signals:
119 void containerProcessingStarted(const GameEventContext &context);
121 void openMessageDialog(const QString &userName, bool focus);
122 void openDeckEditor(DeckLoader *deck);
123 void notIdle();
124
125 void phaseChanged(int phase);
126 void gameLeft();
127 void chatMessageSent(QString chatMessage);
129 void arrowDeletionRequested(int arrowId);
130
131private slots:
132 void adminLockChanged(bool lock);
133 void newCardAdded(AbstractCardItem *card);
134 void setCardMenu(QMenu *menu);
135
136 void actGameInfo();
137 void actConcede();
139 void actRotateViewCW();
140 void actRotateViewCCW();
141 void actSay();
142 void actPhaseAction();
143 void actNextPhase();
144 void actNextPhaseAction();
145
146 void addMentionTag(const QString &value);
147 void linkCardToChat(const QString &cardName);
148
149 void refreshShortcuts();
150
151 void loadLayout();
152 void actCompleterChanged();
153 void notifyPlayerJoin(QString playerName);
154 void notifyPlayerKicked();
155 void processPlayerLeave(Player *leavingPlayer);
156 void actResetLayout();
157 void freeDocksSize();
158
159 void hideEvent(QHideEvent *event) override;
160 bool eventFilter(QObject *o, QEvent *e) override;
163 void dockTopLevelChanged(bool topLevel);
164
165protected slots:
166 void closeEvent(QCloseEvent *event) override;
167
168public:
169 TabGame(TabSupervisor *_tabSupervisor,
170 QList<AbstractClient *> &_clients,
171 const Event_GameJoined &event,
172 const QMap<int, QString> &_roomGameTypes);
173 void connectToGameState();
178 TabGame(TabSupervisor *_tabSupervisor, GameReplay *replay);
179 ~TabGame() override;
180 void retranslateUi() override;
182 bool closeRequest() override;
183
184 [[nodiscard]] QString getTabText() const override;
185
186 [[nodiscard]] AbstractGame *getGame() const
187 {
188 return game;
189 }
190
191public slots:
192 void viewCardInfo(const CardRef &cardRef = {}) const;
193 void resetChatAndPhase();
194 void updateTimeElapsedLabel(QString newTime);
195 void addPlayerToAutoCompleteList(QString playerName);
196 void removePlayerFromAutoCompleteList(QString playerName);
197 void removeSpectator(int spectatorId, ServerInfo_User spectator);
198 void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked);
199 void processLocalPlayerReadyStateChanged(int playerId, bool ready);
200 void emitUserEvent();
201};
202
203#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:86
void actCompleterChanged()
Definition tab_game.cpp:621
void openDeckEditor(DeckLoader *deck)
AbstractGame * game
Definition tab_game.h:60
Player * addPlayer(Player *newPlayer)
Definition tab_game.cpp:646
void gameLeft()
QDockWidget * cardInfoDock
Definition tab_game.h:80
void createPlayAreaWidget(bool bReplay=false)
Definition tab_game.cpp:1200
QAction * aResetReplayLayout
Definition tab_game.h:85
void closeEvent(QCloseEvent *event) override
Definition tab_game.cpp:460
QDockWidget * playerListDock
Definition tab_game.h:80
QStringList gameTypes
Definition tab_game.h:63
void createDeckViewContainerWidget(bool bReplay=false)
Definition tab_game.cpp:1235
QAction * aReverseTurn
Definition tab_game.h:84
void startGame(bool resuming)
Definition tab_game.cpp:797
void actNextPhaseAction()
Definition tab_game.cpp:580
QAction * aRotateViewCW
Definition tab_game.h:85
void createViewMenuItems()
Definition tab_game.cpp:1037
QAction * aMessageLayoutDockVisible
Definition tab_game.h:86
QCompleter * completer
Definition tab_game.h:64
QAction * aLeaveGame
Definition tab_game.h:84
QLabel * timeElapsedLabel
Definition tab_game.h:70
QLabel * sayLabel
Definition tab_game.h:72
void addPlayerToAutoCompleteList(QString playerName)
Definition tab_game.cpp:543
void containerProcessingDone()
void actSay()
Definition tab_game.cpp:526
void newCardAdded(AbstractCardItem *card)
Definition tab_game.cpp:886
void actResetLayout()
Definition tab_game.cpp:1151
QAction * aGameInfo
Definition tab_game.h:84
bool leaveGame()
Definition tab_game.cpp:510
void notifyPlayerJoin(QString playerName)
Definition tab_game.cpp:627
QMenu * replayDockMenu
Definition tab_game.h:82
void removePlayerFromAutoCompleteList(QString playerName)
Definition tab_game.cpp:551
void adminLockChanged(bool lock)
Definition tab_game.cpp:471
void stopGame()
Definition tab_game.cpp:827
void connectToGameState()
Definition tab_game.cpp:134
GameScene * scene
Definition tab_game.h:75
QAction * aReplayDockFloating
Definition tab_game.h:87
TearOffMenu * phasesMenu
Definition tab_game.h:83
CardInfoFrameWidget * cardInfoFrameWidget
Definition tab_game.h:68
void refreshShortcuts()
Definition tab_game.cpp:373
void actGameInfo()
Definition tab_game.cpp:478
QStringList autocompleteUserList
Definition tab_game.h:65
void dockTopLevelChanged(bool topLevel)
Definition tab_game.cpp:1476
void actRotateViewCCW()
Definition tab_game.cpp:616
Player * setActivePlayer(int id)
Definition tab_game.cpp:854
void actPhaseAction()
Definition tab_game.cpp:565
void arrowDeletionRequested(int arrowId)
void createReplayMenuItems()
Definition tab_game.cpp:1012
void retranslateUi() override
Definition tab_game.cpp:272
void viewCardInfo(const CardRef &cardRef={}) const
Definition tab_game.cpp:1246
QAction * aPlayerListDockVisible
Definition tab_game.h:87
void setCardMenu(QMenu *menu)
Definition tab_game.cpp:928
void connectMessageLogToGameEventHandler()
Definition tab_game.cpp:169
void createZoneForPlayer(Player *newPlayer, int playerId)
Definition tab_game.cpp:776
QAction * aResetLayout
Definition tab_game.h:85
QMap< int, TabbedDeckViewContainer * > deckViewContainers
Definition tab_game.h:77
void notifyPlayerKicked()
Definition tab_game.cpp:636
void loadLayout()
Definition tab_game.cpp:1086
QAction * aNextPhaseAction
Definition tab_game.h:84
void dockFloatingTriggered()
Definition tab_game.cpp:1452
QAction * aReplayDockVisible
Definition tab_game.h:87
void updateTimeElapsedLabel(QString newTime)
Definition tab_game.cpp:466
void processLocalPlayerDeckSelect(Player *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:742
QMenu * playerListDockMenu
Definition tab_game.h:82
void actRemoveLocalArrows()
Definition tab_game.cpp:596
void freeDocksSize()
Definition tab_game.cpp:1134
PhasesToolbar * phasesToolbar
Definition tab_game.h:74
void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName)
Definition tab_game.cpp:720
void linkCardToChat(const QString &cardName)
Definition tab_game.cpp:234
void createCardInfoDock(bool bReplay=false)
Definition tab_game.cpp:1251
void phaseChanged(int phase)
bool eventFilter(QObject *o, QEvent *e) override
Definition tab_game.cpp:1403
void actConcede()
Definition tab_game.cpp:484
void processPlayerLeave(Player *leavingPlayer)
Definition tab_game.cpp:695
bool closeRequest() override
Definition tab_game.cpp:451
void loadDeckForLocalPlayer(Player *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:748
QAction * aCardInfoDockVisible
Definition tab_game.h:86
QList< QAction * > phaseActions
Definition tab_game.h:89
void emitUserEvent()
Definition tab_game.cpp:249
QMenu * viewMenu
Definition tab_game.h:82
AbstractGame * getGame() const
Definition tab_game.h:186
void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:760
QString getTabText() const override
Definition tab_game.cpp:895
void removeSpectator(int spectatorId, ServerInfo_User spectator)
Definition tab_game.cpp:558
GameView * gameView
Definition tab_game.h:76
QAction * aNextPhase
Definition tab_game.h:84
QDockWidget * replayDock
Definition tab_game.h:80
QMenu * gameMenu
Definition tab_game.h:82
PlayerListWidget * playerListWidget
Definition tab_game.h:69
QAction * aCardInfoDockFloating
Definition tab_game.h:86
QAction * aNextTurn
Definition tab_game.h:84
const UserListProxy * userListProxy
Definition tab_game.h:61
void closeGame()
Definition tab_game.cpp:848
void connectToPlayerManager()
Definition tab_game.cpp:142
void addMentionTag(const QString &value)
Definition tab_game.cpp:228
QAction * aConcede
Definition tab_game.h:84
QAction * aMessageLayoutDockFloating
Definition tab_game.h:86
QMenu * cardInfoDockMenu
Definition tab_game.h:82
QAction * aRemoveLocalArrows
Definition tab_game.h:85
void openMessageDialog(const QString &userName, bool focus)
void turnAdvanced()
QMenu * messageLayoutDockMenu
Definition tab_game.h:82
void createPlayerListDock(bool bReplay=false)
Definition tab_game.cpp:1276
QWidget * gamePlayAreaWidget
Definition tab_game.h:79
void dockVisibleTriggered()
Definition tab_game.cpp:1424
QWidget * deckViewContainerWidget
Definition tab_game.h:79
void createMessageDock(bool bReplay=false)
Definition tab_game.cpp:1298
void updatePlayerListDockTitle()
Definition tab_game.cpp:262
void createReplayDock(GameReplay *replay)
Definition tab_game.cpp:1220
~TabGame() override
Definition tab_game.cpp:257
void setActivePhase(int phase)
Definition tab_game.cpp:881
QAction * aRotateViewCCW
Definition tab_game.h:85
QStackedWidget * mainWidget
Definition tab_game.h:66
ReplayManager * replayManager
Definition tab_game.h:62
QAction * aCardMenu
Definition tab_game.h:90
void gameClosing(TabGame *tab)
void notIdle()
void connectPlayerListToGameEventHandler()
Definition tab_game.cpp:214
QAction * playersSeparator
Definition tab_game.h:81
QDockWidget * messageLayoutDock
Definition tab_game.h:80
void containerProcessingStarted(const GameEventContext &context)
void hideEvent(QHideEvent *event) override
Definition tab_game.cpp:1381
void actRotateViewCW()
Definition tab_game.cpp:611
MessageLogWidget * messageLog
Definition tab_game.h:71
QVBoxLayout * deckViewContainerLayout
Definition tab_game.h:78
QAction * aFocusChat
Definition tab_game.h:88
void chatMessageSent(QString chatMessage)
void processLocalPlayerReadyStateChanged(int playerId, bool ready)
Definition tab_game.cpp:771
void connectToGameEventHandler()
Definition tab_game.cpp:151
void createMenuItems()
Definition tab_game.cpp:941
LineEditCompleter * sayEdit
Definition tab_game.h:73
void actNextPhase()
Definition tab_game.cpp:571
void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked)
Definition tab_game.cpp:766
void addLocalPlayer(Player *newPlayer, int playerId)
Definition tab_game.cpp:674
void processMultipleRemotePlayerDeckSelect(QVector< QPair< int, QPair< QString, QString > > > playerIdDeckMap)
Definition tab_game.cpp:731
QAction * aPlayerListDockFloating
Definition tab_game.h:87
void resetChatAndPhase()
Definition tab_game.cpp:240
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:49
Definition card_ref.h:14
TODO: Document this.
Q_LOGGING_CATEGORY(TabGameLog, "tab_game")