Deskflow 1.24.0.365
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
MainWindow.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2024 Chris Rizzitello <sithord48@gmail.com>
4 * SPDX-FileCopyrightText: (C) 2012 - 2024 Symless Ltd.
5 * SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
6 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
7 */
8
9#pragma once
10
11#include <QMainWindow>
12#include <QMutex>
13#include <QProcess>
14#include <QRegularExpression>
15#include <QSettings>
16#include <QSystemTrayIcon>
17#include <QThread>
18
19#include "VersionChecker.h"
20#include "config/ServerConfig.h"
25#include "gui/tls/TlsUtility.h"
26#include "net/Fingerprint.h"
27
28#ifdef Q_OS_MAC
29#include "gui/OSXHelpers.h"
30#endif
31
32class QAction;
33class QMenu;
34class QLabel;
35class QLineEdit;
36class QGroupBox;
37class QPushButton;
38class QTextEdit;
39class QComboBox;
40class QTabWidget;
41class QCheckBox;
42class QRadioButton;
43class QMessageBox;
44class QAbstractButton;
45class QLocalServer;
46
47class DeskflowApplication;
48class LogDock;
49
50namespace Ui {
51class MainWindow;
52}
53
54namespace deskflow::gui::ipc {
55class DaemonIpcClient;
56}
57
58class MainWindow : public QMainWindow
59{
60 using CoreMode = Settings::CoreMode;
61 using CoreProcess = deskflow::gui::CoreProcess;
62
63 Q_OBJECT
64
65 friend class DeskflowApplication;
66 friend class SettingsDialog;
67
68public:
69 enum class LogLevel
70 {
73 };
74
75public:
76 explicit MainWindow();
77 ~MainWindow() override;
78
79 [[nodiscard]] CoreMode coreMode() const
80 {
81 return m_coreProcess.mode();
82 }
83 void open();
85 {
86 return m_serverConfig;
87 }
88
89 void hide();
90
91protected:
92 void changeEvent(QEvent *e) override;
93
94private:
98 void updateText();
99 void toggleLogVisible(bool visible);
100
101 void settingsChanged(const QString &key = QString());
102 void serverConfigSaving();
103 void coreProcessError(CoreProcess::Error error);
104 void coreConnectionStateChanged(CoreProcess::ConnectionState state);
105 void coreProcessStateChanged(CoreProcess::ProcessState state);
106 void versionCheckerUpdateFound(const QString &version);
107 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
108 void serverConnectionConfigureClient(const QString &clientName);
109
110 void clearSettings();
111 void openAboutDialog();
112 void openHelpUrl() const;
113 void openGetNewVersionUrl() const;
114 void openSettings();
115 void startCore();
116 void stopCore();
117 bool saveServerConfig();
118 void resetCore();
119
120 void showMyFingerprint();
121 void updateSecurityIcon(bool visible);
122 void updateNetworkInfo();
123
124 void coreModeToggled();
125 void updateModeControls(bool serverMode);
126 void updateModeControlLabels();
127 std::unique_ptr<Ui::MainWindow> ui;
128
129 void createMenuBar();
130 void setupTrayIcon();
131 void applyConfig();
132 void setTrayIcon();
133 void setStatus(const QString &status);
134 void updateFromLogLine(const QString &line);
135 void checkConnected(const QString &line);
136 void checkFingerprint(const QString &line);
137 void closeEvent(QCloseEvent *event) override;
138 void secureSocket(bool secureSocket);
139 void connectSlots();
140 void handleLogLine(const QString &line);
141 void updateLocalFingerprint();
142 void updateScreenName();
143 void saveSettings() const;
144 void showConfigureServer(const QString &message);
145 void restoreWindow();
146 void setupControls();
147 void showFirstConnectedMessage();
148 void updateStatus();
149 void showAndActivate();
150 void showHostNameEditor();
151 void setHostName();
152 void daemonIpcClientConnectionFailed();
153 void toggleCanRunCore(bool enableButtons);
154 void remoteHostChanged(const QString &newRemoteHost);
155
160 QString trustedFingerprintDatabase() const;
161
166 bool regenerateLocalFingerprints();
167
168 Fingerprint localFingerprint();
169
170 void serverClientsChanged(const QStringList &clients);
171
172 inline static const auto m_guiSocketName = QStringLiteral("deskflow-gui");
173 inline static const auto m_nameRegEx = QRegularExpression(QStringLiteral("^[\\w\\-_\\.]{0,255}$"));
174
175 VersionChecker m_versionChecker;
176 bool m_secureSocket = false;
177 bool m_saveOnExit = true;
178 deskflow::gui::core::WaylandWarnings m_waylandWarnings;
179 ServerConfig m_serverConfig;
180 deskflow::gui::CoreProcess m_coreProcess;
181 deskflow::gui::ServerConnection m_serverConnection;
182 deskflow::gui::ClientConnection m_clientConnection;
183 deskflow::gui::TlsUtility m_tlsUtility;
184 QSize m_expandedSize = QSize();
185 QStringList m_checkedClients;
186 QStringList m_checkedServers;
187 QSystemTrayIcon *m_trayIcon = nullptr;
188 QLocalServer *m_guiDupeChecker = nullptr;
189 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
190
191 LogDock *m_logDock;
192 QLabel *m_lblSecurityStatus = nullptr;
193 QLabel *m_lblStatus = nullptr;
194 QPushButton *m_btnFingerprint = nullptr;
195 QPushButton *m_btnUpdate = nullptr;
196
197 // Window Menu
198 QMenu *m_menuFile = nullptr;
199 QMenu *m_menuEdit = nullptr;
200 QMenu *m_menuView = nullptr;
201 QMenu *m_menuHelp = nullptr;
202
203 // Window Actions
204 QAction *m_actionAbout = nullptr;
205 QAction *m_actionClearSettings = nullptr;
206 QAction *m_actionReportBug = nullptr;
207 QAction *m_actionMinimize = nullptr;
208 QAction *m_actionQuit = nullptr;
209 QAction *m_actionTrayQuit = nullptr;
210 QAction *m_actionRestore = nullptr;
211 QAction *m_actionSettings = nullptr;
212 QAction *m_actionStartCore = nullptr;
213 QAction *m_actionRestartCore = nullptr;
214 QAction *m_actionStopCore = nullptr;
215};
int key
Definition KeySequence.cpp:15
Definition LogDock.h:16
~MainWindow() override
Definition MainWindow.cpp:165
MainWindow()
Definition MainWindow.cpp:61
void hide()
Definition MainWindow.cpp:1017
void changeEvent(QEvent *e) override
Definition MainWindow.cpp:1028
friend class DeskflowApplication
Definition MainWindow.h:65
CoreMode coreMode() const
Definition MainWindow.h:79
ServerConfig & serverConfig()
Definition MainWindow.h:84
void open()
Definition MainWindow.cpp:649
friend class SettingsDialog
Definition MainWindow.h:66
LogLevel
Definition MainWindow.h:70
@ Info
Definition MainWindow.h:72
@ Error
Definition MainWindow.h:71
Definition ServerConfig.h:35
CoreMode
Definition Settings.h:111
Definition VersionChecker.h:16
Definition ClientConnection.h:21
Definition CoreProcess.h:26
ConnectionState
Definition CoreProcess.h:49
ProcessState
Definition CoreProcess.h:39
Error
Definition CoreProcess.h:34
Definition ServerConnection.h:17
Definition TlsUtility.h:16
Definition WaylandWarnings.h:15
Definition DaemonIpcClient.h:16
Definition AboutDialog.h:13
Definition CoreProcess.h:21
Definition Fingerprint.h:13