From 96da2a94e1b2d25fa39417d9088c9889f504e934 Mon Sep 17 00:00:00 2001 From: J-P Nurmi Date: Mon, 14 Dec 2015 13:13:27 +0100 Subject: Material style: read theme, accent & primary from qtlabscontrols.conf Change-Id: Ie55978ae9c76789cf7796752ceefd183c063662b Reviewed-by: Mitch Curtis --- .../controls/material/qquickmaterialstyle.cpp | 39 +++++++++++++++++++--- .../controls/material/qquickmaterialstyle_p.h | 2 ++ 2 files changed, 37 insertions(+), 4 deletions(-) (limited to 'src/imports') diff --git a/src/imports/controls/material/qquickmaterialstyle.cpp b/src/imports/controls/material/qquickmaterialstyle.cpp index bce5db21..0cef6698 100644 --- a/src/imports/controls/material/qquickmaterialstyle.cpp +++ b/src/imports/controls/material/qquickmaterialstyle.cpp @@ -36,6 +36,7 @@ #include "qquickmaterialstyle_p.h" +#include #include QT_BEGIN_NAMESPACE @@ -381,9 +382,9 @@ static const QColor colors[][14] = { } }; -static const QQuickMaterialStyle::Theme defaultTheme = QQuickMaterialStyle::Light; -static const QQuickMaterialStyle::Color defaultPrimary = QQuickMaterialStyle::BlueGrey; -static const QQuickMaterialStyle::Color defaultAccent = QQuickMaterialStyle::Teal; +static QQuickMaterialStyle::Theme defaultTheme = QQuickMaterialStyle::Light; +static QQuickMaterialStyle::Color defaultPrimary = QQuickMaterialStyle::BlueGrey; +static QQuickMaterialStyle::Color defaultAccent = QQuickMaterialStyle::Teal; static const QColor backgroundColorLight = "#FFFAFAFA"; static const QColor backgroundColorDark = "#FF303030"; static const QColor dialogColorLight = "#FFFFFFFF"; @@ -423,7 +424,7 @@ QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickStyle(parent), m_primary(defaultPrimary), m_accent(defaultAccent) { - init(); // TODO: lazy init? + init(); } QQuickMaterialStyle *QQuickMaterialStyle::qmlAttachedProperties(QObject *object) @@ -753,4 +754,34 @@ void QQuickMaterialStyle::parentStyleChange(QQuickStyle *newParent, QQuickStyle } } +template +static Enum readEnumValue(QSettings *settings, const QString &name, Enum fallback) +{ + Enum result = fallback; + if (settings->contains(name)) { + QMetaEnum enumeration = QMetaEnum::fromType(); + bool ok = false; + int value = enumeration.keyToValue(settings->value(name).toByteArray(), &ok); + if (ok) + result = static_cast(value); + } + return result; +} + +void QQuickMaterialStyle::init() +{ + static bool defaultsInitialized = false; + if (!defaultsInitialized) { + QSharedPointer settings = QQuickStyle::settings(QStringLiteral("Material")); + if (!settings.isNull()) { + defaultTheme = m_theme = readEnumValue(settings.data(), QStringLiteral("Theme"), m_theme); + defaultAccent = m_accent = readEnumValue(settings.data(), QStringLiteral("Accent"), m_accent); + defaultPrimary = m_primary = readEnumValue(settings.data(), QStringLiteral("Primary"), m_primary); + } + defaultsInitialized = true; + } + + QQuickStyle::init(); // TODO: lazy init? +} + QT_END_NAMESPACE diff --git a/src/imports/controls/material/qquickmaterialstyle_p.h b/src/imports/controls/material/qquickmaterialstyle_p.h index e657fd57..84601de5 100644 --- a/src/imports/controls/material/qquickmaterialstyle_p.h +++ b/src/imports/controls/material/qquickmaterialstyle_p.h @@ -214,6 +214,8 @@ protected: void parentStyleChange(QQuickStyle *newParent, QQuickStyle *oldParent) Q_DECL_OVERRIDE; private: + void init(); + bool m_explicitTheme; bool m_explicitPrimary; bool m_explicitAccent; -- cgit v1.2.3