summaryrefslogtreecommitdiffstats
path: root/src/modeling/qtmodelingglobal.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/modeling/qtmodelingglobal.h')
-rw-r--r--src/modeling/qtmodelingglobal.h43
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