aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/style
diff options
context:
space:
mode:
authorDaniel d'Andrada <daniel.dandrada@luxoft.com>2018-11-28 10:58:51 +0100
committerBramastyo Harimukti Santoso <bramastyo.harimukti.santoso@pelagicore.com>2018-11-28 14:17:10 +0000
commit121c4d384c469d1435d8c565aa89fd68e6b0bb20 (patch)
tree2d3e985191ee2899e04feedb444803a36bf17acf /plugins/style
parentc303b13a1095765b39a32295d4fa30d002536db1 (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.cpp11
-rw-r--r--plugins/style/Style.h3
-rw-r--r--plugins/style/StyleData.h4
-rw-r--r--plugins/style/StyleDefaults.cpp29
-rw-r--r--plugins/style/StyleDefaults.h2
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; }