From 05e49c86ce4d646b3e2babe53aeb31b8eff933de Mon Sep 17 00:00:00 2001 From: Martchus Date: Tue, 19 Nov 2019 19:33:58 +0100 Subject: [PATCH] Improve color picker for icons * Add note about Drag & Drop * Allow picking from multiple presets --- CMakeLists.txt | 2 +- model/syncthingicons.cpp | 24 ++++++++++++++++++++++++ model/syncthingicons.h | 7 +++++++ widgets/CMakeLists.txt | 1 + widgets/settings/iconsoptionpage.ui | 12 +++++++++--- widgets/settings/settingsdialog.cpp | 19 +++++++++++++++++-- 6 files changed, 59 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2b2c847..9e8535e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -10,7 +10,7 @@ set(META_APP_CATEGORIES "Network;FileTransfer") set(META_GUI_OPTIONAL false) set(META_VERSION_MAJOR 0) set(META_VERSION_MINOR 10) -set(META_VERSION_PATCH 3) +set(META_VERSION_PATCH 4) set(META_VERSION_EXACT_SONAME ON) set(META_ADD_DEFAULT_CPP_UNIT_TEST_APPLICATION ON) diff --git a/model/syncthingicons.cpp b/model/syncthingicons.cpp index 9eb974b..075cfeb 100644 --- a/model/syncthingicons.cpp +++ b/model/syncthingicons.cpp @@ -187,6 +187,30 @@ StatusIconSettings::StatusIconSettings() { } +StatusIconSettings::StatusIconSettings(StatusIconSettings::DarkTheme) + : defaultColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FFFFFFFF") }) + , errorColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FFFFAEA5") }) + , warningColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFFFF6A5") }) + , idleColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFFFFFFF") }) + , scanningColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFA5EFFF") }) + , synchronizingColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFA5EFFF") }) + , pausedColor({ QStringLiteral("#00000000"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFA7A7A7") }) + , disconnectedColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FFA7A7A7") }) +{ +} + +StatusIconSettings::StatusIconSettings(StatusIconSettings::BrightTheme) + : defaultColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FF000000") }) + , errorColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFDB3C26") }) + , warningColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FFC9CE3B") }) + , idleColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FF000000") }) + , scanningColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FF26B6DB") }) + , synchronizingColor({ QStringLiteral("#00000000"), QStringLiteral("#00000000"), QStringLiteral("#FF26B6DB") }) + , pausedColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFA7A7A7") }) + , disconnectedColor({ QStringLiteral("#00FFFFFF"), QStringLiteral("#00FFFFFF"), QStringLiteral("#FFA7A7A7") }) +{ +} + std::vector StatusIconSettings::colorMapping() { return std::vector({ diff --git a/model/syncthingicons.h b/model/syncthingicons.h index c400c92..163aac7 100644 --- a/model/syncthingicons.h +++ b/model/syncthingicons.h @@ -61,7 +61,14 @@ QPixmap LIB_SYNCTHING_MODEL_EXPORT renderSvgImage(const QByteArray &contents, co QByteArray LIB_SYNCTHING_MODEL_EXPORT loadFontAwesomeIcon(const QString &iconName, const QColor &color, bool solid = true); struct LIB_SYNCTHING_MODEL_EXPORT StatusIconSettings { + struct DarkTheme { + }; + struct BrightTheme { + }; + explicit StatusIconSettings(); + explicit StatusIconSettings(DarkTheme); + explicit StatusIconSettings(BrightTheme); explicit StatusIconSettings(const QString &str); StatusIconColorSet defaultColor; diff --git a/widgets/CMakeLists.txt b/widgets/CMakeLists.txt index b5ef9c7..7b2fe34 100644 --- a/widgets/CMakeLists.txt +++ b/widgets/CMakeLists.txt @@ -53,6 +53,7 @@ set(TS_FILES translations/${META_PROJECT_NAME}_cs_CZ.ts translations/${META_PROJ translations/${META_PROJECT_NAME}_en_US.ts) set(REQUIRED_ICONS + color-profile preferences-other process-stop list-add diff --git a/widgets/settings/iconsoptionpage.ui b/widgets/settings/iconsoptionpage.ui index 4a11f48..dedd49e 100644 --- a/widgets/settings/iconsoptionpage.ui +++ b/widgets/settings/iconsoptionpage.ui @@ -16,6 +16,13 @@ + + + + Use Drag & Drop to re-use a selected color at a different position. + + + @@ -105,11 +112,10 @@ - Restore defaults + Use preset - - .. + diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 7db0736..03c9d46 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -51,6 +51,7 @@ #endif #include #include +#include #include #include #include @@ -588,11 +589,25 @@ QWidget *IconsOptionPage::setupWidget() } } - // setup additional buttons - QObject::connect(ui()->restoreDefaultsPushButton, &QPushButton::clicked, [this] { + // setup presets menu + auto *const presetsMenu = new QMenu(widget); + presetsMenu->addAction(QCoreApplication::translate("QtGui::IconsOptionPageBase", "Colorful background with gradient (default)"), [this] { m_settings = Data::StatusIconSettings(); update(); }); + presetsMenu->addAction( + QCoreApplication::translate("QtGui::IconsOptionPageBase", "Transparent background and dark foreground (for bright themes)"), [this] { + m_settings = Data::StatusIconSettings(Data::StatusIconSettings::BrightTheme{}); + update(); + }); + presetsMenu->addAction( + QCoreApplication::translate("QtGui::IconsOptionPageBase", "Transparent background and bright foreground (for dark themes)"), [this] { + m_settings = Data::StatusIconSettings(Data::StatusIconSettings::DarkTheme{}); + update(); + }); + + // setup additional buttons + ui()->restoreDefaultsPushButton->setMenu(presetsMenu); QObject::connect(ui()->restorePreviousPushButton, &QPushButton::clicked, [this] { reset(); }); return widget;