aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-11-29 11:29:30 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-14 14:39:49 +0000
commit9965d9d6c16f3f2e1830efeaf72cdd5f0db711c2 (patch)
treeb1dd5d49741ef84ba8689d925dc2139a470263dd
parentbe1c2e01ef1efa0e85eeab5fd392ef85c01493d2 (diff)
Universal style: read theme & accent from qtlabscontrols.conf
Change-Id: Ie41bf8a3b375835a07229eff49e6d10e3ff79992 Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r--src/imports/controls/universal/qquickuniversalstyle.cpp36
-rw-r--r--src/imports/controls/universal/qquickuniversalstyle_p.h2
2 files changed, 35 insertions, 3 deletions
diff --git a/src/imports/controls/universal/qquickuniversalstyle.cpp b/src/imports/controls/universal/qquickuniversalstyle.cpp
index f2bfd70d..7bde3b77 100644
--- a/src/imports/controls/universal/qquickuniversalstyle.cpp
+++ b/src/imports/controls/universal/qquickuniversalstyle.cpp
@@ -37,12 +37,13 @@
#include "qquickuniversalstyle_p.h"
#include <QtCore/qdebug.h>
+#include <QtCore/qsettings.h>
#include <QtLabsControls/private/qquickstyle_p.h>
QT_BEGIN_NAMESPACE
-static const QQuickUniversalStyle::Theme DefaultTheme = QQuickUniversalStyle::Light;
-static const QQuickUniversalStyle::Accent DefaultAccent = QQuickUniversalStyle::Cobalt;
+static QQuickUniversalStyle::Theme DefaultTheme = QQuickUniversalStyle::Light;
+static QQuickUniversalStyle::Accent DefaultAccent = QQuickUniversalStyle::Cobalt;
static QColor qquickuniversal_light_color(QQuickUniversalStyle::SystemColor role)
{
@@ -136,7 +137,7 @@ static QColor qquickuniversal_accent_color(QQuickUniversalStyle::Accent accent)
QQuickUniversalStyle::QQuickUniversalStyle(QObject *parent) : QQuickStyle(parent),
m_hasTheme(false), m_hasAccent(false), m_theme(DefaultTheme), m_accent(DefaultAccent)
{
- init(); // TODO: lazy init?
+ init();
}
QQuickUniversalStyle *QQuickUniversalStyle::qmlAttachedProperties(QObject *object)
@@ -374,4 +375,33 @@ void QQuickUniversalStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle
}
}
+template <typename Enum>
+static Enum readEnumValue(QSettings *settings, const QString &name, Enum fallback)
+{
+ Enum result = fallback;
+ if (settings->contains(name)) {
+ QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ bool ok = false;
+ int value = enumeration.keyToValue(settings->value(name).toByteArray(), &ok);
+ if (ok)
+ result = static_cast<Enum>(value);
+ }
+ return result;
+}
+
+void QQuickUniversalStyle::init()
+{
+ static bool defaultsInitialized = false;
+ if (!defaultsInitialized) {
+ QSharedPointer<QSettings> settings = QQuickStyle::settings(QStringLiteral("Universal"));
+ if (!settings.isNull()) {
+ DefaultTheme = m_theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), m_theme);
+ DefaultAccent = m_accent = readEnumValue<Accent>(settings.data(), QStringLiteral("Accent"), m_accent);
+ }
+ defaultsInitialized = true;
+ }
+
+ QQuickStyle::init(); // TODO: lazy init?
+}
+
QT_END_NAMESPACE
diff --git a/src/imports/controls/universal/qquickuniversalstyle_p.h b/src/imports/controls/universal/qquickuniversalstyle_p.h
index 3bf0bb5d..d7a35830 100644
--- a/src/imports/controls/universal/qquickuniversalstyle_p.h
+++ b/src/imports/controls/universal/qquickuniversalstyle_p.h
@@ -195,6 +195,8 @@ protected:
void parentStyleChange(QQuickStyle *newParent, QQuickStyle *oldParent) Q_DECL_OVERRIDE;
private:
+ void init();
+
bool m_hasTheme;
bool m_hasAccent;
QQuickUniversalStyle::Theme m_theme;