summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--library/scriptadapter.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/library/scriptadapter.cpp b/library/scriptadapter.cpp
index 17d8d25..ba196c7 100644
--- a/library/scriptadapter.cpp
+++ b/library/scriptadapter.cpp
@@ -42,6 +42,10 @@
#include <QtCore/QDebug>
#include <QtGui/QMessageBox>
+#ifdef Q_OS_WIN
+#include <windows.h>
+#endif
+
template <typename Enum>
static void scriptToEnum(const QScriptValue &obj, Enum &e)
{
@@ -177,6 +181,30 @@ void ScriptAdapter::messageBox(const QString &text)
mCurrentScript->endBlocking();
}
+static QScriptValue safePrint(QScriptContext *context, QScriptEngine *engine)
+{
+ QString result;
+ for (int i = 0; i < context->argumentCount(); ++i) {
+ if (i != 0)
+ result.append(QLatin1Char(' '));
+ QString s(context->argument(i).toString());
+ if (engine->hasUncaughtException())
+ break;
+ result.append(s);
+ }
+ if (engine->hasUncaughtException())
+ return engine->uncaughtException();
+
+#ifdef Q_OS_WIN
+ if (IsDebuggerPresent())
+ qDebug("%s", qPrintable(result));
+#else
+ qDebug("%s", qPrintable(result));
+#endif
+
+ return engine->undefinedValue();
+}
+
Script::Script(const QString &name, const QString &scriptCode,
ScriptAdapter *adapter)
: QObject(adapter)
@@ -203,6 +231,10 @@ Script::Script(const QString &name, const QString &scriptCode,
mEngine.globalObject().setProperty(functionName, functionValue);
}
+ // override print, the default uses qDebug and that is not allowed in coroutines!
+ QScriptValue printFn = mEngine.newFunction(safePrint, 1);
+ mEngine.globalObject().setProperty("print", printFn);
+
QHashIterator<QString, QObject *> iter(mAdapter->mScriptInterfaces);
while (iter.hasNext()) {
iter.next();