Cockatrice 2026-10-19-Development-3.1.2-beta.2
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
window_main.h
Go to the documentation of this file.
1/***************************************************************************
2 * Copyright (C) 2008 by Max-Wilhelm Bruker *
3 * brukie@gmx.net *
4 * *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
9 * *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
14 * *
15 * You should have received a copy of the GNU General Public License *
16 * along with this program; if not, write to the *
17 * Free Software Foundation, Inc., *
18 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19 ***************************************************************************/
25#ifndef WINDOW_H
26#define WINDOW_H
27
32
33#include <QByteArray>
34#include <QDir>
35#include <QElapsedTimer>
36#include <QList>
37#include <QLoggingCategory>
38#include <QMainWindow>
39#include <QMenu>
40#include <QProcess>
41#include <QString>
42#include <QStringList>
43#include <QUrl>
44#include <QtGlobal>
46#include <qtmetamacros.h>
47
48class QAction;
49class QToolButton;
50class QWidget;
51struct LocalGameOptions;
52
53inline Q_LOGGING_CATEGORY(WindowMainLog, "window_main");
54inline Q_LOGGING_CATEGORY(WindowMainStartupLog, "window_main.startup");
55inline Q_LOGGING_CATEGORY(WindowMainStartupVersionLog, "window_main.startup.version");
56inline Q_LOGGING_CATEGORY(WindowMainStartupShortcutsLog, "window_main.startup.shortcuts");
57inline Q_LOGGING_CATEGORY(WindowMainStartupAutoconnectLog, "window_main.startup.autoconnect");
58inline Q_LOGGING_CATEGORY(CardDatabaseUpdateLog, "card_database.update");
59
60class DlgViewLog;
61class GameReplay;
62class LocalServer;
65class RemoteClient;
66class TabSupervisor;
67class WndSets;
68class DlgTipOfTheDay;
70class IntentUrlParser;
71
72class MainWindow : public QMainWindow
73{
74 Q_OBJECT
75signals:
77 void cardDatabaseUpdateFinished(bool success);
78
83
84public slots:
89 void actConnect();
90 void actExit();
91 void handleCockatriceLink(const QString &url);
92private slots:
93 void updateTabMenu(const QList<QMenu *> &newMenuList);
94 void statusChanged(ClientStatus _status);
95 void localGameEnded();
96 void pixmapCacheSizeChanged(int newSizeInMBs);
97 void actDisconnect();
98 void actSinglePlayer();
99 void actWatchReplay();
100 void actFullScreen(bool checked);
101 void actSettings();
102 void actAbout();
103 void actTips();
104 void actUpdate();
105 void actViewLog();
107 void actShow();
108 void showWindowIfHidden();
109 void onUrlChainFinished(bool connected);
110
111 void cardUpdateError(QProcess::ProcessError err);
112 void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus);
115 void refreshShortcuts();
117 void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames);
119
120 void checkClientUpdatesFinished(bool needToUpdate, bool isCompatible, Release *release);
122
123 void actOpenCustomFolder();
125 void actAddCustomSet();
127
128 void actManageSets();
129 void actEditTokens();
130
131 void startupConfigCheck();
132 void alertForcedOracleRun(const QString &version, bool isUpdate);
133
135 void onStartupDestinationConnected(int destination, const ContextConnectToServer &serverContext);
136 void startupDestinationFailed(const QString &reason);
137 [[nodiscard]] bool startupDestinationConnectsToServer() const;
138
140
141private:
142 static const QString appName;
143 static const QStringList fileNameFilters;
144 void retranslateUi();
145 void createActions();
146 void createMenus();
147
148 void createTrayIcon();
149 int getNextCustomSetPrefix(QDir dataDir);
150
151 void runFirstRunWizard(bool firstRun = false);
152
154 {
155 return "oracle";
156 }
157 void createCardUpdateProcess(bool background = false);
158 void exitCardDatabaseUpdate(bool doReload);
175 void notifyCardUpdateFinishedFromTray(bool success);
176
177 void startLocalGame(const LocalGameOptions &options);
178
181 QAction *aAbout, *aSettings, *aShow, *aExit;
182 QToolButton *settingsButton = nullptr;
188
197 bool bClosingDown = false;
212
213public:
214 explicit MainWindow(QWidget *parent = nullptr);
215 void setConnectTo(QString url)
216 {
217 connectTo = QUrl(QString("cockatrice://%1").arg(url));
218 }
219 // When set, the window's own startup connection (--connect or auto-connect
220 // on first activation) is skipped. Used for activation launches: the intent
221 // chain triggered by a cockatrice:// URL owns the connection, and letting
222 // auto-connect race against it caused two connectToServer calls to tear
223 // each other down. onUrlChainFinished() clears this and retries the startup
224 // connection when the link's chain ended without connecting.
226 {
228 }
229 ~MainWindow() override;
230
232 {
234 }
235
237 {
238 return tabSupervisor;
239 }
240
246 bool closeForUpdate();
247
248protected:
249 void closeEvent(QCloseEvent *event) override;
250 void changeEvent(QEvent *event) override;
251};
252
253#endif
ClientStatus
Definition abstract_client.h:58
CardUpdateStage
One stage of the card database updater's progress protocol.
Definition card_update_progress.h:13
@ Unknown
a stage the client does not recognize
Definition card_update_progress.h:17
Status bar widget showing what the card database updater (Oracle) is doing.
Definition card_database_update_status_bar.h:24
Definition remote_connection_controller.h:28
RemoteClient * client() const
Definition remote_connection_controller.h:35
Definition dlg_tip_of_the_day.h:28
Definition dlg_view_log.h:20
Parses cockatrice:// links and runs them as serialized intent chains.
Definition url_parser.h:48
Detects main-thread event loop stalls ("UI freezes") from the inside.
Definition lag_monitor.h:37
Status bar presentation of server round-trip health.
Definition latency_status_widget.h:29
Definition local_server.h:19
Definition window_main.h:73
QAction * aFullScreen
Definition window_main.h:183
bool skipStartupAutoConnect
Definition window_main.h:198
void actViewLog()
Definition window_main.cpp:330
void closeEvent(QCloseEvent *event) override
Definition window_main.cpp:924
void reloadCardDatabaseAndCheckSets()
Reloads the card database on a worker thread and runs checkUnknownSets() once the finished snapshot h...
Definition window_main.cpp:1339
QAction * aEditTokens
Definition window_main.h:184
bool bClosingDown
guards closeEvent() against re-entrancy
Definition window_main.h:197
QAction * aRegister
Definition window_main.h:183
QUrl connectTo
Definition window_main.h:211
void setConnectTo(QString url)
Definition window_main.h:215
QAction * aStatusBar
Definition window_main.h:186
void exitCardDatabaseUpdate(bool doReload)
Definition window_main.cpp:1323
bool bHasActivated
Definition window_main.h:196
QMenu * cockatriceMenu
Definition window_main.h:180
QList< QMenu * > tabMenus
Definition window_main.h:179
void showWindowIfHidden()
Definition window_main.cpp:993
LatencyStatusWidget * latencyStatus
status bar widget with live round-trip stats and history graph
Definition window_main.h:195
QMenu * trayIconMenu
Definition window_main.h:180
void pixmapCacheSizeChanged(int newSizeInMBs)
Definition window_main.cpp:986
QAction * aOpenCustomsetsFolder
Definition window_main.h:184
CardDatabaseUpdateStatusBar * cardUpdateStatusBar
status bar widget tracking the card database update
Definition window_main.h:207
void actAbout()
Definition window_main.cpp:288
LagMonitor lagMonitor
watches the main thread for event loop stalls
Definition window_main.h:194
void attemptStartupAutoConnect()
Definition window_main.cpp:1005
void retranslateUi()
Definition window_main.cpp:347
ConnectionController * connectionController
Definition window_main.h:192
QAction * aReloadCardDatabase
Definition window_main.h:185
bool closeForUpdate()
Closes the window so an update installer can replace the running binaries. Returns true only if the s...
Definition window_main.cpp:960
void actOpenCustomFolder()
Definition window_main.cpp:1491
void actOpenSettingsFolder()
Definition window_main.cpp:341
QAction * aWatchReplay
Definition window_main.h:183
bool requestCardUpdateRaise()
Tries to bring the open card database updater window to the front.
Definition window_main.cpp:1407
void cardUpdateError(QProcess::ProcessError err)
Definition window_main.cpp:1349
void startupDestinationFailed(const QString &reason)
Definition window_main.cpp:844
void actCheckCardUpdates()
Definition window_main.cpp:1163
void actSettings()
Definition window_main.cpp:275
QMenu * helpMenu
Definition window_main.h:180
void changeEvent(QEvent *event) override
Definition window_main.cpp:972
void actUpdate()
Definition window_main.cpp:324
void actConnect()
Definition window_main.cpp:182
void actCheckServerUpdates()
Definition window_main.cpp:1441
QAction * aShow
Definition window_main.h:181
QAction * aConnect
Definition window_main.h:183
void actFullScreen(bool checked)
Definition window_main.cpp:266
QAction * aExit
Definition window_main.h:181
void cardDatabaseUpdateProgress(const CardUpdateProgress &progress)
Emitted while the card-database update subprocess runs. progress.done/progress.total are byte counts ...
QAction * aOpenCustomFolder
Definition window_main.h:184
bool askedForDbUpdater
Definition window_main.h:196
QString getCardUpdaterBinaryName()
Definition window_main.h:153
QAction * aSettings
Definition window_main.h:181
void startLocalGame(const LocalGameOptions &options)
Definition window_main.cpp:202
QByteArray cardUpdateOutputBuffer
Definition window_main.h:202
QAction * aUpdate
Definition window_main.h:186
void updateTabMenu(const QList< QMenu * > &newMenuList)
Definition window_main.cpp:142
void createActions()
Definition window_main.cpp:397
static const QStringList fileNameFilters
Definition window_main.h:143
DlgViewLog * logviewDialog
Definition window_main.h:208
GameReplay * replay
Definition window_main.h:209
void onUrlChainFinished(bool connected)
Definition window_main.cpp:1026
DlgTipOfTheDay * tip
Definition window_main.h:210
QElapsedTimer cardUpdateProgressLogTimer
throttles progress logging to the running stage
Definition window_main.h:206
void createCardUpdateProcess(bool background=false)
Definition window_main.cpp:1173
QAction * aSinglePlayer
Definition window_main.h:183
void actSinglePlayer()
Definition window_main.cpp:192
void localGameEnded()
Definition window_main.cpp:255
void alertForcedOracleRun(const QString &version, bool isUpdate)
Definition window_main.cpp:855
LocalServer * localServer
Definition window_main.h:193
void cardDatabaseNewSetsFound(int numUnknownSets, QStringList unknownSetsNames)
Definition window_main.cpp:1086
QAction * aDisconnect
Definition window_main.h:183
QAction * aCheckCardUpdates
Definition window_main.h:186
QAction * aManageSets
Definition window_main.h:184
bool startupAutoConnectAttempted
Definition window_main.h:199
void cardDatabaseLoadingFailed()
Definition window_main.cpp:1059
QProcess * cardUpdateProcess
Definition window_main.h:201
void runFirstRunWizard(bool firstRun=false)
Definition window_main.cpp:743
void notifyCardUpdateFinishedFromTray(bool success)
Posts a tray notification when the status bar cannot show progress.
Definition window_main.cpp:1431
IntentUrlParser * urlParser
Definition window_main.h:190
MainWindow(QWidget *parent=nullptr)
Definition window_main.cpp:536
void actCheckCardUpdatesBackground()
Definition window_main.cpp:1168
void setSkipStartupAutoConnect(bool skip)
Definition window_main.h:225
void actShow()
Definition window_main.cpp:910
void createMenus()
Definition window_main.cpp:492
int getNextCustomSetPrefix(QDir dataDir)
Definition window_main.cpp:1557
RemoteClient * getRemoteClient() const
Definition window_main.h:231
QAction * aViewLog
Definition window_main.h:187
void refreshShortcuts()
Definition window_main.cpp:1473
void cardDatabaseAllNewSetsEnabled()
Definition window_main.cpp:1129
void createTrayIcon()
Definition window_main.cpp:893
void checkClientUpdatesFinished(bool needToUpdate, bool isCompatible, Release *release)
Definition window_main.cpp:1455
QMenu * dbMenu
Definition window_main.h:180
CardUpdateStage cardUpdateLoggedStage
stage of the last logged progress update
Definition window_main.h:205
QAction * aTips
Definition window_main.h:186
void cardUpdateFinished(int exitCode, QProcess::ExitStatus exitStatus)
Definition window_main.cpp:1387
void announceCardUpdateRunning()
Tells the user an update is running without blocking, honoring a hidden status bar.
Definition window_main.cpp:1421
QAction * aCheckCardUpdatesBackground
Definition window_main.h:186
void startupConfigCheck()
Definition window_main.cpp:627
void applyStartupDestination()
Definition window_main.cpp:777
QMenu * tabsMenu
Definition window_main.h:180
void handleCockatriceLink(const QString &url)
Definition window_main.cpp:1000
QAction * aAddCustomSet
Definition window_main.h:184
QAction * aOpenSettingsFolder
Definition window_main.h:187
void cardUpdateStandardError()
Definition window_main.cpp:1302
bool startupDestinationConnectsToServer() const
Definition window_main.cpp:849
void actOpenCustomsetsFolder()
Definition window_main.cpp:1497
void actDisconnect()
Definition window_main.cpp:187
QAction * aForgotPassword
Definition window_main.h:183
void actEditTokens()
Definition window_main.cpp:1587
void actReloadCardDatabase()
Definition window_main.cpp:1573
void statusChanged(ClientStatus _status)
Definition window_main.cpp:153
void actTips()
Definition window_main.cpp:312
static const QString appName
Definition window_main.h:142
QToolButton * settingsButton
Definition window_main.h:182
void cardDatabaseUpdateFinished(bool success)
Emitted after the card-database update subprocess exits.
QByteArray cardUpdateErrorPartial
incomplete trailing stderr line, kept for line-based logging
Definition window_main.h:204
void actCheckClientUpdates()
Definition window_main.cpp:1448
bool firstRunWizardActive
Definition window_main.h:200
TabSupervisor * tabSupervisor
Definition window_main.h:189
QByteArray cardUpdateErrorOutput
diagnostic output collected from the updater's stderr
Definition window_main.h:203
WndSets * wndSets
Definition window_main.h:191
void cardUpdateProgressOutput()
Definition window_main.cpp:1272
void actAddCustomSet()
Definition window_main.cpp:1503
void actWatchReplay()
Definition window_main.cpp:230
QAction * aAbout
Definition window_main.h:181
void onStartupDestinationConnected(int destination, const ContextConnectToServer &serverContext)
Definition window_main.cpp:819
TabSupervisor * getTabSupervisor() const
Definition window_main.h:236
void actManageSets()
Definition window_main.cpp:1581
QAction * aFirstRunWizard
Definition window_main.h:186
void actCheckCommanderBracketDefinitionUpdates()
Definition window_main.cpp:1463
void actExit()
Definition window_main.cpp:283
Definition remote_connection_controller.h:20
Definition release_channel.h:25
Definition remote_client.h:34
Definition tab_supervisor.h:92
Definition dlg_manage_sets.h:32
Q_LOGGING_CATEGORY(CrashReportLog, "crash_report")
One progress line read from the card database updater's stdout.
Definition card_update_progress.h:24
Definition context_connect_to_server.h:7
Definition game_replay.proto:4
Definition dlg_local_game_options.h:19