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->setDisplayName(QCoreApplication::translate("Plasmoid::SettingsDialog", "Plasmoid"));
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")));
categories << category;

View File

@ -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();
}

View File

@ -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)

View File

@ -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)