aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-14 13:13:27 +0100
committerJ-P Nurmi <jpnurmi@theqtcompany.com>2015-12-14 14:39:52 +0000
commit96da2a94e1b2d25fa39417d9088c9889f504e934 (patch)
treeee1dd31238269ab6f30f53ce1376d61cba421672
parent9965d9d6c16f3f2e1830efeaf72cdd5f0db711c2 (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.cpp39
-rw-r--r--src/imports/controls/material/qquickmaterialstyle_p.h2
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;