diff options
author | Daniel d'Andrada <daniel.dandrada@luxoft.com> | 2018-11-28 10:58:51 +0100 |
---|---|---|
committer | Bramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com> | 2018-11-28 14:17:10 +0000 |
commit | 121c4d384c469d1435d8c565aa89fd68e6b0bb20 (patch) | |
tree | 2d3e985191ee2899e04feedb444803a36bf17acf /plugins/style | |
parent | c303b13a1095765b39a32295d4fa30d002536db1 (diff) |
[style] Make support for multiple themes optional
lucee has only a Light theme.
Change-Id: I89a9123cbeffad46b1fa1672649c7491dc6212e2
Reviewed-by: Bramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com>
Diffstat (limited to 'plugins/style')
-rw-r--r-- | plugins/style/Style.cpp | 11 | ||||
-rw-r--r-- | plugins/style/Style.h | 3 | ||||
-rw-r--r-- | plugins/style/StyleData.h | 4 | ||||
-rw-r--r-- | plugins/style/StyleDefaults.cpp | 29 | ||||
-rw-r--r-- | plugins/style/StyleDefaults.h | 2 |
5 files changed, 38 insertions, 11 deletions
diff --git a/plugins/style/Style.cpp b/plugins/style/Style.cpp index 319baa8a..8282bb7d 100644 --- a/plugins/style/Style.cpp +++ b/plugins/style/Style.cpp @@ -36,6 +36,7 @@ #include <QFileInfo> #include <QQmlEngine> #include <QQuickStyle> +#include <QtQml/qqmlinfo.h> Style::Style(QObject *parent) : QQuickAttachedObject(parent) @@ -104,12 +105,22 @@ void Style::setTheme(Style::Theme value) if (value == (Theme)m_theme) return; + if (!supportsMultipleThemes()) { + qmlWarning(this) << "The \"" << name() << "\" style does not support multiple themes."; + return; + } + m_theme = (StyleData::Theme)value; m_image = QJSValue(); propagateTheme(); emit themeChanged(); } +bool Style::supportsMultipleThemes() const +{ + return StyleDefaults::instance()->supportsMultipleThemes(); +} + void Style::propagateAccentColor() { for (QQuickAttachedObject *child : attachedChildren()) { diff --git a/plugins/style/Style.h b/plugins/style/Style.h index 5cd5ec2c..5d7a8b56 100644 --- a/plugins/style/Style.h +++ b/plugins/style/Style.h @@ -39,6 +39,7 @@ class Style : public QQuickAttachedObject { Q_OBJECT Q_PROPERTY(Theme theme READ theme WRITE setTheme NOTIFY themeChanged FINAL) + Q_PROPERTY(bool supportsMultipleThemes READ supportsMultipleThemes CONSTANT FINAL) // naming scheme use by other qt control styles // TODO: update controls to use colors from the design spec group or update the specs if needed @@ -92,6 +93,8 @@ public: Theme theme() const { return (Theme) m_theme; } void setTheme(Theme); + bool supportsMultipleThemes() const; + QColor accentColor() const { return m_accentColor; } void setAccentColor(const QColor &accent); diff --git a/plugins/style/StyleData.h b/plugins/style/StyleData.h index 27acb931..81313e75 100644 --- a/plugins/style/StyleData.h +++ b/plugins/style/StyleData.h @@ -31,6 +31,7 @@ #pragma once #include <QColor> +#include <QMap> struct StyleData { @@ -51,5 +52,6 @@ struct StyleData qreal opacityLow; qreal defaultDisabledOpacity; QString fontFamily; - } lightTheme, darkTheme; + }; + QMap<Theme, ThemeData> themes; }; diff --git a/plugins/style/StyleDefaults.cpp b/plugins/style/StyleDefaults.cpp index 821687be..f8c47f01 100644 --- a/plugins/style/StyleDefaults.cpp +++ b/plugins/style/StyleDefaults.cpp @@ -84,13 +84,19 @@ StyleDefaults::StyleDefaults() FETCH_COLOR(m_data.accentColor, "AccentColor") - settings.beginGroup("Light"); - loadTheme(m_data.lightTheme, settings); - settings.endGroup(); + QStringList themes = settings.childGroups(); - settings.beginGroup("Dark"); - loadTheme(m_data.darkTheme, settings); - settings.endGroup(); + if (themes.contains("Light")) { + settings.beginGroup("Light"); + loadTheme(m_data.themes[StyleData::Light], settings); + settings.endGroup(); + } + + if (themes.contains("Dark")) { + settings.beginGroup("Dark"); + loadTheme(m_data.themes[StyleData::Dark], settings); + settings.endGroup(); + } } void StyleDefaults::loadTheme(StyleData::ThemeData &data, QSettings &settings) @@ -115,8 +121,11 @@ void StyleDefaults::loadTheme(StyleData::ThemeData &data, QSettings &settings) const StyleData::ThemeData StyleDefaults::dataFromTheme(StyleData::Theme theme) const { - if (theme == StyleData::Light) - return m_data.lightTheme; - else - return m_data.darkTheme; + Q_ASSERT(m_data.themes.contains(theme)); + return m_data.themes[theme]; +} + +bool StyleDefaults::supportsMultipleThemes() const +{ + return m_data.themes.count() > 1; } diff --git a/plugins/style/StyleDefaults.h b/plugins/style/StyleDefaults.h index 9fbb7bd2..656bcdba 100644 --- a/plugins/style/StyleDefaults.h +++ b/plugins/style/StyleDefaults.h @@ -41,6 +41,8 @@ public: const StyleData &data() const { return m_data; } + bool supportsMultipleThemes() const; + const StyleData::ThemeData dataFromTheme(StyleData::Theme theme) const; const QString imagePath() const { return m_imagePath; } |