feat: use new SettingsDialogButtonBox for SettingsDialog

This commit is contained in:
sithlord48 2026-08-13 02:39:32 -04:00 committed by Nick Bolton
parent d084cd50bd
commit edf2dcbfb0
14 changed files with 322 additions and 190 deletions

View file

@ -174,11 +174,15 @@ QString Settings::cleanComputerName(const QString &name)
return cleanName; return cleanName;
} }
void Settings::checkIfSettingsWritableChange() const void Settings::checkIfSettingsWritableChange()
{ {
bool writable = m_settings->isWritable(); if (!instance()->m_settingsWatcher->files().contains(Settings::settingsFile()))
m_settingsWatcher->addPath(Settings::settingsFile());
bool writable = Settings::isWritable();
if (writable == m_settingsWritable) if (writable == m_settingsWritable)
return; return;
qDebug() << QString("Setting are now %1").arg(writable ? "writable" : "readonly");
instance()->m_settingsWritable = writable; instance()->m_settingsWritable = writable;
Q_EMIT instance()->settingsWritableChanged(writable); Q_EMIT instance()->settingsWritableChanged(writable);
} }

View file

@ -233,7 +233,7 @@ private:
* @brief checkIfSettingsWritableChange * @brief checkIfSettingsWritableChange
* Checks if the changed settings is now read only * Checks if the changed settings is now read only
*/ */
void checkIfSettingsWritableChange() const; void checkIfSettingsWritableChange();
QSettings *m_settings = nullptr; QSettings *m_settings = nullptr;
QSettings *m_stateSettings = nullptr; QSettings *m_stateSettings = nullptr;

View file

