refactor: serverConfig finish renaming, improve logic

This commit is contained in:
sithlord48 2025-02-01 12:41:08 -05:00 committed by Nick Bolton
parent ae30237f90
commit fedd9d33c9
3 changed files with 314 additions and 435 deletions

View file

@ -62,33 +62,78 @@ ServerConfigDialog::ServerConfigDialog(QWidget *parent, ServerConfig &config, Ap
&ServerConfigDialog::listActionsSelectionChanged
);
ui->m_pButtonBrowseConfigFile->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen));
// force the first tab, since qt creator sets the active tab as the last one
// the developer was looking at, and it's easy to accidentally save that.
ui->tabWidget->setCurrentIndex(0);
ui->m_pEditConfigFile->setText(serverConfig().configFile());
ui->m_pCheckBoxUseExternalConfig->setChecked(serverConfig().useExternalConfig());
ui->btnBrowseConfigFile->setIcon(QIcon::fromTheme(QIcon::ThemeIcon::DocumentOpen));
ui->lineConfigFile->setText(serverConfig().configFile());
ui->groupExternalConfig->setChecked(serverConfig().useExternalConfig());
ui->rbProtocolSynergy->setChecked(serverConfig().protocol() == ServerProtocol::kSynergy);
ui->rbProtocolBarrier->setChecked(serverConfig().protocol() == ServerProtocol::kBarrier);
connect(ui->rbProtocolBarrier, &QRadioButton::toggled, this, &ServerConfigDialog::toggleProtocol);
ui->cbHeartbeat->setChecked(serverConfig().hasHeartbeat());
ui->m_pRadioProtocolSynergy->setChecked(serverConfig().protocol() == ServerProtocol::kSynergy);
ui->m_pRadioProtocolBarrier->setChecked(serverConfig().protocol() == ServerProtocol::kBarrier);
connect(ui->cbHeartbeat, &QCheckBox::toggled, this, &ServerConfigDialog::toggleHeartbeat);
ui->sbHeartbeat->setValue(serverConfig().heartbeat());
connect(ui->sbHeartbeat, QOverload<int>::of(&QSpinBox::valueChanged), this, &ServerConfigDialog::setHeartbeat);
ui->cbRelativeMouseMoves->setChecked(serverConfig().relativeMouseMoves());
#ifndef Q_OS_WIN
ui->cbWin32KeepForeground->setVisible(false);
#endif
ui->cbWin32KeepForeground->setChecked(serverConfig().win32KeepForeground());
connect(ui->cbWin32KeepForeground, &QCheckBox::toggled, this, &ServerConfigDialog::toggleWin32Foreground);
ui->m_pCheckBoxSwitchDelay->setChecked(serverConfig().hasSwitchDelay());
ui->m_pSpinBoxSwitchDelay->setValue(serverConfig().switchDelay());
ui->cbSwitchDelay->setChecked(serverConfig().hasSwitchDelay());
connect(ui->cbSwitchDelay, &QCheckBox::toggled, this, &ServerConfigDialog::toggleSwitchDelay);
ui->m_pCheckBoxSwitchDoubleTap->setChecked(serverConfig().hasSwitchDoubleTap());
ui->m_pSpinBoxSwitchDoubleTap->setValue(serverConfig().switchDoubleTap());
ui->sbSwitchDelay->setValue(serverConfig().switchDelay());
connect(ui->sbSwitchDelay, QOverload<int>::of(&QSpinBox::valueChanged), this, &ServerConfigDialog::setSwitchDelay);
ui->cbSwitchDoubleTap->setChecked(serverConfig().hasSwitchDoubleTap());
connect(ui->cbSwitchDoubleTap, &QCheckBox::toggled, this, &ServerConfigDialog::toggleSwitchDoubleTap);
ui->sbSwitchDoubleTap->setValue(serverConfig().switchDoubleTap());
connect(
ui->sbSwitchDoubleTap, QOverload<int>::of(&QSpinBox::valueChanged), this, &ServerConfigDialog::setSwitchDoubleTap
);
connect(ui->cbRelativeMouseMoves, &QCheckBox::toggled, this, &ServerConfigDialog::toggleRelativeMouseMoves);
connect(ui->cbEnableClipboard, &QCheckBox::toggled, this, &ServerConfigDialog::toggleClipboard);
connect(ui->groupExternalConfig, &QGroupBox::toggled, this, &ServerConfigDialog::toggleExternalConfig);
connect(ui->btnBrowseConfigFile, &QPushButton::clicked, this, &ServerConfigDialog::browseConfigFile);
connect(
ui->sbSwitchCornerSize, QOverload<int>::of(&QSpinBox::valueChanged), this,
&ServerConfigDialog::setSwitchCornerSize
);
connect(
ui->sbClipboardSizeLimit, QOverload<int>::of(&QSpinBox::valueChanged), this,
&ServerConfigDialog::setClipboardLimit
);
ui->cbCornerTopLeft->setChecked(serverConfig().switchCorner(static_cast<int>(TopLeft)));
connect(ui->cbCornerTopLeft, &QCheckBox::toggled, this, &ServerConfigDialog::toggleCornerTopLeft);
ui->cbCornerTopRight->setChecked(serverConfig().switchCorner(static_cast<int>(TopRight)));
connect(ui->cbCornerTopRight, &QCheckBox::toggled, this, &ServerConfigDialog::toggleCornerTopRight);
ui->cbCornerBottomLeft->setChecked(serverConfig().switchCorner(static_cast<int>(BottomLeft)));
connect(ui->cbCornerBottomLeft, &QCheckBox::toggled, this, &ServerConfigDialog::toggleCornerBottomLeft);
ui->cbCornerBottomRight->setChecked(serverConfig().switchCorner(static_cast<int>(BottomRight)));
connect(ui->cbCornerBottomRight, &QCheckBox::toggled, this, &ServerConfigDialog::toggleCornerBottomRight);
ui->sbSwitchCornerSize->setValue(serverConfig().switchCornerSize());
ui->m_pCheckBoxCornerTopLeft->setChecked(serverConfig().switchCorner(static_cast<int>(TopLeft)));
ui->m_pCheckBoxCornerTopRight->setChecked(serverConfig().switchCorner(static_cast<int>(TopRight)));
ui->m_pCheckBoxCornerBottomLeft->setChecked(serverConfig().switchCorner(static_cast<int>(BottomLeft)));
ui->m_pCheckBoxCornerBottomRight->setChecked(serverConfig().switchCorner(static_cast<int>(BottomRight)));
ui->m_pSpinBoxSwitchCornerSize->setValue(serverConfig().switchCornerSize());
ui->cbDisableLockToScreen->setChecked(serverConfig().disableLockToScreen());
connect(ui->cbDisableLockToScreen, &QCheckBox::toggled, this, &ServerConfigDialog::toggleLockToScreen);
ui->cbEnableClipboard->setChecked(serverConfig().clipboardSharing());
int clipboardSharingSizeM = static_cast<int>(serverConfig().clipboardSharingSize() / 1024);
@ -117,149 +162,6 @@ ServerConfigDialog::ServerConfigDialog(QWidget *parent, ServerConfig &config, Ap
// computers
connect(&m_ScreenSetupModel, &ScreenSetupModel::screensChanged, this, &ServerConfigDialog::onChange);
connect(ui->cbEnableClipboard, &QCheckBox::toggled, this, &ServerConfigDialog::toggleClipboard);
connect(ui->cbHeartbeat, &QCheckBox::toggled, this, &ServerConfigDialog::toggleHeartbeat);
// Above Qt 6.7 the checkbox signal signature has changed from int to Qt::CheckState
#if QT_VERSION <= QT_VERSION_CHECK(6, 7, 0)
// advanced
connect(ui->m_pCheckBoxSwitchDelay, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().haveSwitchDelay(v);
onChange();
});
connect(ui->m_pCheckBoxSwitchDoubleTap, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().haveSwitchDoubleTap(v);
onChange();
});
connect(ui->cbRelativeMouseMoves, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setRelativeMouseMoves(v);
onChange();
});
connect(ui->cbWin32KeepForeground, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setWin32KeepForeground(v);
onChange();
});
connect(ui->cbDisableLockToScreen, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setDisableLockToScreen(v);
onChange();
});
connect(ui->m_pCheckBoxCornerTopLeft, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setSwitchCorner(static_cast<int>(TopLeft), v);
onChange();
});
connect(ui->m_pCheckBoxCornerTopRight, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setSwitchCorner(static_cast<int>(TopRight), v);
onChange();
});
connect(ui->m_pCheckBoxCornerBottomLeft, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setSwitchCorner(static_cast<int>(BottomLeft), v);
onChange();
});
connect(ui->m_pCheckBoxCornerBottomRight, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setSwitchCorner(static_cast<int>(BottomRight), v);
onChange();
});
// config
connect(ui->m_pCheckBoxUseExternalConfig, &QCheckBox::stateChanged, this, [this](const int &v) {
serverConfig().setUseExternalConfig(v);
onChange();
});
#else
connect(ui->m_pCheckBoxSwitchDelay, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().haveSwitchDelay(v == Qt::Checked);
onChange();
});
connect(ui->m_pCheckBoxSwitchDoubleTap, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().haveSwitchDoubleTap(v == Qt::Checked);
onChange();
});
connect(ui->cbRelativeMouseMoves, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setRelativeMouseMoves(v == Qt::Checked);
onChange();
});
connect(ui->cbWin32KeepForeground, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setWin32KeepForeground(v == Qt::Checked);
onChange();
});
connect(ui->cbDisableLockToScreen, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setDisableLockToScreen(v == Qt::Checked);
onChange();
});
connect(ui->m_pCheckBoxCornerTopLeft, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setSwitchCorner(static_cast<int>(TopLeft), v == Qt::Checked);
onChange();
});
connect(ui->m_pCheckBoxCornerTopRight, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setSwitchCorner(static_cast<int>(TopRight), v == Qt::Checked);
onChange();
});
connect(ui->m_pCheckBoxCornerBottomLeft, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setSwitchCorner(static_cast<int>(BottomLeft), v == Qt::Checked);
onChange();
});
connect(ui->m_pCheckBoxCornerBottomRight, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setSwitchCorner(static_cast<int>(BottomRight), v == Qt::Checked);
onChange();
});
// config
connect(ui->m_pCheckBoxUseExternalConfig, &QCheckBox::checkStateChanged, this, [this](const Qt::CheckState &v) {
serverConfig().setUseExternalConfig(v == Qt::Checked);
onChange();
});
#endif
connect(
ui->m_pSpinBoxSwitchDelay, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
[this](const int &v) {
serverConfig().setSwitchDelay(v);
onChange();
}
);
connect(
ui->m_pSpinBoxSwitchDoubleTap, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
[this](const int &v) {
serverConfig().setSwitchDoubleTap(v);
onChange();
}
);
connect(
ui->sbClipboardSizeLimit, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
[this](const int &v) {
serverConfig().setClipboardSharingSize(v * 1024);
onChange();
}
);
connect(ui->sbHeartbeat, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this, [this](const int &v) {
serverConfig().setHeartbeat(v);
onChange();
});
connect(
ui->m_pSpinBoxSwitchCornerSize, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
[this](const int &v) {
serverConfig().setSwitchCornerSize(v);
onChange();
}
);
connect(ui->m_pRadioProtocolSynergy, &QRadioButton::toggled, this, [this](const bool &v) {
if (v) {
serverConfig().setProtocol(ServerProtocol::kSynergy);
onChange();
}
});
connect(ui->m_pRadioProtocolBarrier, &QRadioButton::toggled, this, [this](const bool &v) {
if (v) {
serverConfig().setProtocol(ServerProtocol::kBarrier);
onChange();
}
});
connect(ui->m_pEditConfigFile, &QLineEdit::textChanged, this, [this]() {
serverConfig().setConfigFile(ui->m_pEditConfigFile->text());
onChange();
});
}
ServerConfigDialog::~ServerConfigDialog() = default;
@ -271,13 +173,13 @@ bool ServerConfigDialog::addClient(const QString &clientName)
void ServerConfigDialog::accept()
{
if (ui->m_pCheckBoxUseExternalConfig->isChecked() && !QFile::exists(ui->m_pEditConfigFile->text())) {
if (ui->groupExternalConfig->isChecked() && !QFile::exists(ui->lineConfigFile->text())) {
auto selectedButton = QMessageBox::warning(
this, "Filename invalid", "Please select a valid configuration file.", QMessageBox::Ok | QMessageBox::Ignore
);
if (selectedButton != QMessageBox::Ok || !on_m_pButtonBrowseConfigFile_clicked()) {
if (selectedButton != QMessageBox::Ok || !browseConfigFile()) {
return;
}
}
@ -425,6 +327,12 @@ void ServerConfigDialog::toggleClipboard(bool enabled)
onChange();
}
void ServerConfigDialog::setClipboardLimit(int limit)
{
serverConfig().setClipboardSharingSize(limit * 1024);
onChange();
}
void ServerConfigDialog::toggleHeartbeat(bool enabled)
{
ui->sbHeartbeat->setEnabled(enabled);
@ -432,6 +340,55 @@ void ServerConfigDialog::toggleHeartbeat(bool enabled)
onChange();
}
void ServerConfigDialog::setHeartbeat(int rate)
{
serverConfig().setHeartbeat(rate);
onChange();
}
void ServerConfigDialog::toggleRelativeMouseMoves(bool enabled)
{
serverConfig().setRelativeMouseMoves(enabled);
onChange();
}
void ServerConfigDialog::toggleProtocol()
{
ServerProtocol proto = ui->rbProtocolBarrier->isChecked() ? ServerProtocol::kBarrier : ServerProtocol::kSynergy;
serverConfig().setProtocol(proto);
onChange();
}
void ServerConfigDialog::setSwitchCornerSize(int size)
{
serverConfig().setSwitchCornerSize(size);
onChange();
}
void ServerConfigDialog::toggleCornerBottomLeft(bool enable)
{
serverConfig().setSwitchCorner(static_cast<int>(BottomLeft), enable);
onChange();
}
void ServerConfigDialog::toggleCornerTopLeft(bool enable)
{
serverConfig().setSwitchCorner(static_cast<int>(TopLeft), enable);
onChange();
}
void ServerConfigDialog::toggleCornerBottomRight(bool enable)
{
serverConfig().setSwitchCorner(static_cast<int>(BottomRight), enable);
onChange();
}
void ServerConfigDialog::toggleCornerTopRight(bool enable)
{
serverConfig().setSwitchCorner(static_cast<int>(TopRight), enable);
onChange();
}
void ServerConfigDialog::listActionsSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
{
bool enabled = !selected.isEmpty();
@ -439,6 +396,44 @@ void ServerConfigDialog::listActionsSelectionChanged(const QItemSelection &selec
ui->btnRemoveAction->setEnabled(enabled);
}
void ServerConfigDialog::toggleSwitchDoubleTap(bool enable)
{
ui->sbSwitchDoubleTap->setEnabled(enable);
serverConfig().haveSwitchDoubleTap(enable);
onChange();
}
void ServerConfigDialog::setSwitchDoubleTap(int within)
{
serverConfig().setSwitchDoubleTap(within);
onChange();
}
void ServerConfigDialog::toggleSwitchDelay(bool enable)
{
ui->sbSwitchDelay->setEnabled(enable);
serverConfig().haveSwitchDelay(enable);
onChange();
}
void ServerConfigDialog::setSwitchDelay(int delay)
{
serverConfig().setSwitchDelay(delay);
onChange();
}
void ServerConfigDialog::toggleLockToScreen(bool disabled)
{
serverConfig().setDisableLockToScreen(disabled);
onChange();
}
void ServerConfigDialog::toggleWin32Foreground(bool enabled)
{
serverConfig().setWin32KeepForeground(enabled);
onChange();
}
void ServerConfigDialog::addClient()
{
addComputer("", false);
@ -450,18 +445,21 @@ void ServerConfigDialog::onScreenRemoved()
onChange();
}
void ServerConfigDialog::on_m_pCheckBoxUseExternalConfig_toggled(bool checked)
void ServerConfigDialog::toggleExternalConfig(bool checked)
{
ui->m_pLabelConfigFile->setEnabled(checked);
ui->m_pEditConfigFile->setEnabled(checked);
ui->m_pButtonBrowseConfigFile->setEnabled(checked);
ui->labelConfigFile->setEnabled(checked);
ui->lineConfigFile->setEnabled(checked);
ui->btnBrowseConfigFile->setEnabled(checked);
ui->tabWidget->setTabEnabled(0, !checked);
ui->tabWidget->setTabEnabled(1, !checked);
ui->tabWidget->setTabEnabled(2, !checked);
serverConfig().setUseExternalConfig(checked);
onChange();
}
bool ServerConfigDialog::on_m_pButtonBrowseConfigFile_clicked()
bool ServerConfigDialog::browseConfigFile()
{
#if defined(Q_OS_WIN)
static const auto configExt = QStringLiteral("sgc");
@ -474,7 +472,9 @@ bool ServerConfigDialog::on_m_pButtonBrowseConfigFile_clicked()
QFileDialog::getOpenFileName(this, "Browse for a config file", "", deskflowConfigFilter.arg(kAppName, configExt));
if (!fileName.isEmpty()) {
ui->m_pEditConfigFile->setText(fileName);
ui->lineConfigFile->setText(fileName);
serverConfig().setConfigFile(ui->lineConfigFile->text());
onChange();
return true;
}

View file

@ -39,8 +39,6 @@ public slots:
protected slots:
void onScreenRemoved();
void on_m_pCheckBoxUseExternalConfig_toggled(bool checked = false);
bool on_m_pButtonBrowseConfigFile_clicked();
protected:
void addClient();
@ -56,8 +54,32 @@ protected:
void removeAction();
void listActionsSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
void toggleSwitchDoubleTap(bool enable);
void setSwitchDoubleTap(int within);
void toggleSwitchDelay(bool enable);
void setSwitchDelay(int delay);
void toggleLockToScreen(bool disabled);
void toggleWin32Foreground(bool enabled);
void toggleClipboard(bool enabled);
void setClipboardLimit(int limit);
void toggleHeartbeat(bool enabled);
void setHeartbeat(int rate);
void toggleRelativeMouseMoves(bool enabled);
void toggleProtocol();
void setSwitchCornerSize(int size);
void toggleCornerBottomLeft(bool enable);
void toggleCornerTopLeft(bool enable);
void toggleCornerBottomRight(bool enable);
void toggleCornerTopRight(bool enable);
void toggleExternalConfig(bool enable = false);
bool browseConfigFile();
ServerConfig &serverConfig()
{

View file

@ -22,9 +22,6 @@
<layout class="QVBoxLayout">
<item>
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>2</number>
</property>
<widget class="QWidget" name="tabComputers">
<attribute name="title">
<string>Computers</string>
@ -294,7 +291,7 @@
</attribute>
<layout class="QGridLayout" name="m_pGridCorners">
<item row="0" column="1">
<widget class="QGroupBox" name="m_pGroupCorners">
<widget class="QGroupBox" name="groupCorners">
<property name="font">
<font>
<kerning>true</kerning>
@ -313,28 +310,28 @@
<item>
<layout class="QGridLayout" name="m_pLayoutCorners">
<item row="1" column="0">
<widget class="QCheckBox" name="m_pCheckBoxCornerBottomLeft">
<widget class="QCheckBox" name="cbCornerBottomLeft">
<property name="text">
<string>&amp;Bottom-left</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="m_pCheckBoxCornerTopLeft">
<widget class="QCheckBox" name="cbCornerTopLeft">
<property name="text">
<string>To&amp;p-left</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="m_pCheckBoxCornerBottomRight">
<widget class="QCheckBox" name="cbCornerBottomRight">
<property name="text">
<string>Bottom-ri&amp;ght</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="m_pCheckBoxCornerTopRight">
<widget class="QCheckBox" name="cbCornerTopRight">
<property name="text">
<string>Top-rig&amp;ht</string>
</property>
@ -350,7 +347,7 @@
<string>Cor&amp;ner size</string>
</property>
<property name="buddy">
<cstring>m_pSpinBoxSwitchCornerSize</cstring>
<cstring>sbSwitchCornerSize</cstring>
</property>
</widget>
</item>
@ -368,7 +365,7 @@
</spacer>
</item>
<item>
<widget class="QSpinBox" name="m_pSpinBoxSwitchCornerSize">
<widget class="QSpinBox" name="sbSwitchCornerSize">
<property name="maximum">
<number>30000</number>
</property>
@ -599,14 +596,9 @@
<item>
<layout class="QHBoxLayout" name="horizontalLayout_5">
<item>
<widget class="QLabel" name="m_pLabelProtocol">
<widget class="QLabel" name="labelProtocol">
<property name="whatsThis">
<string>&lt;p&gt;Enables compatibility with programs that use either the Synergy or Barrier protocols:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Deskflow uses the Synergy protocol.&lt;/li&gt;
&lt;li&gt;Input Leap uses the Barrier protocol.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A Deskflow client will automatically use either the Synergy or Barrier protocol depending on the server protocol.&lt;/p&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enables compatibility with programs that use either the Synergy or Barrier protocols:&lt;/p&gt;&lt;ul style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;&lt;li style=&quot; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Synergy 3 uses the Synergy protocol.&lt;/li&gt;&lt;li style=&quot; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;Barrier, Input-Leap and Synergy 1 uses the Barrier protocol.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A Deskflow client will automatically use either the Synergy or Barrier protocol depending on the server protocol.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Network protocol</string>
@ -627,7 +619,7 @@
</spacer>
</item>
<item>
<widget class="QRadioButton" name="m_pRadioProtocolSynergy">
<widget class="QRadioButton" name="rbProtocolSynergy">
<property name="text">
<string>&amp;Synergy</string>
</property>
@ -637,7 +629,7 @@
</widget>
</item>
<item>
<widget class="QRadioButton" name="m_pRadioProtocolBarrier">
<widget class="QRadioButton" name="rbProtocolBarrier">
<property name="text">
<string>&amp;Barrier</string>
</property>
@ -662,7 +654,7 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QGroupBox" name="m_pGroupSwitch">
<widget class="QGroupBox" name="groupSwitch">
<property name="font">
<font>
<kerning>true</kerning>
@ -682,9 +674,9 @@
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout">
<layout class="QHBoxLayout" name="_5">
<item>
<widget class="QCheckBox" name="m_pCheckBoxSwitchDelay">
<widget class="QCheckBox" name="cbSwitchDelay">
<property name="enabled">
<bool>true</bool>
</property>
@ -694,7 +686,7 @@
</widget>
</item>
<item>
<spacer>
<spacer name="spacerSwitchWait">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
@ -707,7 +699,7 @@
</spacer>
</item>
<item>
<widget class="QSpinBox" name="m_pSpinBoxSwitchDelay">
<widget class="QSpinBox" name="sbSwitchDelay">
<property name="enabled">
<bool>false</bool>
</property>
@ -735,9 +727,9 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout">
<layout class="QHBoxLayout" name="_6">
<item>
<widget class="QCheckBox" name="m_pCheckBoxSwitchDoubleTap">
<widget class="QCheckBox" name="cbSwitchDoubleTap">
<property name="enabled">
<bool>true</bool>
</property>
@ -747,7 +739,7 @@
</widget>
</item>
<item>
<spacer>
<spacer name="spacerDoubleTap">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
@ -760,7 +752,7 @@
</spacer>
</item>
<item>
<widget class="QSpinBox" name="m_pSpinBoxSwitchDoubleTap">
<widget class="QSpinBox" name="sbSwitchDoubleTap">
<property name="enabled">
<bool>false</bool>
</property>
@ -818,7 +810,7 @@
</item>
</layout>
</widget>
<widget class="QWidget" name="m_pTabAdvancedConfig">
<widget class="QWidget" name="tabConfigFile">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
@ -828,20 +820,8 @@
<attribute name="title">
<string>Config file</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_2">
<property name="spacing">
<number>15</number>
</property>
<property name="leftMargin">
<number>120</number>
</property>
<property name="topMargin">
<number>30</number>
</property>
<property name="rightMargin">
<number>120</number>
</property>
<item alignment="Qt::AlignmentFlag::AlignHCenter">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label_5">
<property name="font">
<font>
@ -892,192 +872,104 @@ Enabling this setting will disable the server config GUI.</string>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="m_pLayoutConfigCheckbox">
<property name="leftMargin">
<number>0</number>
<widget class="QGroupBox" name="groupExternalConfig">
<property name="title">
<string>Use a server config file</string>
</property>
<property name="topMargin">
<number>0</number>
<property name="checkable">
<bool>true</bool>
</property>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="m_pCheckBoxUseExternalConfig">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>300</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Use a server config file</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="m_pLayoutConfigPath">
<property name="leftMargin">
<number>40</number>
<property name="checked">
<bool>false</bool>
</property>
<property name="topMargin">
<number>0</number>
</property>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLabel" name="m_pLabelConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>96</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Config file path</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>10</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="m_pEditConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>180</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_pButtonBrowseConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string/>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="labelConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>96</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Config file path</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeType">
<enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>13</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QLineEdit" name="lineConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>180</width>
<height>0</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnBrowseConfigFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="cursor">
<cursorShape>PointingHandCursor</cursorShape>
</property>
<property name="text">
<string/>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_1">
@ -1127,7 +1019,6 @@ Enabling this setting will disable the server config GUI.</string>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>m_pButtonBrowseConfigFile</tabstop>
<tabstop>screenSetupView</tabstop>
<tabstop>listHotkeys</tabstop>
<tabstop>btnNewHotkey</tabstop>
@ -1137,53 +1028,19 @@ Enabling this setting will disable the server config GUI.</string>
<tabstop>btnNewAction</tabstop>
<tabstop>btnEditAction</tabstop>
<tabstop>btnRemoveAction</tabstop>
<tabstop>m_pCheckBoxSwitchDelay</tabstop>
<tabstop>m_pSpinBoxSwitchDelay</tabstop>
<tabstop>m_pCheckBoxSwitchDoubleTap</tabstop>
<tabstop>m_pSpinBoxSwitchDoubleTap</tabstop>
<tabstop>cbSwitchDelay</tabstop>
<tabstop>sbSwitchDelay</tabstop>
<tabstop>cbSwitchDoubleTap</tabstop>
<tabstop>sbSwitchDoubleTap</tabstop>
<tabstop>cbEnableClipboard</tabstop>
<tabstop>sbClipboardSizeLimit</tabstop>
<tabstop>cbHeartbeat</tabstop>
<tabstop>sbHeartbeat</tabstop>
<tabstop>cbRelativeMouseMoves</tabstop>
<tabstop>m_pSpinBoxSwitchCornerSize</tabstop>
<tabstop>m_pCheckBoxUseExternalConfig</tabstop>
<tabstop>m_pEditConfigFile</tabstop>
<tabstop>sbSwitchCornerSize</tabstop>
<tabstop>lineConfigFile</tabstop>
<tabstop>tabWidget</tabstop>
</tabstops>
<resources/>
<connections>
<connection>
<sender>m_pCheckBoxSwitchDelay</sender>
<signal>toggled(bool)</signal>
<receiver>m_pSpinBoxSwitchDelay</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>76</x>
<y>88</y>
</hint>
<hint type="destinationlabel">
<x>86</x>
<y>88</y>
</hint>
</hints>
</connection>
<connection>
<sender>m_pCheckBoxSwitchDoubleTap</sender>
<signal>toggled(bool)</signal>
<receiver>m_pSpinBoxSwitchDoubleTap</receiver>
<slot>setEnabled(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>76</x>
<y>81</y>
</hint>
<hint type="destinationlabel">
<x>86</x>
<y>81</y>
</hint>
</hints>
</connection>
</connections>
<connections/>
</ui>