diff --git a/widgets/resources/icons/hicolor/scalable/actions/edit-undo.svg b/widgets/resources/icons/hicolor/scalable/actions/edit-undo.svg new file mode 100644 index 0000000..14546aa --- /dev/null +++ b/widgets/resources/icons/hicolor/scalable/actions/edit-undo.svg @@ -0,0 +1,13 @@ + + + + + + diff --git a/widgets/resources/syncthingwidgetsicons.qrc b/widgets/resources/syncthingwidgetsicons.qrc index 134de40..ea7ec15 100644 --- a/widgets/resources/syncthingwidgetsicons.qrc +++ b/widgets/resources/syncthingwidgetsicons.qrc @@ -12,5 +12,6 @@ icons/hicolor/scalable/actions/globe.svg icons/hicolor/scalable/places/user-home.svg icons/hicolor/scalable/emblems/emblem-important-old.svg + icons/hicolor/scalable/actions/edit-undo.svg diff --git a/widgets/settings/settings.h b/widgets/settings/settings.h index 810d47c..33c15c1 100644 --- a/widgets/settings/settings.h +++ b/widgets/settings/settings.h @@ -67,7 +67,7 @@ struct SYNCTHINGWIDGETS_EXPORT Launcher { #else QStringLiteral("syncthing"); #endif - QString syncthingArgs; + QString syncthingArgs = QStringLiteral("-no-browser -no-restart -logflags=3"); QHash tools; bool considerForReconnect = false; static Data::SyncthingProcess &toolProcess(const QString &tool); diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 2ac5d0a..7f46a63 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #ifdef QT_UTILITIES_SUPPORT_DBUS_NOTIFICATIONS #include #endif @@ -738,6 +739,7 @@ LauncherOptionPage::LauncherOptionPage(const QString &tool, QWidget *parentWidge : LauncherOptionPageBase(parentWidget) , m_process(&Launcher::toolProcess(tool)) , m_launcher(nullptr) + , m_restoreArgsButton(nullptr) , m_kill(false) , m_tool(tool) { @@ -753,6 +755,7 @@ LauncherOptionPage::~LauncherOptionPage() QWidget *LauncherOptionPage::setupWidget() { auto *const widget = LauncherOptionPageBase::setupWidget(); + // adjust labels to use name of additional tool instead of "Syncthing" if (!m_tool.isEmpty()) { widget->setWindowTitle(QCoreApplication::translate("QtGui::LauncherOptionPage", "%1-launcher").arg(m_tool)); @@ -760,8 +763,20 @@ QWidget *LauncherOptionPage::setupWidget() ui()->syncthingPathLabel->setText(QCoreApplication::translate("QtGui::LauncherOptionPage", "%1 executable").arg(m_tool)); ui()->logLabel->setText(QCoreApplication::translate("QtGui::LauncherOptionPage", "%1 log (interleaved stdout/stderr)").arg(m_tool)); } + // hide "consider for reconnect" checkbox for tools ui()->considerForReconnectCheckBox->setVisible(m_tool.isEmpty()); + + // add "restore to defaults" action for arguments + if (m_tool.isEmpty()) { + m_restoreArgsButton = new IconButton(ui()->argumentsLineEdit); + m_restoreArgsButton->setPixmap( + QIcon::fromTheme(QStringLiteral("edit-undo"), QIcon(QStringLiteral(":/icons/hicolor/scalable/actions/edit-paste.svg"))).pixmap(16)); + m_restoreArgsButton->setToolTip(QCoreApplication::translate("QtGui::LauncherOptionPage", "Restore default")); + QObject::connect(m_restoreArgsButton, &IconButton::clicked, bind(&LauncherOptionPage::restoreDefaultArguments, this)); + ui()->argumentsLineEdit->insertCustomButton(0, m_restoreArgsButton); + } + // setup other widgets ui()->syncthingPathSelection->provideCustomFileMode(QFileDialog::ExistingFile); ui()->logTextEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont)); @@ -769,6 +784,7 @@ QWidget *LauncherOptionPage::setupWidget() ui()->launchNowPushButton->setHidden(running); ui()->stopPushButton->setHidden(!running); ui()->useBuiltInVersionCheckBox->setHidden(!SyncthingLauncher::isLibSyncthingAvailable()); + // connect signals & slots if (m_process) { m_connections << QObject::connect(m_process, &SyncthingProcess::readyRead, bind(&LauncherOptionPage::handleSyncthingReadyRead, this)); @@ -782,6 +798,7 @@ QWidget *LauncherOptionPage::setupWidget() } QObject::connect(ui()->launchNowPushButton, &QPushButton::clicked, bind(&LauncherOptionPage::launch, this)); QObject::connect(ui()->stopPushButton, &QPushButton::clicked, bind(&LauncherOptionPage::stop, this)); + return widget; } @@ -914,6 +931,12 @@ void LauncherOptionPage::stop() } } +void LauncherOptionPage::restoreDefaultArguments() +{ + static const ::Settings::Launcher defaults; + ui()->argumentsLineEdit->setText(defaults.syncthingArgs); +} + // SystemdOptionPage #ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD SystemdOptionPage::SystemdOptionPage(QWidget *parentWidget) diff --git a/widgets/settings/settingsdialog.h b/widgets/settings/settingsdialog.h index 3049b60..c2e1275 100644 --- a/widgets/settings/settingsdialog.h +++ b/widgets/settings/settingsdialog.h @@ -22,7 +22,8 @@ class DateTime; namespace QtUtilities { class ColorButton; -} +class IconButton; +} // namespace QtUtilities namespace Data { class SyncthingConnection; @@ -106,8 +107,10 @@ void handleSyncthingExited(int exitCode, QProcess::ExitStatus exitStatus); bool isRunning() const; void launch(); void stop(); +void restoreDefaultArguments(); Data::SyncthingProcess *const m_process; Data::SyncthingLauncher *const m_launcher; +QtUtilities::IconButton *m_restoreArgsButton; QList m_connections; bool m_kill; QString m_tool;