Cockatrice 2026-09-01-Development-3.1.0-beta.10
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/player/player_logic.h"
14#include "../game_graphics/log/message_log_widget.h"
15#include "../interface/widgets/menus/tearoff_menu.h"
16#include "../interface/widgets/replay/replay_widget.h"
17#include "tab.h"
18
19#include <QCompleter>
20#include <QLoggingCategory>
21#include <QMap>
22#include <QStringListModel>
23
24class CardMenu;
27inline Q_LOGGING_CATEGORY(TabGameLog, "tab_game");
28
29class UserListProxy;
31class AbstractClient;
32class CardDatabase;
33class GameView;
34class GameScene;
35class ReplayWidget;
37class QTimer;
38class QSplitter;
39class QLabel;
40class QPushButton;
41class QToolButton;
42class QMenu;
43class ZoneViewLayout;
44class ZoneViewWidget;
45class PhasesToolbar;
48class CardZone;
50class CardItem;
51class QVBoxLayout;
52class QHBoxLayout;
53class GameReplay;
55class QDockWidget;
56class QStackedWidget;
57
58class TabGame : public Tab
59{
60 Q_OBJECT
61private:
65 QStringList gameTypes;
66 QCompleter *mentionCompleter;
67 QStringListModel *mentionModel;
69 QStackedWidget *mainWidget;
70
73 QPushButton *inviteButton = nullptr;
76 QLabel *sayLabel;
81 QMap<int, TabbedDeckViewContainer *> deckViewContainers;
90 QAction *aFocusChat;
91 QAction *aInviteToGame = nullptr;
92 QList<QAction *> phaseActions;
93 QAction *aCardMenu;
94
99 {
100 QMenu *menu;
101 QAction *aVisible;
102 QAction *aFloating;
104 };
105
106 QMap<QDockWidget *, DockActions> dockToActions;
107
108 PlayerLogic *addPlayer(PlayerLogic *newPlayer);
109 void addLocalPlayer(PlayerLogic *newPlayer, int playerId);
110 void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName);
111 void processMultipleRemotePlayerDeckSelect(QVector<QPair<int, QPair<QString, QString>>> playerIdDeckMap);
112 void processLocalPlayerDeckSelect(PlayerLogic *localPlayer, int playerId, ServerInfo_Player playerInfo);
113 void loadDeckForLocalPlayer(PlayerLogic *localPlayer, int playerId, ServerInfo_Player playerInfo);
114 void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo);
115 void createZoneForPlayer(PlayerLogic *newPlayer, int playerId);
116
117 void startGame(bool resuming);
118 void stopGame();
119 void closeGame();
120 bool leaveGame();
121
123 void setActivePhase(int phase);
124 void createMenuItems();
126 void createViewMenuItems();
127 void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize);
128 void createCardInfoDock(bool bReplay = false);
129 void createPlayerListDock(bool bReplay = false);
130 void createMessageDock(bool bReplay = false);
131 void createPlayAreaWidget(bool bReplay = false);
132 void createDeckViewContainerWidget(bool bReplay = false);
133 void createReplayDock(GameReplay *replay);
135signals:
139 void openMessageDialog(const QString &userName, bool focus);
140 void openDeckEditor(const LoadedDeck &deck);
141 void notIdle();
142
143 void phaseChanged(int phase);
144 void gameLeft();
145 void chatMessageSent(QString chatMessage);
147
148private slots:
149 void adminLockChanged(bool lock);
150 void newCardAdded(AbstractCardItem *card);
151 void setCardMenu(CardMenu *menu);
152
153 void actGameInfo();
154 void actInviteToGame();
155 void actConcede();
156 void actCopyGameLink();
158 void actRotateViewCW();
159 void actRotateViewCCW();
160 void actSay();
161 void actPhaseAction();
162 void actNextPhase();
163 void actNextPhaseAction();
164
165 void addMentionTag(const QString &value);
166 void linkCardToChat(const QString &cardName);
167
168 void refreshShortcuts();
169
170 void loadLayout();
171 void actCompleterChanged();
172 void notifyPlayerJoin(QString playerName);
173 void notifyPlayerKicked();
174 void processPlayerLeave(PlayerLogic *leavingPlayer);
175 void actResetLayout();
176
177 void hideEvent(QHideEvent *event) override;
178
179protected slots:
180 void closeEvent(QCloseEvent *event) override;
181
182public:
183 TabGame(TabSupervisor *_tabSupervisor,
184 QList<AbstractClient *> &_clients,
185 const Event_GameJoined &event,
186 const QMap<int, QString> &_roomGameTypes);
187 void connectToGameState();
192 TabGame(TabSupervisor *_tabSupervisor, GameReplay *replay);
193 ~TabGame() override;
194 void retranslateUi() override;
196 bool closeRequest() override;
197
198 [[nodiscard]] QString getTabText() const override;
199
200 [[nodiscard]] AbstractGame *getGame() const
201 {
202 return game;
203 }
204
205public slots:
206 void viewCardInfo(const CardRef &cardRef = {}) const;
207 void resetChatAndPhase();
208 void updateTimeElapsedLabel(QString newTime);
209 void addPlayerToAutoCompleteList(QString playerName);
210 void removePlayerFromAutoCompleteList(QString playerName);
211 void removeSpectator(int spectatorId, ServerInfo_User spectator);
212 void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked);
213 void processLocalPlayerReadyStateChanged(int playerId, bool ready);
214 void emitUserEvent();
215};
216
217#endif
Definition abstract_card_item.h:21
Definition abstract_client.h:57
Definition abstract_game.h:20
Core in-memory container for card and set data.
Definition card_database.h:30
Definition card_info_frame_widget.h:22
Definition card_item.h:27
Definition card_menu.h:17
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:43
Definition game_view.h:20
Definition line_edit_completer.h:33
Definition message_log_widget.h:20
Definition phases_toolbar.h:66
Definition player_list_widget.h:41
Definition player_logic.h:65
Definition replay_timeline_widget.h:19
The top-level widget that is put in the replay dock widget. Contains the replay timeline as well as t...
Definition replay_widget.h:26
TabGame(TabSupervisor *_tabSupervisor, QList< AbstractClient * > &_clients, const Event_GameJoined &event, const QMap< int, QString > &_roomGameTypes)
Definition tab_game.cpp:108
void actCompleterChanged()
Definition tab_game.cpp:702
AbstractGame * game
Definition tab_game.h:62
void gameLeft()
QDockWidget * cardInfoDock
Definition tab_game.h:84
void createPlayAreaWidget(bool bReplay=false)
Definition tab_game.cpp:1234
QAction * aCopyGameLink
Definition tab_game.h:88
QAction * aResetReplayLayout
Definition tab_game.h:89
void actInviteToGame()
Definition tab_game.cpp:541
void closeEvent(QCloseEvent *event) override
Definition tab_game.cpp:492
QDockWidget * playerListDock
Definition tab_game.h:84
QStringList gameTypes
Definition tab_game.h:65
void createDeckViewContainerWidget(bool bReplay=false)
Definition tab_game.cpp:1276
void setCardMenu(CardMenu *menu)
Definition tab_game.cpp:1022
QAction * aReverseTurn
Definition tab_game.h:89
QStringListModel * mentionModel
Definition tab_game.h:67
void startGame(bool resuming)
Definition tab_game.cpp:878
void actNextPhaseAction()
Definition tab_game.cpp:668
QAction * aRotateViewCW
Definition tab_game.h:89
void createViewMenuItems()
Definition tab_game.cpp:1141
QAction * aLeaveGame
Definition tab_game.h:88
QLabel * timeElapsedLabel
Definition tab_game.h:74
QLabel * sayLabel
Definition tab_game.h:76
void addLocalPlayer(PlayerLogic *newPlayer, int playerId)
Definition tab_game.cpp:759
void addPlayerToAutoCompleteList(QString playerName)
Definition tab_game.cpp:630
QCompleter * mentionCompleter
Definition tab_game.h:66
void registerDockWidget(QMenu *_viewMenu, QDockWidget *widget, const QSize &defaultSize)
Definition tab_game.cpp:1162
void containerProcessingDone()
void actSay()
Definition tab_game.cpp:611
void newCardAdded(AbstractCardItem *card)
Definition tab_game.cpp:970
void actResetLayout()
Definition tab_game.cpp:1204
QAction * aGameInfo
Definition tab_game.h:88
bool leaveGame()
Definition tab_game.cpp:593
void notifyPlayerJoin(QString playerName)
Definition tab_game.cpp:708
void removePlayerFromAutoCompleteList(QString playerName)
Definition tab_game.cpp:638
void adminLockChanged(bool lock)
Definition tab_game.cpp:503
void stopGame()
Definition tab_game.cpp:909
void connectToGameState()
Definition tab_game.cpp:156
GameScene * scene
Definition tab_game.h:79
TearOffMenu * phasesMenu
Definition tab_game.h:87
CardInfoFrameWidget * cardInfoFrameWidget
Definition tab_game.h:71
void refreshShortcuts()
Definition tab_game.cpp:405
void actGameInfo()
Definition tab_game.cpp:510
QStringList autocompleteUserList
Definition tab_game.h:68
void actRotateViewCCW()
Definition tab_game.cpp:697
void actPhaseAction()
Definition tab_game.cpp:652
void updateInviteButtonState()
Definition tab_game.cpp:525
void createReplayMenuItems()
Definition tab_game.cpp:1114
void retranslateUi() override
Definition tab_game.cpp:296
void processPlayerLeave(PlayerLogic *leavingPlayer)
Definition tab_game.cpp:780
void viewCardInfo(const CardRef &cardRef={}) const
Definition tab_game.cpp:1287
void processLocalPlayerDeckSelect(PlayerLogic *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:824
void connectMessageLogToGameEventHandler()
Definition tab_game.cpp:191
QAction * aResetLayout
Definition tab_game.h:89
QMap< int, TabbedDeckViewContainer * > deckViewContainers
Definition tab_game.h:81
void notifyPlayerKicked()
Definition tab_game.cpp:717
void loadLayout()
Definition tab_game.cpp:1192
QAction * aNextPhaseAction
Definition tab_game.h:88
PlayerLogic * addPlayer(PlayerLogic *newPlayer)
Definition tab_game.cpp:727
void updateTimeElapsedLabel(QString newTime)
Definition tab_game.cpp:498
void actRemoveLocalArrows()
Definition tab_game.cpp:684
PhasesToolbar * phasesToolbar
Definition tab_game.h:78
void processRemotePlayerDeckSelect(QString deckList, int playerId, QString playerName)
Definition tab_game.cpp:802
void linkCardToChat(const QString &cardName)
Definition tab_game.cpp:256
QPushButton * inviteButton
Definition tab_game.h:73
void createCardInfoDock(bool bReplay=false)
Definition tab_game.cpp:1292
void phaseChanged(int phase)
void actConcede()
Definition tab_game.cpp:566
bool closeRequest() override
Definition tab_game.cpp:483
void createZoneForPlayer(PlayerLogic *newPlayer, int playerId)
Definition tab_game.cpp:857
QList< QAction * > phaseActions
Definition tab_game.h:92
void emitUserEvent()
Definition tab_game.cpp:271
QMenu * viewMenu
Definition tab_game.h:86
AbstractGame * getGame() const
Definition tab_game.h:200
void processLocalPlayerReady(int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:841
QString getTabText() const override
Definition tab_game.cpp:984
void removeSpectator(int spectatorId, ServerInfo_User spectator)
Definition tab_game.cpp:645
GameView * gameView
Definition tab_game.h:80
QAction * aNextPhase
Definition tab_game.h:88
QDockWidget * replayDock
Definition tab_game.h:84
QMenu * gameMenu
Definition tab_game.h:86
PlayerListWidget * playerListWidget
Definition tab_game.h:72
QAction * aNextTurn
Definition tab_game.h:88
const UserListProxy * userListProxy
Definition tab_game.h:63
void loadDeckForLocalPlayer(PlayerLogic *localPlayer, int playerId, ServerInfo_Player playerInfo)
Definition tab_game.cpp:830
void closeGame()
Definition tab_game.cpp:931
void connectToPlayerManager()
Definition tab_game.cpp:164
void addMentionTag(const QString &value)
Definition tab_game.cpp:250
QAction * aConcede
Definition tab_game.h:88
ReplayWidget * replayWidget
Definition tab_game.h:64
QAction * aRemoveLocalArrows
Definition tab_game.h:89
void openMessageDialog(const QString &userName, bool focus)
void turnAdvanced()
void createPlayerListDock(bool bReplay=false)
Definition tab_game.cpp:1314
QWidget * gamePlayAreaWidget
Definition tab_game.h:83
QWidget * deckViewContainerWidget
Definition tab_game.h:83
void createMessageDock(bool bReplay=false)
Definition tab_game.cpp:1351
void updatePlayerListDockTitle()
Definition tab_game.cpp:286
void createReplayDock(GameReplay *replay)
Definition tab_game.cpp:1258
~TabGame() override
Definition tab_game.cpp:279
void setActivePhase(int phase)
Definition tab_game.cpp:965
QAction * aRotateViewCCW
Definition tab_game.h:89
QStackedWidget * mainWidget
Definition tab_game.h:69
QAction * aCardMenu
Definition tab_game.h:93
QAction * aInviteToGame
Definition tab_game.h:91
void gameClosing(TabGame *tab)
void notIdle()
void connectPlayerListToGameEventHandler()
Definition tab_game.cpp:236
QAction * playersSeparator
Definition tab_game.h:85
QDockWidget * messageLayoutDock
Definition tab_game.h:84
void containerProcessingStarted(const GameEventContext &context)
void hideEvent(QHideEvent *event) override
Definition tab_game.cpp:1445
void actRotateViewCW()
Definition tab_game.cpp:692
MessageLogWidget * messageLog
Definition tab_game.h:75
QVBoxLayout * deckViewContainerLayout
Definition tab_game.h:82
QAction * aFocusChat
Definition tab_game.h:90
void openDeckEditor(const LoadedDeck &deck)
void chatMessageSent(QString chatMessage)
void processLocalPlayerReadyStateChanged(int playerId, bool ready)
Definition tab_game.cpp:852
void connectToGameEventHandler()
Definition tab_game.cpp:173
void actCopyGameLink()
Definition tab_game.cpp:516
void createMenuItems()
Definition tab_game.cpp:1035
LineEditCompleter * sayEdit
Definition tab_game.h:77
PlayerLogic * setActivePlayer(int id)
Definition tab_game.cpp:937
void actNextPhase()
Definition tab_game.cpp:658
void processLocalPlayerSideboardLocked(int playerId, bool sideboardLocked)
Definition tab_game.cpp:847
void processMultipleRemotePlayerDeckSelect(QVector< QPair< int, QPair< QString, QString > > > playerIdDeckMap)
Definition tab_game.cpp:813
void resetChatAndPhase()
Definition tab_game.cpp:262
QMap< QDockWidget *, DockActions > dockToActions
Definition tab_game.h:106
Definition tab_supervisor.h:84
Tab(TabSupervisor *_tabSupervisor)
Definition tab.cpp:11
Definition tabbed_deck_view_container.h:14
Definition tearoff_menu.h:15
Definition user_list_proxy.h:19
Definition view_zone_widget.h:51
Definition card_ref.h:14
Definition event_game_joined.proto:5
Definition game_event_context.proto:2
Definition game_replay.proto:4
Represents a deck that was loaded from somewhere. Contains the DeckList itself, as well as info about...
Definition loaded_deck.h:14
Definition serverinfo_playerproperties.proto:3
Definition serverinfo_player.proto:6
The actions associated with managing a QDockWidget.
Definition tab_game.h:99
QAction * aVisible
Definition tab_game.h:101
QAction * aFloating
Definition tab_game.h:102
QMenu * menu
Definition tab_game.h:100
QSize defaultSize
Definition tab_game.h:103
Q_LOGGING_CATEGORY(TabGameLog, "tab_game")