diff options
author | Sandro S. Andrade <sandroandrade@kde.org> | 2013-10-03 09:32:07 -0400 |
---|---|---|
committer | Sandro S. Andrade <sandroandrade@kde.org> | 2013-10-03 15:36:07 +0200 |
commit | 356292395d2be4c59c81bba6787af1317046af5b (patch) | |
tree | 4e6e7d353111b06db1ecd725439f9cccb639ab54 /src/modeling/qtmodelingglobal.h | |
parent | 4d19c1223d4320b0db0261eb6d9904c5be480177 (diff) |
Fix xmi-write to work with new UML metamodel implementation
Change-Id: Ic46debecfdd68f1c38b22cee54c663c22db13cd6
Reviewed-by: Sandro S. Andrade <sandroandrade@kde.org>
Diffstat (limited to 'src/modeling/qtmodelingglobal.h')
-rw-r--r-- | src/modeling/qtmodelingglobal.h | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/modeling/qtmodelingglobal.h b/src/modeling/qtmodelingglobal.h index c1f40d20..809531ed 100644 --- a/src/modeling/qtmodelingglobal.h +++ b/src/modeling/qtmodelingglobal.h @@ -43,6 +43,9 @@ #include <QtCore/QtGlobal> #include <QtCore/QVariant> +#include <QtScript/QScriptValue> +#include <QtScript/QScriptEngine> +#include <QtScript/QScriptValueIterator> QT_BEGIN_NAMESPACE @@ -63,7 +66,45 @@ class QModelingObject; template<class T> T qmodelingobjectproperty_cast(const QObject *object) { - return object->property("modelingObject").value<T>(); + return object ? object->property("modelingObject").value<T>():T(); +} + +template <class T> +QScriptValue qSetToScriptValue(QScriptEngine *engine, const QSet<T *> &elements) +{ + QScriptValue array = engine->newArray(); + foreach (T *element, elements) + array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << engine->newQObject(element)); + return array; +} + +template <class T> +void scriptValueToQSet(const QScriptValue &obj, QSet<T *> &elements) +{ + QScriptValueIterator it(obj); + while (it.hasNext()) { + it.next(); + elements.insert(qobject_cast<T *>(it.value().toQObject())); + } +} + +template <class T> +QScriptValue qListToScriptValue(QScriptEngine *engine, const QList<T *> &elements) +{ + QScriptValue array = engine->newArray(); + foreach (T *element, elements) + array.property(QString::fromLatin1("push")).call(array, QScriptValueList() << engine->newQObject(element)); + return array; +} + +template <class T> +void scriptValueToQList(const QScriptValue &obj, QList<T *> &elements) +{ + QScriptValueIterator it(obj); + while (it.hasNext()) { + it.next(); + elements.append(qobject_cast<T *>(it.value().toQObject())); + } } #endif // QTMODELINGGLOBAL_H |