@ -120,6 +120,8 @@ add_library(${target} STATIC
widgets/StatusBar.h widgets/StatusBar.h
widgets/TrashScreenWidget.cpp widgets/TrashScreenWidget.cpp
widgets/TrashScreenWidget.h widgets/TrashScreenWidget.h
widgets/SettingsDialogButtonBox.cpp
widgets/SettingsDialogButtonBox.h
) )
target_link_libraries(${target} target_link_libraries(${target}

View file

@ -15,6 +15,7 @@
#include "common/Settings.h" #include "common/Settings.h"
#include "gui/TlsUtility.h" #include "gui/TlsUtility.h"
#include "gui/core/NetworkMonitor.h" #include "gui/core/NetworkMonitor.h"
#include "gui/widgets/SettingsDialogButtonBox.h"
#include <QComboBox> #include <QComboBox>
#include <QDir> #include <QDir>
@ -26,10 +27,12 @@ using namespace deskflow::gui;
SettingsDialog::SettingsDialog(QWidget *parent, const ServerConfig &serverConfig) SettingsDialog::SettingsDialog(QWidget *parent, const ServerConfig &serverConfig)
: QDialog(parent), : QDialog(parent),
ui{std::make_unique<Ui::SettingsDialog>()}, ui{std::make_unique<Ui::SettingsDialog>()},
m_serverConfig(serverConfig) m_serverConfig(serverConfig),
m_buttonBox{new SettingsDialogButtonBox(this)}
{ {
ui->setupUi(this); ui->setupUi(this);
layout()->addWidget(m_buttonBox);
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);
// these are enabled by the control next to them // these are enabled by the control next to them
@ -93,15 +96,10 @@ void SettingsDialog::changeEvent(QEvent *e)
void SettingsDialog::initConnections() const void SettingsDialog::initConnections() const
{ {
connect(this, &SettingsDialog::shown, this, &SettingsDialog::showReadOnlyMessage, Qt::QueuedConnection); connect(m_buttonBox, &SettingsDialogButtonBox::accepted, this, &SettingsDialog::accept);
connect(m_buttonBox, &SettingsDialogButtonBox::rejected, this, &QDialog::reject);
connect(ui->buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialog::accept); connect(m_buttonBox, &SettingsDialogButtonBox::reset, this, &SettingsDialog::loadFromConfig);
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); connect(m_buttonBox, &SettingsDialogButtonBox::restoreDefault, this, &SettingsDialog::resetToDefault);
connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &SettingsDialog::loadFromConfig);
connect(
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this,
&SettingsDialog::resetToDefault
);
connect(ui->cbRunEnterCommand, &QCheckBox::toggled, ui->lineCommandEnter, &QLineEdit::setEnabled); connect(ui->cbRunEnterCommand, &QCheckBox::toggled, ui->lineCommandEnter, &QLineEdit::setEnabled);
connect(ui->cbRunExitCommand, &QCheckBox::toggled, ui->lineCommandExit, &QLineEdit::setEnabled); connect(ui->cbRunExitCommand, &QCheckBox::toggled, ui->lineCommandExit, &QLineEdit::setEnabled);
@ -144,6 +142,7 @@ void SettingsDialog::initConnections() const
connect(ui->cbRunExitCommand, &QCheckBox::toggled, this, &SettingsDialog::setButtonBoxEnabledButtons); connect(ui->cbRunExitCommand, &QCheckBox::toggled, this, &SettingsDialog::setButtonBoxEnabledButtons);
connect(ui->lineCommandEnter, &QLineEdit::textChanged, this, &SettingsDialog::setButtonBoxEnabledButtons); connect(ui->lineCommandEnter, &QLineEdit::textChanged, this, &SettingsDialog::setButtonBoxEnabledButtons);
connect(ui->lineCommandExit, &QLineEdit::textChanged, this, &SettingsDialog::setButtonBoxEnabledButtons); connect(ui->lineCommandExit, &QLineEdit::textChanged, this, &SettingsDialog::setButtonBoxEnabledButtons);
connect(Settings::instance(), &Settings::settingsWritableChanged, this, &SettingsDialog::updateControls);
} }
void SettingsDialog::regenCertificates() void SettingsDialog::regenCertificates()
@ -194,17 +193,6 @@ void SettingsDialog::showEvent(QShowEvent *event)
Q_EMIT shown(); Q_EMIT shown();
} }
void SettingsDialog::showReadOnlyMessage()
{
if (Settings::isWritable())
return;
QMessageBox::information(
this, tr("%1 Read-only settings").arg(kAppName),
tr("<p>Settings are read-only because you only have read access to the file:</p><p>%1</p>")
.arg(QDir::toNativeSeparators(Settings::settingsFile()))
);
}
void SettingsDialog::resetAllSettings() void SettingsDialog::resetAllSettings()
{ {
auto result = QMessageBox::question( auto result = QMessageBox::question(
@ -234,10 +222,6 @@ void SettingsDialog::updateText()
ui->comboLogLevel->setItemData(i, toolTips.at(i), Qt::ToolTipRole); ui->comboLogLevel->setItemData(i, toolTips.at(i), Qt::ToolTipRole);
} }
} }
ui->buttonBox->button(QDialogButtonBox::Save)->setToolTip(tr("Close and save changes"));
ui->buttonBox->button(QDialogButtonBox::Cancel)->setToolTip(tr("Close and forget changes"));
ui->buttonBox->button(QDialogButtonBox::Reset)->setToolTip(tr("Reset to stored values"));
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setToolTip(tr("Reset to default values"));
} }
void SettingsDialog::accept() void SettingsDialog::accept()
@ -390,8 +374,6 @@ void SettingsDialog::updateControls()
const bool serviceChecked = ui->groupService->isChecked(); const bool serviceChecked = ui->groupService->isChecked();
const bool logToFile = ui->groupLogToFile->isChecked(); const bool logToFile = ui->groupLogToFile->isChecked();
ui->buttonBox->button(QDialogButtonBox::Save)->setEnabled(writable);
ui->sbPort->setEnabled(writable); ui->sbPort->setEnabled(writable);
ui->comboInterface->setEnabled(writable); ui->comboInterface->setEnabled(writable);
ui->comboLogLevel->setEnabled(writable); ui->comboLogLevel->setEnabled(writable);
@ -551,9 +533,9 @@ void SettingsDialog::resetToDefault()
void SettingsDialog::setButtonBoxEnabledButtons() const void SettingsDialog::setButtonBoxEnabledButtons() const
{ {
const bool modified = isModified(); const bool modified = isModified();
ui->buttonBox->button(QDialogButtonBox::Save)->setEnabled(modified); m_buttonBox->enableSave(modified);
ui->buttonBox->button(QDialogButtonBox::Reset)->setEnabled(modified); m_buttonBox->enableReset(modified);
ui->buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(!isDefault()); m_buttonBox->enableRestoreDefaults(!isDefault());
} }
SettingsDialog::~SettingsDialog() = default; SettingsDialog::~SettingsDialog() = default;

