diff options
author | Jesper K. Pedersen <jesper.pedersen@kdab.com> | 2013-05-07 16:02:32 +0200 |
---|---|---|
committer | Jesper K. Pedersen <jesper.pedersen@kdab.com> | 2013-05-13 10:16:44 +0200 |
commit | 342a81ec6738d63eed8b12d7678ccd22b1ab1c3e (patch) | |
tree | 3a87a6d0ec23554b0aab6ebb82d8a7c0007da5c5 | |
parent | e7e1385068f93584b57e384d751af96757f678c6 (diff) |
copied the registration functions over as they might be removed
Change-Id: Ic5a095de1f36e7926c0d45771db57dae5ab65b91
Reviewed-by: Nicolas Arnaud-Cormos <nicolas@kdab.com>
-rw-r--r-- | scripting.pro | 3 | ||||
-rw-r--r-- | scriptrunner.cpp | 9 | ||||
-rw-r--r-- | scriptwrappers.h | 36 |
3 files changed, 40 insertions, 8 deletions
diff --git a/scripting.pro b/scripting.pro index 413e22c..d6acaaa 100644 --- a/scripting.pro +++ b/scripting.pro @@ -64,9 +64,6 @@ USE_USER_DESTDIR = yes PROVIDER = KDAB -# FIXME: Once the qtscripts wrappers has been copied over, remove this. -INCLUDEPATH += $(QTC_SOURCE)/src/shared - include($$QTCREATOR_SOURCES/src/qtcreatorplugin.pri) OTHER_FILES += \ diff --git a/scriptrunner.cpp b/scriptrunner.cpp index 1426d01..a3ab9d2 100644 --- a/scriptrunner.cpp +++ b/scriptrunner.cpp @@ -40,7 +40,6 @@ #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> -#include <scriptwrapper/wrap_helpers.h> #include "scriptwrappers.h" #include "enumwappers.h" #include "utils/dialogs.h" @@ -148,16 +147,16 @@ ScriptRunner::QScriptEnginePtr ScriptRunner::ensureEngineInitialized() m_engine = QScriptEnginePtr(new QScriptEngine); qRegisterMetaType<Editor*>("Editor*"); - SharedTools::registerQObject<Editor>(m_engine.data()); + registerQObject<Editor>(m_engine.data()); qRegisterMetaType<CppFunction*>("CppFunction*"); - SharedTools::registerQObject<CppFunction>(m_engine.data()); + registerQObject<CppFunction>(m_engine.data()); qRegisterMetaType<CppArgument*>("CppArgument*"); - SharedTools::registerQObject<CppArgument>(m_engine.data()); + registerQObject<CppArgument>(m_engine.data()); qRegisterMetaType<Mark*>("Mark*"); - SharedTools::registerQObject<Mark>(m_engine.data()); + registerQObject<Mark>(m_engine.data()); qScriptRegisterSequenceMetaType< QList<CppArgument*> >(m_engine.data()); diff --git a/scriptwrappers.h b/scriptwrappers.h index 48d5882..ae4c104 100644 --- a/scriptwrappers.h +++ b/scriptwrappers.h @@ -8,6 +8,42 @@ namespace Internal { void registerWrappers(QScriptEngine* engine ); + +// Convert a class derived from QObject to Scriptvalue via engine->newQObject() to make +// the signals, slots and properties visible. +// To be registered as a magic creation function with qScriptRegisterMetaType(). +// (see registerQObject() + +template <class SomeQObject> +static QScriptValue qObjectToScriptValue(QScriptEngine *engine, SomeQObject * const &qo) +{ + return engine->newQObject(qo, QScriptEngine::QtOwnership, QScriptEngine::ExcludeChildObjects); +} + +// Convert Scriptvalue back to a class derived from QObject via QScriptValue::toQObject() +// To be registered as a magic conversion function with qScriptRegisterMetaType(). +// (see registerQObject) + +template <class SomeQObject> +static void scriptValueToQObject(const QScriptValue &sv, SomeQObject * &p) +{ + QObject *qObject = sv.toQObject(); + p = qobject_cast<SomeQObject*>(qObject); + Q_ASSERT(p); +} + +// Register a QObject-derived class which has Q_DECLARE_METATYPE(Ptr*) +// with the engine using qObjectToScriptValue/scriptValueToQObject as +// conversion functions to make it possible to use for example +// Q_PROPERTY(QMainWindow*). + +template <class SomeQObject> +static void registerQObject(QScriptEngine *engine) +{ + qScriptRegisterMetaType<SomeQObject*>(engine, + qObjectToScriptValue<SomeQObject>, + scriptValueToQObject<SomeQObject>); +} } // namespace Internal } // namespace Scripting |