diff --git a/plasmoid/lib/settingsdialog.cpp b/plasmoid/lib/settingsdialog.cpp index 9276c29..648f94a 100644 --- a/plasmoid/lib/settingsdialog.cpp +++ b/plasmoid/lib/settingsdialog.cpp @@ -67,7 +67,8 @@ QtGui::SettingsDialog *setupSettingsDialog(SyncthingApplet &applet) category = new OptionCategory; category->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid")); category->assignPages(QList() - << new ConnectionOptionPage(applet.connection()) << new NotificationsOptionPage(true) << new ShortcutOptionPage(applet)); + << new ConnectionOptionPage(applet.connection()) << new NotificationsOptionPage(GuiType::Plasmoid) + << new AppearanceOptionPage(GuiType::Plasmoid) << new ShortcutOptionPage(applet)); category->setIcon(QIcon::fromTheme(QStringLiteral("plasma"))); categories << category; diff --git a/plasmoid/lib/syncthingapplet.cpp b/plasmoid/lib/syncthingapplet.cpp index ee0281b..a359f50 100644 --- a/plasmoid/lib/syncthingapplet.cpp +++ b/plasmoid/lib/syncthingapplet.cpp @@ -266,9 +266,17 @@ void SyncthingApplet::showDirectoryErrors(unsigned int directoryIndex) const void SyncthingApplet::handleSettingsChanged() { + // apply appearance settings + const auto &appearanceSettings = Settings::values().appearance; + m_dirModel.setBrightColors(appearanceSettings.brightTextColors); + m_devModel.setBrightColors(appearanceSettings.brightTextColors); + m_downloadModel.setBrightColors(appearanceSettings.brightTextColors); + + // apply connection config const int currentConfig = m_currentConnectionConfig; m_currentConnectionConfig = -1; // force update setCurrentConnectionConfigIndex(currentConfig); + emit settingsChanged(); } diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 97deaf8..b4ed4a0 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -337,9 +337,9 @@ void ConnectionOptionPage::applyAndReconnect() } // NotificationsOptionPage -NotificationsOptionPage::NotificationsOptionPage(bool noApi, QWidget *parentWidget) +NotificationsOptionPage::NotificationsOptionPage(GuiType guiType, QWidget *parentWidget) : NotificationsOptionPageBase(parentWidget) - , m_noApi(noApi) + , m_guiType(guiType) { } @@ -350,7 +350,13 @@ NotificationsOptionPage::~NotificationsOptionPage() QWidget *NotificationsOptionPage::setupWidget() { auto *w = NotificationsOptionPageBase::setupWidget(); - ui()->apiGroupBox->setHidden(m_noApi); + switch (m_guiType) { + case GuiType::TrayWidget: + break; + case GuiType::Plasmoid: + ui()->apiGroupBox->setHidden(true); + break; + } return w; } @@ -394,8 +400,9 @@ void NotificationsOptionPage::reset() } // AppearanceOptionPage -AppearanceOptionPage::AppearanceOptionPage(QWidget *parentWidget) +AppearanceOptionPage::AppearanceOptionPage(GuiType guiType, QWidget *parentWidget) : AppearanceOptionPageBase(parentWidget) + , m_guiType(guiType) { } @@ -403,10 +410,28 @@ AppearanceOptionPage::~AppearanceOptionPage() { } +QWidget *AppearanceOptionPage::setupWidget() +{ + auto *w = AppearanceOptionPageBase::setupWidget(); + switch (m_guiType) { + case GuiType::TrayWidget: + break; + case GuiType::Plasmoid: + for (unsigned char i = 0; i != 6; ++i) { + ui()->formLayout->removeRow(0); + } + break; + } + return w; +} + bool AppearanceOptionPage::apply() { - if (hasBeenShown()) { - auto &settings = values().appearance; + if (!hasBeenShown()) { + return true; + } + auto &settings = values().appearance; + if (m_guiType == GuiType::TrayWidget) { settings.trayMenuSize.setWidth(ui()->widthSpinBox->value()); settings.trayMenuSize.setHeight(ui()->heightSpinBox->value()); settings.showTraffic = ui()->showTrafficCheckBox->isChecked(); @@ -436,15 +461,19 @@ bool AppearanceOptionPage::apply() } settings.frameStyle = style; settings.tabPosition = ui()->tabPosComboBox->currentIndex(); - settings.brightTextColors = ui()->brightTextColorsCheckBox->isChecked(); } + + settings.brightTextColors = ui()->brightTextColorsCheckBox->isChecked(); return true; } void AppearanceOptionPage::reset() { - if (hasBeenShown()) { - const auto &settings = values().appearance; + if (!hasBeenShown()) { + return; + } + const auto &settings = values().appearance; + if (m_guiType == GuiType::TrayWidget) { ui()->widthSpinBox->setValue(settings.trayMenuSize.width()); ui()->heightSpinBox->setValue(settings.trayMenuSize.height()); ui()->showTrafficCheckBox->setChecked(settings.showTraffic); @@ -475,8 +504,8 @@ void AppearanceOptionPage::reset() } ui()->frameShadowComboBox->setCurrentIndex(index); ui()->tabPosComboBox->setCurrentIndex(settings.tabPosition); - ui()->brightTextColorsCheckBox->setChecked(settings.brightTextColors); } + ui()->brightTextColorsCheckBox->setChecked(settings.brightTextColors); } // AutostartOptionPage @@ -492,6 +521,7 @@ AutostartOptionPage::~AutostartOptionPage() QWidget *AutostartOptionPage::setupWidget() { auto *widget = AutostartOptionPageBase::setupWidget(); + ui()->infoIconLabel->setPixmap( QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation, nullptr, ui()->infoIconLabel).pixmap(ui()->infoIconLabel->size())); #if defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) diff --git a/widgets/settings/settingsdialog.h b/widgets/settings/settingsdialog.h index 50e0c28..7fd685f 100644 --- a/widgets/settings/settingsdialog.h +++ b/widgets/settings/settingsdialog.h @@ -22,6 +22,17 @@ class SyncthingProcess; namespace QtGui { +/*! + * \brief The GuiType enum specifies a GUI type. + * + * Such a value can be passed to some option pages to show only the options which are relevant + * for the particular GUI type. + */ +enum class GuiType { + TrayWidget, + Plasmoid, +}; + BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(ConnectionOptionPage) public: ConnectionOptionPage(Data::SyncthingConnection *connection, QWidget *parentWidget = nullptr); @@ -47,14 +58,21 @@ END_DECLARE_OPTION_PAGE BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(NotificationsOptionPage) public: -NotificationsOptionPage(bool noApi = false, QWidget *parentWidget = nullptr); +NotificationsOptionPage(GuiType guiType = GuiType::TrayWidget, QWidget *parentWidget = nullptr); private: DECLARE_SETUP_WIDGETS -bool m_noApi; +const GuiType m_guiType; END_DECLARE_OPTION_PAGE -DECLARE_UI_FILE_BASED_OPTION_PAGE(AppearanceOptionPage) +BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(AppearanceOptionPage) +public: +AppearanceOptionPage(GuiType guiType = GuiType::TrayWidget, QWidget *parentWidget = nullptr); + +private: +DECLARE_SETUP_WIDGETS +const GuiType m_guiType; +END_DECLARE_OPTION_PAGE DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(AutostartOptionPage)