View file

@ -1,6 +1,6 @@
/* /*
* Deskflow -- mouse and keyboard sharing utility * Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2025 Deskflow Developers * SPDX-FileCopyrightText: (C) 2025 - 2026 Deskflow Developers
* SPDX-FileCopyrightText: (C) 2012 Synergy App Ltd * SPDX-FileCopyrightText: (C) 2012 Synergy App Ltd
* SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de> * SPDX-FileCopyrightText: (C) 2008 Volker Lanz <vl@fidra.de>
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
@ -11,6 +11,8 @@
#include "gui/config/ServerConfig.h" #include "gui/config/ServerConfig.h"
class SettingsDialogButtonBox;
namespace Ui { namespace Ui {
class SettingsDialog; class SettingsDialog;
} }
@ -42,7 +44,6 @@ private:
bool isClientMode() const; bool isClientMode() const;
void updateTlsControls(); void updateTlsControls();
void updateTlsControlsEnabled(); void updateTlsControlsEnabled();
void showReadOnlyMessage();
void resetAllSettings(); void resetAllSettings();
void updateText(); void updateText();
@ -87,4 +88,5 @@ private:
bool m_interfaceSetOnLoad = false; bool m_interfaceSetOnLoad = false;
std::unique_ptr<Ui::SettingsDialog> ui; std::unique_ptr<Ui::SettingsDialog> ui;
const ServerConfig &m_serverConfig; const ServerConfig &m_serverConfig;
SettingsDialogButtonBox *m_buttonBox = nullptr;
}; };

View file

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>490</width> <width>490</width>
<height>366</height> <height>326</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -864,16 +864,6 @@
</widget> </widget>
</widget> </widget>
</item> </item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Reset|QDialogButtonBox::StandardButton::RestoreDefaults|QDialogButtonBox::StandardButton::Save</set>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>

View file

@ -0,0 +1,97 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#include "SettingsDialogButtonBox.h"
#include "common/Settings.h"
#include <QDialogButtonBox>
#include <QEvent>
#include <QHBoxLayout>
#include <QIcon>
#include <QLabel>
#include <QPushButton>
SettingsDialogButtonBox::SettingsDialogButtonBox(QWidget *parent)
: QWidget{parent},
m_buttonBox{new QDialogButtonBox(this)},
m_lblText{new QLabel(this)},
m_lblIcon{new QLabel(this)}
{
m_lblIcon->setPixmap(QIcon::fromTheme(QIcon::ThemeIcon::DialogWarning).pixmap(24, 24));
m_buttonBox->addButton(QDialogButtonBox::Save);
m_buttonBox->addButton(QDialogButtonBox::Cancel);
m_buttonBox->addButton(QDialogButtonBox::Reset);
m_buttonBox->addButton(QDialogButtonBox::RestoreDefaults);
settingsWritableChanged(Settings::isWritable());
auto layout = new QHBoxLayout(this);
layout->addWidget(m_lblIcon);
layout->addWidget(m_lblText);
layout->addWidget(m_buttonBox);
setLayout(layout);
updateText();
connect(m_buttonBox, &QDialogButtonBox::accepted, this, &SettingsDialogButtonBox::accepted);
connect(m_buttonBox, &QDialogButtonBox::rejected, this, &SettingsDialogButtonBox::rejected);
connect(m_buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, &SettingsDialogButtonBox::reset);
connect(
m_buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this,
&SettingsDialogButtonBox::restoreDefault
);
connect(
Settings::instance(), &Settings::settingsWritableChanged, this, &SettingsDialogButtonBox::settingsWritableChanged
);
}
void SettingsDialogButtonBox::enableSave(bool enable) const
{
m_buttonBox->button(QDialogButtonBox::Save)->setEnabled(enable);
}
void SettingsDialogButtonBox::enableReset(bool enable) const
{
m_buttonBox->button(QDialogButtonBox::Reset)->setEnabled(enable);
}
void SettingsDialogButtonBox::enableRestoreDefaults(bool enable) const
{
m_buttonBox->button(QDialogButtonBox::RestoreDefaults)->setEnabled(enable);
}
void SettingsDialogButtonBox::changeEvent(QEvent *e)
{
QWidget::changeEvent(e);
if (e->type() == QEvent::LanguageChange)
updateText();
}
void SettingsDialogButtonBox::updateText()
{
m_lblText->setText(tr("Settings are read only"));
m_lblText->setToolTip(tr("%1 is not writable").arg(Settings::settingsFile()));
m_buttonBox->button(QDialogButtonBox::Save)->setToolTip(tr("Close and save changes"));
m_buttonBox->button(QDialogButtonBox::Cancel)->setToolTip(tr("Close and forget changes"));
m_buttonBox->button(QDialogButtonBox::Reset)->setToolTip(tr("Reset to stored values"));
m_buttonBox->button(QDialogButtonBox::RestoreDefaults)->setToolTip(tr("Reset to default values"));
}
void SettingsDialogButtonBox::settingsWritableChanged(bool writable)
{
// Hide all first to prevent any change in overall width
m_lblIcon->setVisible(false);
m_lblText->setVisible(false);
m_buttonBox->button(QDialogButtonBox::Save)->setVisible(false);
m_buttonBox->button(QDialogButtonBox::Reset)->setVisible(false);
m_buttonBox->button(QDialogButtonBox::RestoreDefaults)->setVisible(false);
m_lblIcon->setVisible(!writable);
m_lblText->setVisible(!writable);
m_buttonBox->button(QDialogButtonBox::Save)->setVisible(writable);
m_buttonBox->button(QDialogButtonBox::Reset)->setVisible(writable);
m_buttonBox->button(QDialogButtonBox::RestoreDefaults)->setVisible(writable);
}

View file

@ -0,0 +1,37 @@
/*
* Deskflow -- mouse and keyboard sharing utility
* SPDX-FileCopyrightText: (C) 2026 Deskflow Developers
* SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
*/
#pragma once
#include <QWidget>
class QLabel;
class QDialogButtonBox;
class SettingsDialogButtonBox : public QWidget
{
Q_OBJECT
public:
explicit SettingsDialogButtonBox(QWidget *parent = nullptr);
void enableSave(bool enable) const;
void enableReset(bool enable) const;
void enableRestoreDefaults(bool enable) const;
Q_SIGNALS:
void accepted();
void rejected();
void reset();
void restoreDefault();
protected:
void changeEvent(QEvent *e) override;
private:
void updateText();
void settingsWritableChanged(bool writable);
QDialogButtonBox *m_buttonBox = nullptr;
QLabel *m_lblText = nullptr;
QLabel *m_lblIcon = nullptr;
};

