Deskflow 1.25.0.128
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 <QHostAddress>
12#include <QMainWindow>
13#include <QMutex>
14#include <QProcess>
15#include <QRegularExpression>
16#include <QSettings>
17#include <QSystemTrayIcon>
18#include <QThread>
19
20#include "VersionChecker.h"
21#include "config/ServerConfig.h"
27#include "net/Fingerprint.h"
28
29#ifdef Q_OS_MACOS
30#include "gui/OSXHelpers.h"
31#endif
32
33class QAction;
34class QMenu;
35class QLabel;
36class QLineEdit;
37class QGroupBox;
38class QPushButton;
39class QTextEdit;
40class QComboBox;
41class QTabWidget;
42class QCheckBox;
43class QRadioButton;
44class QMessageBox;
45class QAbstractButton;
46class QLocalServer;
47
48class DeskflowApplication;
49class LogDock;
50
51namespace Ui {
52class MainWindow;
53}
54
55namespace deskflow::gui::ipc {
56class DaemonIpcClient;
57}
58
59class MainWindow : public QMainWindow
60{
61 using CoreMode = Settings::CoreMode;
62 using CoreProcess = deskflow::gui::CoreProcess;
63 using NetworkMonitor = deskflow::gui::NetworkMonitor;
64
65 Q_OBJECT
66
67 friend class DeskflowApplication;
68 friend class SettingsDialog;
69
70public:
71 enum class LogLevel
72 {
75 };
76
77public:
78 explicit MainWindow();
79 ~MainWindow() override;
80
81 [[nodiscard]] CoreMode coreMode() const
82 {
83 return m_coreProcess.mode();
84 }
85 void open();
87 {
88 return m_serverConfig;
89 }
90
91 void hide();
92
93protected:
94 void changeEvent(QEvent *e) override;
95
96private:
100 void updateText();
101 void toggleLogVisible(bool visible);
102
103 void settingsChanged(const QString &key = QString());
104 void serverConfigSaving();
105 void coreProcessError(CoreProcess::Error error);
106 void coreConnectionStateChanged(CoreProcess::ConnectionState state);
107 void coreProcessStateChanged(CoreProcess::ProcessState state);
108 void versionCheckerUpdateFound(const QString &version);
109 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
110 void serverConnectionConfigureClient(const QString &clientName);
111
112 void clearSettings();
113 void openAboutDialog();
114 void openHelpUrl() const;
115 void openGetNewVersionUrl() const;
116 void openSettings();
117 void startCore();
118 void stopCore();
119 bool saveServerConfig();
120 void resetCore();
121
122 void showMyFingerprint();
123 void updateSecurityIcon(bool visible);
124 void updateNetworkInfo();
125
126 void coreModeToggled();
127 void updateModeControls(bool serverMode);
128 void updateModeControlLabels();
129 std::unique_ptr<Ui::MainWindow> ui;
130
131 void createMenuBar();
132 void setupTrayIcon();
133 void applyConfig();
134 void setTrayIcon();
135 void setStatus(const QString &status);
136 void updateFromLogLine(const QString &line);
137 void checkConnected(const QString &line);
138 void checkFingerprint(const QString &line);
139 void closeEvent(QCloseEvent *event) override;
140 void secureSocket(bool secureSocket);
141 void connectSlots();
142 void handleLogLine(const QString &line);
143 void updateLocalFingerprint();
144 void updateScreenName();
145 void saveSettings() const;
146 void showConfigureServer(const QString &message);
147 void restoreWindow();
148 void setupControls();
149 void showFirstConnectedMessage();
150 void updateStatus();
151 void showAndActivate();
152 void showHostNameEditor();
153 void setHostName();
154 void daemonIpcClientConnectionFailed();
155 void toggleCanRunCore(bool enableButtons);
156 void remoteHostChanged(const QString &newRemoteHost);
157 void handleNewClientPromptRequest(const QString &clientName, bool usePeerAuth);
158 void updateIpLabel(const QList<QHostAddress> &addresses);
159
165 void showClientError(deskflow::client::ErrorType error, const QString &address);
166
171 QString trustedFingerprintDatabase() const;
172
177 bool generateCertificate();
178
179 Fingerprint m_fingerprint;
180
181 void serverClientsChanged(const QStringList &clients);
182
183 inline static const auto m_guiSocketName = QStringLiteral("deskflow-gui");
184 inline static const auto m_nameRegEx = QRegularExpression(QStringLiteral("^[\\w\\-_\\.]{0,255}$"));
185
186 VersionChecker m_versionChecker;
187 bool m_secureSocket = false;
188 bool m_saveOnExit = true;
189 bool m_clientErrorVisible = false;
190 deskflow::gui::core::WaylandWarnings m_waylandWarnings;
191 ServerConfig m_serverConfig;
192 deskflow::gui::CoreProcess m_coreProcess;
193 deskflow::gui::ServerConnection m_serverConnection;
194 deskflow::gui::ClientConnection m_clientConnection;
195 QSize m_expandedSize = QSize();
196 QStringList m_checkedClients;
197 QStringList m_checkedServers;
198 QSystemTrayIcon *m_trayIcon = nullptr;
199 QLocalServer *m_guiDupeChecker = nullptr;
200 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
201
202 LogDock *m_logDock;
203 QLabel *m_lblSecurityStatus = nullptr;
204 QLabel *m_lblStatus = nullptr;
205 QPushButton *m_btnFingerprint = nullptr;
206 QPushButton *m_btnUpdate = nullptr;
207
208 // Window Menu
209 QMenu *m_menuFile = nullptr;
210 QMenu *m_menuEdit = nullptr;
211 QMenu *m_menuView = nullptr;
212 QMenu *m_menuHelp = nullptr;
213
214 // Window Actions
215 QAction *m_actionAbout = nullptr;
216 QAction *m_actionClearSettings = nullptr;
217 QAction *m_actionReportBug = nullptr;
218 QAction *m_actionMinimize = nullptr;
219 QAction *m_actionQuit = nullptr;
220 QAction *m_actionTrayQuit = nullptr;
221 QAction *m_actionRestore = nullptr;
222 QAction *m_actionSettings = nullptr;
223 QAction *m_actionStartCore = nullptr;
224 QAction *m_actionRestartCore = nullptr;
225 QAction *m_actionStopCore = nullptr;
226
227 // Network monitoring
228 NetworkMonitor *m_networkMonitor = nullptr;
229 QHostAddress m_currentIpAddress;
230
231 // Server IP strategy optimization
232 QList<QHostAddress> m_serverStartIPs;
233 QHostAddress m_serverStartSuggestedIP;
234 bool m_currentIPValid;
235};
int key
Definition KeySequence.cpp:15
Definition LogDock.h:16
~MainWindow() override
Definition MainWindow.cpp:164
MainWindow()
Definition MainWindow.cpp:58
void hide()
Definition MainWindow.cpp:1003
void changeEvent(QEvent *e) override
Definition MainWindow.cpp:1014
friend class DeskflowApplication
Definition MainWindow.h:67
CoreMode coreMode() const
Definition MainWindow.h:81
ServerConfig & serverConfig()
Definition MainWindow.h:86
void open()
Definition MainWindow.cpp:627
friend class SettingsDialog
Definition MainWindow.h:68
LogLevel
Definition MainWindow.h:72
@ Info
Definition MainWindow.h:74
@ Error
Definition MainWindow.h:73
Definition ServerConfig.h:35
CoreMode
Definition Settings.h:114
Definition VersionChecker.h:16
Definition ClientConnection.h:20
Definition CoreProcess.h:26
ConnectionState
Definition CoreProcess.h:49
ProcessState
Definition CoreProcess.h:39
Error
Definition CoreProcess.h:34
Monitor network activity changes and provide IP address updates.
Definition NetworkMonitor.h:23
Definition ServerConnection.h:18
Definition WaylandWarnings.h:15
Definition DaemonIpcClient.h:16
Definition AboutDialog.h:13
ErrorType
Definition Enums.h:16
Definition CoreProcess.h:21
Definition Fingerprint.h:14