diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2010-04-12 10:37:41 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2010-04-12 10:37:41 +0200 |
commit | df42322a0cd1454bef4def257380d92bd8b66c5c (patch) | |
tree | 9ba51b5b33853caf051cb7dadc0b09f4ebeb566a | |
parent | 457c053bfbf57a4e7d1e6cfe360d8980a56d4408 (diff) |
Allow adding script interfaces into hierarchies.
You can now do addScriptInterface("foo.bar", interface);
-rw-r--r-- | library/scriptadapter.cpp | 12 |
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); } } |