summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2010-04-12 10:37:41 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2010-04-12 10:37:41 +0200
commitdf42322a0cd1454bef4def257380d92bd8b66c5c (patch)
tree9ba51b5b33853caf051cb7dadc0b09f4ebeb566a
parent457c053bfbf57a4e7d1e6cfe360d8980a56d4408 (diff)
Allow adding script interfaces into hierarchies.
You can now do addScriptInterface("foo.bar", interface);
-rw-r--r--library/scriptadapter.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/library/scriptadapter.cpp b/library/scriptadapter.cpp
index 0eb5f49..a07aa5f 100644
--- a/library/scriptadapter.cpp
+++ b/library/scriptadapter.cpp
@@ -211,8 +211,18 @@ Script::Script(const QString &name, const QString &scriptCode,
QHashIterator<QString, QObject *> iter(mAdapter->mScriptInterfaces);
while (iter.hasNext()) {
iter.next();
+ QStringList qualifiedName = iter.key().split(QLatin1Char('.'));
+ QScriptValue targetValue = mEngine.globalObject();
+ for (int i = 0; i < qualifiedName.size() - 1; ++i) {
+ QScriptValue v = targetValue.property(qualifiedName.at(i));
+ if (! v.isValid()) {
+ v = mEngine.newObject();
+ targetValue.setProperty(qualifiedName.at(i), v);
+ }
+ targetValue = v;
+ }
QScriptValue scriptInterface = mEngine.newQObject(iter.value());
- mEngine.globalObject().setProperty(iter.key(), scriptInterface);
+ targetValue.setProperty(qualifiedName.last(), scriptInterface);
}
}