Make option pages configurable for different GUI types

This commit is contained in:
Martchus 2017-09-11 23:47:46 +02:00
parent 030cb35dbd
commit ee5c38dd7d
4 changed files with 71 additions and 14 deletions

View File

@ -67,7 +67,8 @@ QtGui::SettingsDialog *setupSettingsDialog(SyncthingApplet &applet)
category = new OptionCategory; category = new OptionCategory;
category->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid")); category->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid"));
category->assignPages(QList<Dialogs::OptionPage *>() category->assignPages(QList<Dialogs::OptionPage *>()
<< 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"))); category->setIcon(QIcon::fromTheme(QStringLiteral("plasma")));
categories << category; categories << category;

View File

@ -266,9 +266,17 @@ void SyncthingApplet::showDirectoryErrors(unsigned int directoryIndex) const
void SyncthingApplet::handleSettingsChanged() 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; const int currentConfig = m_currentConnectionConfig;
m_currentConnectionConfig = -1; // force update m_currentConnectionConfig = -1; // force update
setCurrentConnectionConfigIndex(currentConfig); setCurrentConnectionConfigIndex(currentConfig);
emit settingsChanged(); emit settingsChanged();
} }

View File

@ -337,9 +337,9 @@ void ConnectionOptionPage::applyAndReconnect()
} }
// NotificationsOptionPage // NotificationsOptionPage
NotificationsOptionPage::NotificationsOptionPage(bool noApi, QWidget *parentWidget) NotificationsOptionPage::NotificationsOptionPage(GuiType guiType, QWidget *parentWidget)
: NotificationsOptionPageBase(parentWidget) : NotificationsOptionPageBase(parentWidget)
, m_noApi(noApi) , m_guiType(guiType)
{ {
} }
@ -350,7 +350,13 @@ NotificationsOptionPage::~NotificationsOptionPage()
QWidget *NotificationsOptionPage::setupWidget() QWidget *NotificationsOptionPage::setupWidget()
{ {
auto *w = NotificationsOptionPageBase::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; return w;
} }
@ -394,8 +400,9 @@ void NotificationsOptionPage::reset()
} }
// AppearanceOptionPage // AppearanceOptionPage
AppearanceOptionPage::AppearanceOptionPage(QWidget *parentWidget) AppearanceOptionPage::AppearanceOptionPage(GuiType guiType, QWidget *parentWidget)
: AppearanceOptionPageBase(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() bool AppearanceOptionPage::apply()
{ {
if (hasBeenShown()) { if (!hasBeenShown()) {
auto &settings = values().appearance; return true;
}
auto &settings = values().appearance;
if (m_guiType == GuiType::TrayWidget) {
settings.trayMenuSize.setWidth(ui()->widthSpinBox->value()); settings.trayMenuSize.setWidth(ui()->widthSpinBox->value());
settings.trayMenuSize.setHeight(ui()->heightSpinBox->value()); settings.trayMenuSize.setHeight(ui()->heightSpinBox->value());
settings.showTraffic = ui()->showTrafficCheckBox->isChecked(); settings.showTraffic = ui()->showTrafficCheckBox->isChecked();
@ -436,15 +461,19 @@ bool AppearanceOptionPage::apply()
} }
settings.frameStyle = style; settings.frameStyle = style;
settings.tabPosition = ui()->tabPosComboBox->currentIndex(); settings.tabPosition = ui()->tabPosComboBox->currentIndex();
settings.brightTextColors = ui()->brightTextColorsCheckBox->isChecked();
} }
settings.brightTextColors = ui()->brightTextColorsCheckBox->isChecked();
return true; return true;
} }
void AppearanceOptionPage::reset() void AppearanceOptionPage::reset()
{ {
if (hasBeenShown()) { if (!hasBeenShown()) {
const auto &settings = values().appearance; return;
}
const auto &settings = values().appearance;
if (m_guiType == GuiType::TrayWidget) {
ui()->widthSpinBox->setValue(settings.trayMenuSize.width()); ui()->widthSpinBox->setValue(settings.trayMenuSize.width());
ui()->heightSpinBox->setValue(settings.trayMenuSize.height()); ui()->heightSpinBox->setValue(settings.trayMenuSize.height());
ui()->showTrafficCheckBox->setChecked(settings.showTraffic); ui()->showTrafficCheckBox->setChecked(settings.showTraffic);
@ -475,8 +504,8 @@ void AppearanceOptionPage::reset()
} }
ui()->frameShadowComboBox->setCurrentIndex(index); ui()->frameShadowComboBox->setCurrentIndex(index);
ui()->tabPosComboBox->setCurrentIndex(settings.tabPosition); ui()->tabPosComboBox->setCurrentIndex(settings.tabPosition);
ui()->brightTextColorsCheckBox->setChecked(settings.brightTextColors);
} }
ui()->brightTextColorsCheckBox->setChecked(settings.brightTextColors);
} }
// AutostartOptionPage // AutostartOptionPage
@ -492,6 +521,7 @@ AutostartOptionPage::~AutostartOptionPage()
QWidget *AutostartOptionPage::setupWidget() QWidget *AutostartOptionPage::setupWidget()
{ {
auto *widget = AutostartOptionPageBase::setupWidget(); auto *widget = AutostartOptionPageBase::setupWidget();
ui()->infoIconLabel->setPixmap( ui()->infoIconLabel->setPixmap(
QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation, nullptr, ui()->infoIconLabel).pixmap(ui()->infoIconLabel->size())); QApplication::style()->standardIcon(QStyle::SP_MessageBoxInformation, nullptr, ui()->infoIconLabel).pixmap(ui()->infoIconLabel->size()));
#if defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID) #if defined(PLATFORM_LINUX) && !defined(PLATFORM_ANDROID)

View File

@ -22,6 +22,17 @@ class SyncthingProcess;
namespace QtGui { 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) BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(ConnectionOptionPage)
public: public:
ConnectionOptionPage(Data::SyncthingConnection *connection, QWidget *parentWidget = nullptr); 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) BEGIN_DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_CTOR(NotificationsOptionPage)
public: public:
NotificationsOptionPage(bool noApi = false, QWidget *parentWidget = nullptr); NotificationsOptionPage(GuiType guiType = GuiType::TrayWidget, QWidget *parentWidget = nullptr);
private: private:
DECLARE_SETUP_WIDGETS DECLARE_SETUP_WIDGETS
bool m_noApi; const GuiType m_guiType;
END_DECLARE_OPTION_PAGE 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) DECLARE_UI_FILE_BASED_OPTION_PAGE_CUSTOM_SETUP(AutostartOptionPage)