summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper K. Pedersen <jesper.pedersen@kdab.com>2013-05-07 16:02:32 +0200
committerJesper K. Pedersen <jesper.pedersen@kdab.com>2013-05-13 10:16:44 +0200
commit342a81ec6738d63eed8b12d7678ccd22b1ab1c3e (patch)
tree3a87a6d0ec23554b0aab6ebb82d8a7c0007da5c5
parente7e1385068f93584b57e384d751af96757f678c6 (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.pro3
-rw-r--r--scriptrunner.cpp9
-rw-r--r--scriptwrappers.h36
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