Make option pages configurable for different GUI types
This commit is contained in:
parent
030cb35dbd
commit
ee5c38dd7d
|
@ -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;
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Reference in New Issue