From 2d4134afafdb629ff01f9b4c1de5375ab9cdb75a Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Tue, 15 Jul 2014 17:58:31 -0700 Subject: [PATCH] Provide basic conversions to/from SharedObjectPointer (still have to work out how to handle reference counting correctly). --- libraries/metavoxels/src/Bitstream.cpp | 11 ++++++++++- libraries/metavoxels/src/Bitstream.h | 2 +- libraries/script-engine/src/ScriptEngine.cpp | 2 ++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/libraries/metavoxels/src/Bitstream.cpp b/libraries/metavoxels/src/Bitstream.cpp index 2e9e641d88..f49ae1c04f 100644 --- a/libraries/metavoxels/src/Bitstream.cpp +++ b/libraries/metavoxels/src/Bitstream.cpp @@ -129,10 +129,19 @@ QList Bitstream::getMetaObjectSubClasses(const QMetaObject* return getMetaObjectSubClasses().values(metaObject); } -void Bitstream::configureScriptEngine(QScriptEngine* engine) { +QScriptValue sharedObjectPointerToScriptValue(QScriptEngine* engine, const SharedObjectPointer& pointer) { + return pointer ? engine->newQObject(pointer.data()) : engine->nullValue(); +} + +void sharedObjectPointerFromScriptValue(const QScriptValue& object, SharedObjectPointer& pointer) { + pointer = qobject_cast(object.toQObject()); +} + +void Bitstream::registerTypes(QScriptEngine* engine) { foreach (const QMetaObject* metaObject, getMetaObjects()) { engine->globalObject().setProperty(metaObject->className(), engine->newQMetaObject(metaObject)); } + qScriptRegisterMetaType(engine, sharedObjectPointerToScriptValue, sharedObjectPointerFromScriptValue); } Bitstream::Bitstream(QDataStream& underlying, MetadataType metadataType, GenericsMode genericsMode, QObject* parent) : diff --git a/libraries/metavoxels/src/Bitstream.h b/libraries/metavoxels/src/Bitstream.h index 04b4dc97fc..7602424ded 100644 --- a/libraries/metavoxels/src/Bitstream.h +++ b/libraries/metavoxels/src/Bitstream.h @@ -323,7 +323,7 @@ public: /// Configures the supplied script engine with our registered meta-objects, allowing all of them to be instantiated from /// scripts. - static void configureScriptEngine(QScriptEngine* engine); + static void registerTypes(QScriptEngine* engine); enum MetadataType { NO_METADATA, HASH_METADATA, FULL_METADATA }; diff --git a/libraries/script-engine/src/ScriptEngine.cpp b/libraries/script-engine/src/ScriptEngine.cpp index cd7c2670ec..c5d5019b1f 100644 --- a/libraries/script-engine/src/ScriptEngine.cpp +++ b/libraries/script-engine/src/ScriptEngine.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -229,6 +230,7 @@ void ScriptEngine::init() { registerMenuItemProperties(&_engine); registerAnimationTypes(&_engine); registerAvatarTypes(&_engine); + Bitstream::registerTypes(&_engine); qScriptRegisterMetaType(&_engine, ParticlePropertiesToScriptValue, ParticlePropertiesFromScriptValue); qScriptRegisterMetaType(&_engine, ParticleIDtoScriptValue, ParticleIDfromScriptValue);