View file

@ -1159,14 +1159,6 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 Configuración de solo lectura</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;Las configuraciones son de solo lectura porque solo tiene acceso de lectura al archivo:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation type="unfinished">Mensajes obligatorios</translation> <translation type="unfinished">Mensajes obligatorios</translation>
@ -1191,22 +1183,6 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation type="unfinished">Salida de depuración detallada</translation> <translation type="unfinished">Salida de depuración detallada</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Cerrar y guardar los cambios</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Cerrar y olvidar los cambios</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Restablecer los valores almacenados</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Restablecer valores predeterminados</translation>
</message>
<message> <message>
<source>TLS Certificate Regenerated</source> <source>TLS Certificate Regenerated</source>
<translation type="unfinished">Certificado TLS regenerado</translation> <translation type="unfinished">Certificado TLS regenerado</translation>
@ -1296,6 +1272,33 @@ Al habilitar esta opción, se deshabilitará la interfaz gráfica de usuario (GU
<translation type="unfinished">Eliminar todas las configuraciones</translation> <translation type="unfinished">Eliminar todas las configuraciones</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">La configuración es de solo lectura</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1 no tiene permisos de escritura</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Cerrar y guardar los cambios</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Cerrar y olvidar los cambios</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Restablecer los valores almacenados</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Restablecer valores predeterminados</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>

View file

@ -1159,14 +1159,6 @@ L&apos;abilitazione di questa impostazione disabiliterà l&apos;interfaccia graf
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 Impostazioni di sola lettura</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;Le impostazioni sono di sola lettura perché hai solo accesso in lettura al file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation>Messaggi richiesti</translation> <translation>Messaggi richiesti</translation>
@ -1191,22 +1183,6 @@ L&apos;abilitazione di questa impostazione disabiliterà l&apos;interfaccia graf
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation>Output di debug dettagliato</translation> <translation>Output di debug dettagliato</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Chiudi e salva le modifiche</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Chiudi e dimentica le modifiche</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Ripristina i valori memorizzati</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Ripristina i valori predefiniti</translation>
</message>
<message> <message>
<source>TLS Certificate Regenerated</source> <source>TLS Certificate Regenerated</source>
<translation>Certificato TLS rigenerato</translation> <translation>Certificato TLS rigenerato</translation>
@ -1296,6 +1272,33 @@ L&apos;abilitazione di questa impostazione disabiliterà l&apos;interfaccia graf
<translation type="unfinished">Rimuovi tutte le impostazioni</translation> <translation type="unfinished">Rimuovi tutte le impostazioni</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">Le impostazioni sono di sola lettura</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1 non è scrivibile</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Chiudi e salva le modifiche</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Chiudi e dimentica le modifiche</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Ripristina i valori memorizzati</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Ripristina i valori predefiniti</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>

View file

@ -1185,14 +1185,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 読み取り専用設定</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;以下のファイルへの書き込み権限がないため、設定は読み取り専用です:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation>必須のメッセージ</translation> <translation>必須のメッセージ</translation>
@ -1217,22 +1209,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation>詳細なデバッグ出力</translation> <translation>詳細なデバッグ出力</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation>変更を保存して閉じる</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation>変更を破棄して閉じる</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation>変更前の値にリセットする</translation>
</message>
<message>
<source>Reset to default values</source>
<translation>デフォルト値にリセットする</translation>
</message>
<message> <message>
<source>Automatic</source> <source>Automatic</source>
<translation>自動</translation> <translation>自動</translation>
@ -1298,6 +1274,33 @@ Enabling this setting will disable the server config GUI.</source>
<translation type="unfinished">すべての設定を削除する</translation> <translation type="unfinished">すべての設定を削除する</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">設定は読み取り専用です</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1 は書き込み可能ではありません</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">変更を保存して閉じる</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">変更を破棄して閉じる</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">変更前の値にリセットする</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">デフォルト値にリセットする</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>

View file

@ -1183,14 +1183,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 읽기 전용 설정</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;다음 파일에 대한 쓰기 권한이 없어 설정이 읽기 전용입니다:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation>필수 메시지</translation> <translation>필수 메시지</translation>
@ -1215,22 +1207,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation>상세 디버그 출력</translation> <translation>상세 디버그 출력</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation>변경 사항 저장 후 닫기</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation>저장하지 않고 닫기</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">저장된 값으로 재설정</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">기본값으로 재설정</translation>
</message>
<message> <message>
<source>Automatic</source> <source>Automatic</source>
<translation type="unfinished">자동</translation> <translation type="unfinished">자동</translation>
@ -1296,6 +1272,33 @@ Enabling this setting will disable the server config GUI.</source>
<translation type="unfinished">모든 설정 제거</translation> <translation type="unfinished">모든 설정 제거</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">설정은 읽기 전용입니다</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1은(는) 쓰기 가능하지 않습니다</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">변경 사항 저장 후 닫기</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">저장하지 않고 닫기</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">저장된 값으로 재설정</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">기본값으로 재설정</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>

View file

@ -1181,14 +1181,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 Настройки только для чтения</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;Настройки доступны только для чтения, так как у вас есть доступ только на чтение к файлу:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation>Обязательные сообщения</translation> <translation>Обязательные сообщения</translation>
@ -1213,22 +1205,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation>Подробный вывод отладки</translation> <translation>Подробный вывод отладки</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Закрыть и сохранить изменения</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Закройте изменения и забудьте о них</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Сбросить до сохраненных значений</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Сбросить до значений по умолчанию</translation>
</message>
<message> <message>
<source>Automatic</source> <source>Automatic</source>
<translation>Автоматически</translation> <translation>Автоматически</translation>
@ -1294,6 +1270,33 @@ Enabling this setting will disable the server config GUI.</source>
<translation type="unfinished">Удалить все настройки</translation> <translation type="unfinished">Удалить все настройки</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">Настройки доступны только для чтения</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1 недоступен для записи</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">Закрыть и сохранить изменения</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">Закройте изменения и забудьте о них</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">Сбросить до сохраненных значений</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">Сбросить до значений по умолчанию</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>

View file

@ -1185,14 +1185,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source> <source>&lt;p&gt;Are you sure you want to clear all settings and restart %1?&lt;/p&gt; &lt;p&gt;This action cannot be undone.&lt;/p&gt;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>%1 Read-only settings</source>
<translation type="unfinished">%1 只读设置</translation>
</message>
<message>
<source>&lt;p&gt;Settings are read-only because you only have read access to the file:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</source>
<translation type="unfinished">&lt;p&gt;设置是只读的,因为您对该文件只有读取权限:&lt;/p&gt;&lt;p&gt;%1&lt;/p&gt;</translation>
</message>
<message> <message>
<source>Required messages</source> <source>Required messages</source>
<translation>必要消息</translation> <translation>必要消息</translation>
@ -1217,22 +1209,6 @@ Enabling this setting will disable the server config GUI.</source>
<source>Verbose debug output</source> <source>Verbose debug output</source>
<translation>详细调试输出</translation> <translation>详细调试输出</translation>
</message> </message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">关闭并保存更改</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation>关闭并放弃修改</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">重置为存储值</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">重置为默认值</translation>
</message>
<message> <message>
<source>Automatic</source> <source>Automatic</source>
<translation type="unfinished">自动的</translation> <translation type="unfinished">自动的</translation>
@ -1298,6 +1274,33 @@ Enabling this setting will disable the server config GUI.</source>
<translation type="unfinished">移除所有设置</translation> <translation type="unfinished">移除所有设置</translation>
</message> </message>
</context> </context>
<context>
<name>SettingsDialogButtonBox</name>
<message>
<source>Settings are read only</source>
<translation type="unfinished">设置仅为只读</translation>
</message>
<message>
<source>%1 is not writable</source>
<translation type="unfinished">%1 不可写入</translation>
</message>
<message>
<source>Close and save changes</source>
<translation type="unfinished">关闭并保存更改</translation>
</message>
<message>
<source>Close and forget changes</source>
<translation type="unfinished">关闭并放弃修改</translation>
</message>
<message>
<source>Reset to stored values</source>
<translation type="unfinished">重置为存储值</translation>
</message>
<message>
<source>Reset to default values</source>
<translation type="unfinished">重置为默认值</translation>
</message>
</context>
<context> <context>
<name>StatusBar</name> <name>StatusBar</name>
<message> <message>