Deskflow 1.22.0.197
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 "ServerConfig.h"
20#include "VersionChecker.h"
25#include "gui/tls/TlsUtility.h"
26
27#ifdef Q_OS_MAC
28#include "gui/OSXHelpers.h"
29#endif
30
31class QAction;
32class QMenu;
33class QLabel;
34class QLineEdit;
35class QGroupBox;
36class QPushButton;
37class QTextEdit;
38class QComboBox;
39class QTabWidget;
40class QToolButton;
41class QCheckBox;
42class QRadioButton;
43class QMessageBox;
44class QAbstractButton;
45class QLocalServer;
46
47class DeskflowApplication;
48
49namespace Ui {
50class MainWindow;
51}
52
53namespace deskflow::gui::ipc {
54class DaemonIpcClient;
55}
56
57class MainWindow : public QMainWindow
58{
59 using CoreMode = Settings::CoreMode;
60 using CoreProcess = deskflow::gui::CoreProcess;
61
62 Q_OBJECT
63
64 friend class DeskflowApplication;
65 friend class SettingsDialog;
66
67public:
68 enum class LogLevel
69 {
72 };
73
74public:
75 explicit MainWindow();
76 ~MainWindow() override;
77
78 [[nodiscard]] CoreMode coreMode() const
79 {
80 return m_coreProcess.mode();
81 }
82 void open();
84 {
85 return m_serverConfig;
86 }
87 void autoAddScreen(const QString &name);
88
89 void hide();
90
91private:
92 void toggleLogVisible(bool visible);
93
94 void settingsChanged(const QString &key = QString());
95 void serverConfigSaving();
96 void coreProcessStarting();
97 void coreProcessError(CoreProcess::Error error);
98 void coreConnectionStateChanged(CoreProcess::ConnectionState state);
99 void coreProcessStateChanged(CoreProcess::ProcessState state);
100 void versionCheckerUpdateFound(const QString &version);
101 void trayIconActivated(QSystemTrayIcon::ActivationReason reason);
102 void serverConnectionConfigureClient(const QString &clientName);
103
104 void clearSettings();
105 void openAboutDialog();
106 void openHelpUrl() const;
107 void openGetNewVersionUrl() const;
108 void openSettings();
109 void startCore();
110 void stopCore();
111 bool saveServerConfig();
112 void resetCore();
113
114 void showMyFingerprint();
115 void updateSecurityIcon(bool visible);
116
117 void coreModeToggled();
118 void updateModeControls(bool serverMode);
119
120 std::unique_ptr<Ui::MainWindow> ui;
121
122 void updateSize();
123 void createMenuBar();
124 void setupTrayIcon();
125 void applyConfig();
126 void setIcon();
127 void setStatus(const QString &status);
128 void updateFromLogLine(const QString &line);
129 [[nodiscard]] QString getIPAddresses() const;
130 void checkConnected(const QString &line);
131 void checkFingerprint(const QString &line);
132 [[nodiscard]] QString getTimeStamp() const;
133 void closeEvent(QCloseEvent *event) override;
134 void secureSocket(bool secureSocket);
135 void connectSlots();
136 void handleLogLine(const QString &line);
137 void updateLocalFingerprint();
138 void updateScreenName();
139 void saveSettings() const;
140 void showConfigureServer(const QString &message);
141 void restoreWindow();
142 void setupControls();
143 void showFirstConnectedMessage();
144 void updateStatus();
145 void showAndActivate();
146 void showHostNameEditor();
147 void setHostName();
148 void daemonIpcClientConnectionFailed();
149 void toggleCanRunCore(bool enableButtons);
150 void remoteHostChanged(const QString &newRemoteHost);
151
156 QString trustedFingerprintDatabase() const;
157
158 // Generate prints if they are missing
159 // Returns true if successful
160 bool regenerateLocalFingerprints();
161
162 void serverClientsChanged(const QStringList &clients);
163
164 inline static const auto m_guiSocketName = QStringLiteral("deskflow-gui");
165 inline static const auto m_nameRegEx = QRegularExpression(QStringLiteral("^[\\w\\-_\\.]{0,255}$"));
166
167 VersionChecker m_versionChecker;
168 bool m_secureSocket = false;
169 bool m_saveOnExit = true;
170 deskflow::gui::core::WaylandWarnings m_waylandWarnings;
171 ServerConfig m_serverConfig;
172 deskflow::gui::CoreProcess m_coreProcess;
173 deskflow::gui::ServerConnection m_serverConnection;
174 deskflow::gui::ClientConnection m_clientConnection;
175 deskflow::gui::TlsUtility m_tlsUtility;
176 QSize m_expandedSize = QSize();
177 QStringList m_checkedClients;
178 QStringList m_checkedServers;
179 QSystemTrayIcon *m_trayIcon = nullptr;
180 QLocalServer *m_guiDupeChecker = nullptr;
181 deskflow::gui::ipc::DaemonIpcClient *m_daemonIpcClient = nullptr;
182
183 QLabel *m_lblSecurityStatus = nullptr;
184 QLabel *m_lblStatus = nullptr;
185 QToolButton *m_btnFingerprint = nullptr;
186 QPushButton *m_btnUpdate = nullptr;
187
188 // Window Actions
189 QAction *m_actionAbout = nullptr;
190 QAction *m_actionClearSettings = nullptr;
191 QAction *m_actionReportBug = nullptr;
192 QAction *m_actionMinimize = nullptr;
193 QAction *m_actionQuit = nullptr;
194 QAction *m_actionTrayQuit = nullptr;
195 QAction *m_actionRestore = nullptr;
196 QAction *m_actionSettings = nullptr;
197 QAction *m_actionStartCore = nullptr;
198 QAction *m_actionRestartCore = nullptr;
199 QAction *m_actionStopCore = nullptr;
200};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:27
int key
Definition KeySequence.cpp:15
~MainWindow() override
Definition MainWindow.cpp:175
MainWindow()
Definition MainWindow.cpp:60
void hide()
Definition MainWindow.cpp:1044
friend class DeskflowApplication
Definition MainWindow.h:64
CoreMode coreMode() const
Definition MainWindow.h:78
ServerConfig & serverConfig()
Definition MainWindow.h:83
void open()
Definition MainWindow.cpp:620
friend class SettingsDialog
Definition MainWindow.h:65
void autoAddScreen(const QString &name)
Definition MainWindow.cpp:1032
LogLevel
Definition MainWindow.h:69
@ Info
Definition MainWindow.h:71
@ Error
Definition MainWindow.h:70
Definition ServerConfig.h:41
CoreMode
Definition Settings.h:106
Definition VersionChecker.h:17
Definition ClientConnection.h:21
Definition CoreProcess.h:30
ConnectionState
Definition CoreProcess.h:66
ProcessState
Definition CoreProcess.h:58
Error
Definition CoreProcess.h:53
Definition ServerConnection.h:17
Definition TlsUtility.h:16
Definition WaylandWarnings.h:16
Definition DaemonIpcClient.h:16
Definition AboutDialog.h:13
Definition CoreProcess.h:25