aboutsummaryrefslogtreecommitdiffstats
path: root/src/app
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@digia.com>2014-07-08 15:06:05 +0200
committerChristian Kandeler <christian.kandeler@digia.com>2014-07-10 11:22:59 +0200
commit840c3d9db7db82332fcb2372aaf43c19575553c0 (patch)
tree35b29bc7d83c72ab531104ddb1a01376a9899006 /src/app
parent3b50726352fd1b1c5fc5424856ccb9446c87a30f (diff)
support map values in settings
The config command can now read and write maps. Example: qbs config foo '{"foo":"bar","zoo":"baz"}' Change-Id: I54c67f21fd6fd4a291d547abb6097a0dd9022d9f Reviewed-by: Christian Kandeler <christian.kandeler@digia.com>
Diffstat (limited to 'src/app')
-rw-r--r--src/app/shared/qbssettings.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/app/shared/qbssettings.cpp b/src/app/shared/qbssettings.cpp
index 5f6131214..bbb81f28e 100644
--- a/src/app/shared/qbssettings.cpp
+++ b/src/app/shared/qbssettings.cpp
@@ -29,19 +29,58 @@
#include "qbssettings.h"
+#include <tools/scripttools.h>
+
+#include <QScriptEngine>
+#include <QScriptValue>
+
+using qbs::toJSLiteral;
+
+static QString mapToString(const QVariantMap &vm)
+{
+ QString str = QLatin1String("{");
+ for (QVariantMap::const_iterator it = vm.begin(); it != vm.end(); ++it) {
+ if (it != vm.begin())
+ str += QLatin1Char(',');
+ if (it.value().type() == QVariant::Map) {
+ str += toJSLiteral(it.key()) + QLatin1Char(':');
+ str += mapToString(it.value().toMap());
+ } else {
+ str += toJSLiteral(it.key()) + QLatin1Char(':') + toJSLiteral(it.value());
+ }
+ }
+ str += QLatin1Char('}');
+ return str;
+}
+
QString settingsValueToRepresentation(const QVariant &value)
{
if (value.type() == QVariant::Bool)
return QLatin1String(value.toBool() ? "true" : "false");
+ if (value.type() == QVariant::Map)
+ return mapToString(value.toMap());
return value.toStringList().join(QLatin1String(","));
}
+static QVariantMap mapFromString(const QString &str)
+{
+ // ### use Qt5's JSON reader at some point.
+ QScriptEngine engine;
+ QScriptValue sv = engine.evaluate(QLatin1String("(function(){return ")
+ + str + QLatin1String(";})()"));
+ if (sv.isError())
+ return QVariantMap();
+ return sv.toVariant().toMap();
+}
+
QVariant representationToSettingsValue(const QString &representation)
{
if (representation == QLatin1String("true"))
return QVariant(true);
if (representation == QLatin1String("false"))
return QVariant(false);
+ if (representation.startsWith(QLatin1Char('{')))
+ return mapFromString(representation);
const QStringList list = representation.split(QLatin1Char(','), QString::SkipEmptyParts);
if (list.count() > 1)
return list;