Add option to configure presets with transparent background depending on palette
Implements https://github.com/Martchus/syncthingtray/issues/270
This commit is contained in:
parent
e67143eb96
commit
250f4bf97d
|
@ -683,7 +683,7 @@ void SyncthingApplet::applySettings(int changeConnectionIndex)
|
|||
// apply appearance settings
|
||||
setSize(config.readEntry<QSize>("size", QSize(25, 25)));
|
||||
setShowingTabTexts(config.readEntry<bool>("showTabTexts", false));
|
||||
IconManager::instance().applySettings(&settings.icons.status);
|
||||
IconManager::instance().applySettings(&settings.icons.status, nullptr, settings.icons.usePaletteForStatus, false);
|
||||
|
||||
// restore selected states
|
||||
// note: The settings dialog writes this to the Plasmoid's config like the other settings. However, it
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "resources/../../tray/resources/config.h"
|
||||
|
||||
#include <qtutilities/misc/compat.h>
|
||||
#include <qtutilities/misc/desktoputils.h>
|
||||
|
||||
#include <qtforkawesome/icon.h>
|
||||
|
||||
|
@ -278,7 +279,7 @@ QString StatusIconSettings::toString() const
|
|||
|
||||
StatusIcons::StatusIcons(const StatusIconSettings &settings)
|
||||
: disconnected(
|
||||
QIcon(renderSvgImage(makeSyncthingIcon(settings.disconnectedColor, StatusEmblem::None, settings.strokeWidth), settings.renderSize)))
|
||||
QIcon(renderSvgImage(makeSyncthingIcon(settings.disconnectedColor, StatusEmblem::None, settings.strokeWidth), settings.renderSize)))
|
||||
, idling(QIcon(renderSvgImage(makeSyncthingIcon(settings.idleColor, StatusEmblem::None, settings.strokeWidth), settings.renderSize)))
|
||||
, scanninig(QIcon(renderSvgImage(makeSyncthingIcon(settings.scanningColor, StatusEmblem::Scanning, settings.strokeWidth), settings.renderSize)))
|
||||
, notify(QIcon(renderSvgImage(makeSyncthingIcon(settings.warningColor, StatusEmblem::Alert, settings.strokeWidth), settings.renderSize)))
|
||||
|
@ -323,6 +324,9 @@ IconManager::IconManager(const QPalette *palette)
|
|||
, m_trayIcons(m_statusIcons)
|
||||
, m_commonForkAwesomeIcons(
|
||||
m_forkAwesomeRenderer, (palette ? *palette : QGuiApplication::palette()).color(QPalette::Normal, QPalette::Text), QSize(64, 64))
|
||||
, m_distinguishTrayIcons(false)
|
||||
, m_usePaletteForStatus(false)
|
||||
, m_usePaletteForTray(false)
|
||||
{
|
||||
#ifdef __GNUC__
|
||||
#pragma GCC diagnostic push
|
||||
|
@ -336,8 +340,46 @@ IconManager::IconManager(const QPalette *palette)
|
|||
#endif
|
||||
}
|
||||
|
||||
void IconManager::applySettings(
|
||||
const StatusIconSettings *statusIconSettings, const StatusIconSettings *trayIconSettings, bool usePaletteForStatus, bool usePaletteForTray)
|
||||
{
|
||||
m_distinguishTrayIcons = trayIconSettings != nullptr;
|
||||
if (usePaletteForStatus || usePaletteForTray) {
|
||||
m_settingsForPalette = QtUtilities::isPaletteDark(m_palette) ? StatusIconSettings(StatusIconSettings::DarkTheme{})
|
||||
: StatusIconSettings(StatusIconSettings::BrightTheme{});
|
||||
}
|
||||
if ((m_usePaletteForStatus = usePaletteForStatus)) {
|
||||
m_statusIcons = StatusIcons(m_settingsForPalette);
|
||||
} else if (statusIconSettings) {
|
||||
m_statusIcons = StatusIcons(*statusIconSettings);
|
||||
} else {
|
||||
m_statusIcons = StatusIcons(StatusIconSettings());
|
||||
}
|
||||
if ((m_usePaletteForTray = usePaletteForTray) || (!m_distinguishTrayIcons && usePaletteForStatus)) {
|
||||
m_trayIcons = m_distinguishTrayIcons ? StatusIcons(m_settingsForPalette) : m_statusIcons;
|
||||
} else if (trayIconSettings) {
|
||||
m_trayIcons = StatusIcons(*trayIconSettings);
|
||||
} else {
|
||||
m_trayIcons = m_statusIcons;
|
||||
}
|
||||
emit statusIconsChanged(m_statusIcons, m_trayIcons);
|
||||
}
|
||||
|
||||
void IconManager::setPalette(const QPalette &palette)
|
||||
{
|
||||
if (m_usePaletteForStatus || m_usePaletteForTray) {
|
||||
if (const auto wasDark = QtUtilities::isPaletteDark(m_palette), isDark = QtUtilities::isPaletteDark(palette); wasDark != isDark) {
|
||||
m_settingsForPalette
|
||||
= isDark ? StatusIconSettings(StatusIconSettings::DarkTheme{}) : StatusIconSettings(StatusIconSettings::BrightTheme{});
|
||||
if (m_usePaletteForStatus) {
|
||||
m_statusIcons = StatusIcons(m_settingsForPalette);
|
||||
}
|
||||
if (m_usePaletteForTray || (!m_distinguishTrayIcons && m_usePaletteForStatus)) {
|
||||
m_trayIcons = m_distinguishTrayIcons ? StatusIcons(m_settingsForPalette) : m_statusIcons;
|
||||
}
|
||||
emit statusIconsChanged(m_statusIcons, m_trayIcons);
|
||||
}
|
||||
}
|
||||
m_palette = palette;
|
||||
emit forkAwesomeIconsChanged(
|
||||
m_commonForkAwesomeIcons = ForkAwesomeIcons(m_forkAwesomeRenderer, palette.color(QPalette::Normal, QPalette::Text), QSize(64, 64)));
|
||||
|
|
|
@ -155,7 +155,8 @@ class LIB_SYNCTHING_MODEL_EXPORT IconManager : public QObject {
|
|||
public:
|
||||
static IconManager &instance(const QPalette *palette = nullptr);
|
||||
|
||||
void applySettings(const StatusIconSettings *statusIconSettings = nullptr, const StatusIconSettings *trayIconSettings = nullptr);
|
||||
void applySettings(const StatusIconSettings *statusIconSettings = nullptr, const StatusIconSettings *trayIconSettings = nullptr,
|
||||
bool usePaletteForStatus = false, bool usePaletteForTray = false);
|
||||
const StatusIcons &statusIcons() const;
|
||||
const StatusIcons &trayIcons() const;
|
||||
QtForkAwesome::Renderer &forkAwesomeRenderer();
|
||||
|
@ -178,23 +179,12 @@ private:
|
|||
QtForkAwesome::Renderer m_forkAwesomeRenderer;
|
||||
ForkAwesomeIcons m_commonForkAwesomeIcons;
|
||||
QPalette m_palette;
|
||||
StatusIconSettings m_settingsForPalette;
|
||||
bool m_distinguishTrayIcons;
|
||||
bool m_usePaletteForStatus;
|
||||
bool m_usePaletteForTray;
|
||||
};
|
||||
|
||||
inline void IconManager::applySettings(const StatusIconSettings *statusIconSettings, const StatusIconSettings *trayIconSettings)
|
||||
{
|
||||
if (statusIconSettings) {
|
||||
m_statusIcons = StatusIcons(*statusIconSettings);
|
||||
} else {
|
||||
m_statusIcons = StatusIcons(StatusIconSettings());
|
||||
}
|
||||
if (trayIconSettings) {
|
||||
m_trayIcons = StatusIcons(*trayIconSettings);
|
||||
} else {
|
||||
m_trayIcons = m_statusIcons;
|
||||
}
|
||||
emit statusIconsChanged(m_statusIcons, m_trayIcons);
|
||||
}
|
||||
|
||||
inline const StatusIcons &IconManager::statusIcons() const
|
||||
{
|
||||
return m_statusIcons;
|
||||
|
|
|
@ -124,51 +124,50 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="bgColor1Label">
|
||||
<property name="text">
|
||||
<string>Background color 1</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="bgColor2Label">
|
||||
<property name="text">
|
||||
<string>Background color 2</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<widget class="QLabel" name="previewLabel">
|
||||
<property name="text">
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QWidget" name="widget" native="true"/>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="foregroundColorLabel">
|
||||
<property name="text">
|
||||
<string>Foreground color</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<widget class="QWidget" name="gridWidget" native="true">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="bgColor1Label">
|
||||
<property name="text">
|
||||
<string>Background color 1</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLabel" name="bgColor2Label">
|
||||
<property name="text">
|
||||
<string>Background color 2</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QLabel" name="foregroundColorLabel">
|
||||
<property name="text">
|
||||
<string>Foreground color</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<widget class="QLabel" name="previewLabel">
|
||||
<property name="text">
|
||||
<string>Preview</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="Line" name="line2">
|
||||
|
|
|
@ -372,6 +372,8 @@ bool restore()
|
|||
settings.value(QStringLiteral("trayIconsStrokeWidth"), static_cast<int>(v.icons.tray.strokeWidth)).toInt());
|
||||
v.icons.distinguishTrayIcons = settings.value(QStringLiteral("distinguishTrayIcons")).toBool();
|
||||
v.icons.preferIconsFromTheme = settings.value(QStringLiteral("preferIconsFromTheme")).toBool();
|
||||
v.icons.usePaletteForStatus = settings.value(QStringLiteral("usePaletteForStatusIcons")).toBool();
|
||||
v.icons.usePaletteForTray = settings.value(QStringLiteral("usePaletteForTrayIcons")).toBool();
|
||||
settings.beginGroup(QStringLiteral("positioning"));
|
||||
auto &positioning = appearance.positioning;
|
||||
positioning.useCursorPosition = settings.value(QStringLiteral("useCursorPos"), positioning.useCursorPosition).toBool();
|
||||
|
@ -508,6 +510,8 @@ bool save()
|
|||
settings.setValue(QStringLiteral("trayIconsStrokeWidth"), static_cast<int>(v.icons.tray.strokeWidth));
|
||||
settings.setValue(QStringLiteral("distinguishTrayIcons"), v.icons.distinguishTrayIcons);
|
||||
settings.setValue(QStringLiteral("preferIconsFromTheme"), v.icons.preferIconsFromTheme);
|
||||
settings.setValue(QStringLiteral("usePaletteForStatusIcons"), v.icons.usePaletteForStatus);
|
||||
settings.setValue(QStringLiteral("usePaletteForTrayIcons"), v.icons.usePaletteForTray);
|
||||
settings.beginGroup(QStringLiteral("positioning"));
|
||||
settings.setValue(QStringLiteral("useCursorPos"), appearance.positioning.useCursorPosition);
|
||||
settings.setValue(QStringLiteral("useAssumedIconPosition"), appearance.positioning.useAssumedIconPosition);
|
||||
|
|
|
@ -174,6 +174,8 @@ struct SYNCTHINGWIDGETS_EXPORT Settings {
|
|||
Data::StatusIconSettings tray;
|
||||
bool distinguishTrayIcons = false;
|
||||
bool preferIconsFromTheme = false;
|
||||
bool usePaletteForStatus = false;
|
||||
bool usePaletteForTray = false;
|
||||
} icons;
|
||||
Launcher launcher;
|
||||
#ifdef LIB_SYNCTHING_CONNECTOR_SUPPORT_SYSTEMD
|
||||
|
|
|
@ -714,18 +714,25 @@ QWidget *IconsOptionPage::setupWidget()
|
|||
auto *const presetsMenu = new QMenu(widget);
|
||||
presetsMenu->addAction(QCoreApplication::translate("QtGui::IconsOptionPageBase", "Colorful background with gradient (default)"), widget, [this] {
|
||||
m_settings = Data::StatusIconSettings();
|
||||
m_usePalette = false;
|
||||
update(true);
|
||||
});
|
||||
presetsMenu->addAction(
|
||||
QCoreApplication::translate("QtGui::IconsOptionPageBase", "Transparent background and dark foreground (for bright themes)"), widget, [this] {
|
||||
m_settings = Data::StatusIconSettings(Data::StatusIconSettings::BrightTheme{});
|
||||
m_usePalette = false;
|
||||
update(true);
|
||||
});
|
||||
presetsMenu->addAction(
|
||||
QCoreApplication::translate("QtGui::IconsOptionPageBase", "Transparent background and bright foreground (for dark themes)"), widget, [this] {
|
||||
m_settings = Data::StatusIconSettings(Data::StatusIconSettings::DarkTheme{});
|
||||
m_usePalette = false;
|
||||
update(true);
|
||||
});
|
||||
m_paletteAction = presetsMenu->addAction(QString(), widget, [this] {
|
||||
m_usePalette = !m_usePalette;
|
||||
update(true);
|
||||
});
|
||||
|
||||
// setup additional buttons
|
||||
ui()->restoreDefaultsPushButton->setMenu(presetsMenu);
|
||||
|
@ -760,9 +767,11 @@ bool IconsOptionPage::apply()
|
|||
case Context::Combined:
|
||||
case Context::UI:
|
||||
iconSettings.status = m_settings;
|
||||
iconSettings.usePaletteForStatus = m_usePalette;
|
||||
break;
|
||||
case Context::System:
|
||||
iconSettings.tray = m_settings;
|
||||
iconSettings.usePaletteForTray = m_usePalette;
|
||||
iconSettings.distinguishTrayIcons = !ui()->contextCheckBox->isChecked();
|
||||
break;
|
||||
}
|
||||
|
@ -777,6 +786,10 @@ void IconsOptionPage::update(bool preserveSize)
|
|||
} else {
|
||||
ui()->renderingSizeSlider->setValue(std::max(m_settings.renderSize.width(), m_settings.renderSize.height()));
|
||||
}
|
||||
m_paletteAction->setText(m_usePalette
|
||||
? QCoreApplication::translate("QtGui::IconsOptionPageBase", "Select colors manually (no longer follow system palette)")
|
||||
: QCoreApplication::translate("QtGui::IconsOptionPageBase", "Transparent background and foreground depending on system palette"));
|
||||
ui()->gridWidget->setDisabled(m_usePalette);
|
||||
ui()->thickStrokeWidthCheckBox->setChecked(m_settings.strokeWidth == StatusIconStrokeWidth::Thick);
|
||||
for (auto &widgetsForColor : m_widgets) {
|
||||
widgetsForColor.colorButtons[0]->setColor(widgetsForColor.setting->backgroundStart);
|
||||
|
@ -792,9 +805,11 @@ void IconsOptionPage::reset()
|
|||
case Context::Combined:
|
||||
case Context::UI:
|
||||
m_settings = iconSettings.status;
|
||||
m_usePalette = iconSettings.usePaletteForStatus;
|
||||
break;
|
||||
case Context::System:
|
||||
m_settings = iconSettings.tray;
|
||||
m_usePalette = iconSettings.usePaletteForTray;
|
||||
ui()->contextCheckBox->setChecked(!iconSettings.distinguishTrayIcons);
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -105,6 +105,8 @@ private:
|
|||
void update(bool preserveSize = false);
|
||||
Context m_context;
|
||||
Data::StatusIconSettings m_settings;
|
||||
QAction *m_paletteAction = nullptr;
|
||||
bool m_usePalette = false;
|
||||
struct {
|
||||
QtUtilities::ColorButton *colorButtons[3] = {};
|
||||
QLabel *previewLabel = nullptr;
|
||||
|
|
|
@ -589,7 +589,9 @@ void TrayWidget::applySettings(const QString &connectionConfig)
|
|||
if (settings.appearance.tabPosition >= QTabWidget::North && settings.appearance.tabPosition <= QTabWidget::East) {
|
||||
m_ui->tabWidget->setTabPosition(static_cast<QTabWidget::TabPosition>(settings.appearance.tabPosition));
|
||||
}
|
||||
IconManager::instance().applySettings(&settings.icons.status, settings.icons.distinguishTrayIcons ? &settings.icons.tray : nullptr);
|
||||
const auto &iconSettings = settings.icons;
|
||||
IconManager::instance().applySettings(&iconSettings.status, iconSettings.distinguishTrayIcons ? &iconSettings.tray : nullptr,
|
||||
iconSettings.usePaletteForStatus, iconSettings.usePaletteForTray);
|
||||
if (m_tabTextsShown != settings.appearance.showTabTexts) {
|
||||
const auto tabCount = m_ui->tabWidget->count();
|
||||
if ((m_tabTextsShown = settings.appearance.showTabTexts)) {
|
||||
|
|
Loading…
Reference in New Issue