refactor: mainwindow simplify the mode selection UI

This commit is contained in:
sithlord48 2025-02-23 16:28:53 -05:00 committed by Nick Bolton
parent b7eb5c467b
commit 5b54849fd6
3 changed files with 218 additions and 301 deletions

View File

@ -231,6 +231,14 @@ void MainWindow::setupControls()
ui->textLog->setVisible(false);
}
ui->serverOptions->setVisible(false);
ui->clientOptions->setVisible(false);
ui->rbModeClient->setChecked(m_appConfig.clientGroupChecked());
ui->rbModeServer->setChecked(m_appConfig.serverGroupChecked());
if (m_appConfig.clientGroupChecked() || m_appConfig.serverGroupChecked())
updateModeControls(m_appConfig.serverGroupChecked());
#if defined(Q_OS_MAC)
ui->rbModeServer->setAttribute(Qt::WA_MacShowFocusRect, 0);
@ -326,8 +334,8 @@ void MainWindow::connectSlots()
connect(ui->lblComputerName, &QLabel::linkActivated, this, &MainWindow::openSettings);
connect(m_btnFingerprint, &QToolButton::clicked, this, &MainWindow::showMyFingerprint);
connect(ui->rbModeServer, &QRadioButton::clicked, this, &MainWindow::setModeServer);
connect(ui->rbModeClient, &QRadioButton::clicked, this, &MainWindow::setModeClient);
connect(ui->rbModeServer, &QRadioButton::toggled, this, &MainWindow::coreModeToggled);
connect(ui->rbModeClient, &QRadioButton::toggled, this, &MainWindow::coreModeToggled);
connect(ui->btnToggleLog, &QAbstractButton::toggled, this, &MainWindow::toggleLogVisible);
@ -530,18 +538,41 @@ void MainWindow::showMyFingerprint()
fingerprintDialog.exec();
}
void MainWindow::setModeServer()
void MainWindow::coreModeToggled()
{
enableServer(true);
enableClient(false);
auto serverMode = ui->rbModeServer->isChecked();
const auto mode = serverMode ? QStringLiteral("server enabled") : QStringLiteral("client enabled");
qDebug() << mode;
m_appConfig.setServerGroupChecked(serverMode);
m_appConfig.setClientGroupChecked(!serverMode);
m_configScopes.save();
updateModeControls(serverMode);
}
void MainWindow::setModeClient()
void MainWindow::updateModeControls(bool serverMode)
{
enableClient(true);
enableServer(false);
m_configScopes.save();
ui->serverOptions->setVisible(serverMode);
ui->clientOptions->setVisible(!serverMode);
ui->lblNoMode->setVisible(false);
ui->btnToggleCore->setEnabled(true);
m_actionStartCore->setEnabled(true);
auto expectedCoreMode = serverMode ? CoreProcess::Mode::Server : CoreProcess::Mode::Client;
if (m_coreProcess.isStarted() && m_coreProcess.mode() != expectedCoreMode)
m_coreProcess.stop();
m_coreProcess.setMode(expectedCoreMode);
if (serverMode) {
// The server can run without any clients configured, and this is actually
// what you'll want to do the first time since you'll be prompted when an
// unrecognized client tries to connect.
if (!m_appConfig.startedBefore() && !m_coreProcess.isStarted()) {
qDebug() << "auto-starting core server for first time";
m_coreProcess.start();
messages::showFirstServerStartMessage(this);
}
}
}
void MainWindow::updateSecurityIcon(bool visible)
@ -661,12 +692,13 @@ void MainWindow::setupTrayIcon()
void MainWindow::applyConfig()
{
enableServer(m_appConfig.serverGroupChecked());
enableClient(m_appConfig.clientGroupChecked());
ui->lineHostname->setText(m_appConfig.serverHostname());
updateLocalFingerprint();
setIcon();
if (!m_appConfig.serverGroupChecked() && !m_appConfig.clientGroupChecked())
return;
updateModeControls(m_appConfig.serverGroupChecked());
}
void MainWindow::saveSettings()
@ -1019,52 +1051,6 @@ void MainWindow::updateScreenName()
m_serverConfig.updateServerName();
}
void MainWindow::enableServer(bool enable)
{
QString serverStr = enable ? QStringLiteral("server enabled") : QStringLiteral("server disabled");
qDebug() << serverStr;
m_appConfig.setServerGroupChecked(enable);
ui->rbModeServer->setChecked(enable);
ui->widgetServer->setEnabled(enable);
if (enable) {
ui->btnToggleCore->setEnabled(true);
m_actionStartCore->setEnabled(true);
if (m_coreProcess.isStarted() && m_coreProcess.mode() != CoreProcess::Mode::Server)
m_coreProcess.stop();
m_coreProcess.setMode(CoreProcess::Mode::Server);
// The server can run without any clients configured, and this is actually
// what you'll want to do the first time since you'll be prompted when an
// unrecognized client tries to connect.
if (!m_appConfig.startedBefore() && !m_coreProcess.isStarted()) {
qDebug() << "auto-starting core server for first time";
m_coreProcess.start();
messages::showFirstServerStartMessage(this);
}
}
}
void MainWindow::enableClient(bool enable)
{
QString clientStr = enable ? QStringLiteral("client enabled") : QStringLiteral("client disabled");
qDebug() << clientStr;
m_appConfig.setClientGroupChecked(enable);
ui->rbModeClient->setChecked(enable);
ui->widgetClientInput->setEnabled(enable);
ui->widgetClientInput->setVisible(true);
if (enable) {
ui->btnToggleCore->setEnabled(true);
m_actionStartCore->setEnabled(true);
if (m_coreProcess.isStarted() && m_coreProcess.mode() != CoreProcess::Mode::Client)
m_coreProcess.stop();
m_coreProcess.setMode(CoreProcess::Mode::Client);
}
}
void MainWindow::showAndActivate()
{
#ifdef Q_OS_MAC

View File

@ -119,10 +119,11 @@ private:
void resetCore();
void showMyFingerprint();
void setModeServer();
void setModeClient();
void updateSecurityIcon(bool visible);
void coreModeToggled();
void updateModeControls(bool serverMode);
std::unique_ptr<Ui::MainWindow> ui;
void updateSize();

View File

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>883</width>
<height>521</height>
<width>730</width>
<height>520</height>
</rect>
</property>
<property name="sizePolicy">
@ -73,6 +73,175 @@
</property>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string/>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widgetModeSelection" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QRadioButton" name="rbModeServer">
<property name="text">
<string>Use this computer's keyboard and mouse
(make this computer the server)</string>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="rbModeClient">
<property name="text">
<string>Use another computers mouse and keyboard
(make this computer the client)</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widgetModeOptions" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QWidget" name="serverOptions" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="btnConfigureServer">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>&amp;Configure Server</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>5</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="lblNoMode">
<property name="text">
<string>You must select a mode</string>
</property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="clientOptions" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="m_pLabelServerName">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Maximum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Server IP address or hostname:</string>
</property>
<property name="indent">
<number>0</number>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="lineHostname">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Hostname or IP address of the server computer.</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnConnect">
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widgetModes" native="true">
<property name="sizePolicy">
@ -97,240 +266,6 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QGroupBox" name="groupServer">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>15</number>
</property>
<item alignment="Qt::AlignmentFlag::AlignTop">
<widget class="QWidget" name="widgetServerRadio" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="rbModeServer">
<property name="text">
<string>Use this computer's keyboard and mouse</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>(make this computer the server)</string>
</property>
<property name="indent">
<number>20</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignmentFlag::AlignTop">
<widget class="QWidget" name="widgetServer" native="true">
<layout class="QVBoxLayout" name="m_pLayoutServer">
<property name="spacing">
<number>15</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<spacer name="spacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnConfigureServer">
<property name="text">
<string>&amp;Configure</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupClient">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<property name="spacing">
<number>15</number>
</property>
<item alignment="Qt::AlignmentFlag::AlignTop">
<widget class="QWidget" name="widgetClientRadio" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="rbModeClient">
<property name="text">
<string>Use another computers mouse and keyboard</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>(make this computer the client)</string>
</property>
<property name="indent">
<number>20</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item alignment="Qt::AlignmentFlag::AlignTop">
<widget class="QWidget" name="widgetClientInput" native="true">
<layout class="QVBoxLayout" name="m_pLayoutClient">
<property name="spacing">
<number>15</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="m_pLabelServerName">
<property name="text">
<string>Server IP address or hostname:</string>
</property>
<property name="indent">
<number>20</number>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>20</number>
</property>
<item>
<widget class="QLineEdit" name="lineHostname">
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="toolTip">
<string>Hostname or IP address of the server computer.</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnConnect">
<property name="text">
<string>Connect</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
@ -445,11 +380,6 @@
<widget class="QStatusBar" name="statusBar"/>
</widget>
<tabstops>
<tabstop>rbModeServer</tabstop>
<tabstop>btnConfigureServer</tabstop>
<tabstop>rbModeClient</tabstop>
<tabstop>lineHostname</tabstop>
<tabstop>btnConnect</tabstop>
<tabstop>btnToggleLog</tabstop>
<tabstop>textLog</tabstop>
</tabstops>