diff options
author | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-14 13:13:27 +0100 |
---|---|---|
committer | J-P Nurmi <jpnurmi@theqtcompany.com> | 2015-12-14 14:39:52 +0000 |
commit | 96da2a94e1b2d25fa39417d9088c9889f504e934 (patch) | |
tree | ee1dd31238269ab6f30f53ce1376d61cba421672 | |
parent | 9965d9d6c16f3f2e1830efeaf72cdd5f0db711c2 (diff) |
Material style: read theme, accent & primary from qtlabscontrols.conf
Change-Id: Ie55978ae9c76789cf7796752ceefd183c063662b
Reviewed-by: Mitch Curtis <mitch.curtis@theqtcompany.com>
-rw-r--r-- | src/imports/controls/material/qquickmaterialstyle.cpp | 39 | ||||
-rw-r--r-- | src/imports/controls/material/qquickmaterialstyle_p.h | 2 |
2 files changed, 37 insertions, 4 deletions
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 <QtCore/qsettings.h> #include <QtLabsControls/private/qquickstyle_p.h> 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 <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 QQuickMaterialStyle::init() +{ + static bool defaultsInitialized = false; + if (!defaultsInitialized) { + QSharedPointer<QSettings> settings = QQuickStyle::settings(QStringLiteral("Material")); + if (!settings.isNull()) { + defaultTheme = m_theme = readEnumValue<Theme>(settings.data(), QStringLiteral("Theme"), m_theme); + defaultAccent = m_accent = readEnumValue<Color>(settings.data(), QStringLiteral("Accent"), m_accent); + defaultPrimary = m_primary = readEnumValue<Color>(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; |