summaryrefslogtreecommitdiffstats
path: root/src/qscxml.cpp
diff options
context:
space:
mode:
authorNo'am Rosenthal <noam.rosenthal@nokia.com>2009-07-12 18:32:08 -0700
committerNo'am Rosenthal <noam.rosenthal@nokia.com>2009-07-12 18:32:08 -0700
commit084833d82e280f505088a278250bfb395a3a67ef (patch)
treed1d204a8df16e4037fc6187f67a38ccea7f29ca6 /src/qscxml.cpp
parent6a9f40cb8ef0eb692aec1024002027fa25414e4b (diff)
Enabled using SCXML with an existing QScriptEngine
Diffstat (limited to 'src/qscxml.cpp')
-rw-r--r--src/qscxml.cpp82
1 files changed, 53 insertions, 29 deletions
diff --git a/src/qscxml.cpp b/src/qscxml.cpp
index 5e3aff7..c6cf8da 100644
--- a/src/qscxml.cpp
+++ b/src/qscxml.cpp
@@ -166,6 +166,8 @@ class QScxmlPrivate
QString anchorType;
};
+ void initScriptEngine(QScxml* thiz);
+
QScriptEngine* scriptEng;
QList<QScxmlInvokerFactory*> invokerFactories;
@@ -243,7 +245,7 @@ class QScxmlSignalReceiver : public QObject
};
struct QScxmlFunctions
{
-static QScriptValue connectSignalToEvent(QScriptContext* context, QScriptEngine* engine)
+static QScriptValue connectSignalToEvent(QScriptContext* context, QScriptEngine*)
{
QScxml* scxml = qobject_cast<QScxml*>(context->thisObject().toQObject());
if (scxml) {
@@ -308,7 +310,7 @@ static QScriptValue deepCopy(QScriptContext *context, QScriptEngine *)
return _q_deepCopy(context->argument(0));
}
-static QScriptValue postEvent(QScriptContext *context, QScriptEngine *engine)
+static QScriptValue postEvent(QScriptContext *context, QScriptEngine *)
{
QScxml* scxml = qobject_cast<QScxml*>(context->thisObject().toQObject());
if (scxml) {
@@ -437,6 +439,27 @@ static QScriptValue isInState(QScriptContext *context, QScriptEngine *engine)
}
};
+
+void QScxmlPrivate::initScriptEngine(QScxml* thiz)
+{
+ QScriptValue glob = scriptEng->globalObject();
+ QScriptValue scxmlObj = scriptEng->newQObject(thiz);
+ glob.setProperty("In",scriptEng->newFunction(QScxmlFunctions::isInState));
+// glob.setProperty("_rcvSig",scriptEng->newFunction(QScxmlFunctions::receiveSignal));
+ scxmlObj.setProperty("print",scriptEng->newFunction(QScxmlFunctions::script_print));
+ scxmlObj.setProperty("postEvent",scriptEng->newFunction(QScxmlFunctions::postEvent));
+ scxmlObj.setProperty("invoke",scriptEng->newFunction(QScxmlFunctions::invoke));
+ scxmlObj.setProperty("cssTime",scriptEng->newFunction(QScxmlFunctions::cssTime));
+ scxmlObj.setProperty("clone",scriptEng->newFunction(QScxmlFunctions::deepCopy));
+ scxmlObj.setProperty("setTimeout",scriptEng->newFunction(QScxmlFunctions::setTimeout));
+ scxmlObj.setProperty("clearTimeout",scriptEng->newFunction(QScxmlFunctions::clearTimeout));
+ scxmlObj.setProperty("connectSignalToEvent",scriptEng->newFunction(QScxmlFunctions::connectSignalToEvent));
+ QScriptValue dmObj = scriptEng->newObject();
+ glob.setProperty("_data",scriptEng->newObject());
+ glob.setProperty("_global",scriptEng->globalObject());
+ glob.setProperty("scxml",scxmlObj);
+}
+
/*!
\class QScxmlEvent
\brief The QScxmlEvent class stands for a general named event with a list of parameter names and parameter values.
@@ -700,44 +723,45 @@ class QScxmlBindingInvoker : public QScxmlInvoker
This signal is emitted when external event \a name is handled in the state machine.
*/
-/*!
- Creates a new QScxml object, with parent \a parent.
- */
-
-QScxml::QScxml(QObject* parent)
- : QStateMachine(parent)
+void QScxml::init()
{
- pvt = new QScxmlPrivate;
- pvt->scriptEng = new QScriptEngine(this);
- QScriptValue glob = pvt->scriptEng->globalObject();
- QScriptValue scxmlObj = pvt->scriptEng->newQObject(this);
- glob.setProperty("In",pvt->scriptEng->newFunction(QScxmlFunctions::isInState));
-// glob.setProperty("_rcvSig",pvt->scriptEng->newFunction(QScxmlFunctions::receiveSignal));
- scxmlObj.setProperty("print",pvt->scriptEng->newFunction(QScxmlFunctions::script_print));
- scxmlObj.setProperty("postEvent",pvt->scriptEng->newFunction(QScxmlFunctions::postEvent));
- scxmlObj.setProperty("invoke",pvt->scriptEng->newFunction(QScxmlFunctions::invoke));
- scxmlObj.setProperty("cssTime",pvt->scriptEng->newFunction(QScxmlFunctions::cssTime));
- scxmlObj.setProperty("clone",pvt->scriptEng->newFunction(QScxmlFunctions::deepCopy));
- scxmlObj.setProperty("setTimeout",pvt->scriptEng->newFunction(QScxmlFunctions::setTimeout));
- scxmlObj.setProperty("clearTimeout",pvt->scriptEng->newFunction(QScxmlFunctions::clearTimeout));
- scxmlObj.setProperty("connectSignalToEvent",pvt->scriptEng->newFunction(QScxmlFunctions::connectSignalToEvent));
- QScriptValue dmObj = pvt->scriptEng->newObject();
- glob.setProperty("_data",pvt->scriptEng->newObject());
- glob.setProperty("_global",pvt->scriptEng->globalObject());
- glob.setProperty("scxml",scxmlObj);
static QScxmlAutoInvokerFactory<QScxmlDefaultInvoker> _s_defaultInvokerFactory;
static QScxmlAutoInvokerFactory<QScxmlBindingInvoker> _s_bindingInvokerFactory;
registerInvokerFactory(&_s_defaultInvokerFactory);
registerInvokerFactory(&_s_bindingInvokerFactory);
connect(this,SIGNAL(started()),this,SLOT(registerSession()));
connect(this,SIGNAL(stopped()),this,SLOT(unregisterSession()));
+ pvt->initScriptEngine(this);
#ifdef QT_GUI_LIB
- static QScxmlAutoInvokerFactory<QScxmlMenuInvoker> _s_msgboxInvokerFactory;
- static QScxmlAutoInvokerFactory<QScxmlMessageBoxInvoker> _s_menuInvokerFactory;
+ static QScxmlAutoInvokerFactory<QScxmlMenuInvoker> _s_menuInvokerFactory;
+ static QScxmlAutoInvokerFactory<QScxmlMessageBoxInvoker> _s_msgboxInvokerFactory;
registerInvokerFactory(&_s_msgboxInvokerFactory);
registerInvokerFactory(&_s_menuInvokerFactory);
#endif
}
+/*!
+ Creates a new QScxml object, with parent \a parent.
+ */
+
+QScxml::QScxml(QObject* parent)
+ : QStateMachine(parent)
+{
+ pvt = new QScxmlPrivate;
+ pvt->scriptEng = new QScriptEngine(this);
+ init();
+
+}
+/*!
+ Creates a new QScxml object, with parent \a parent. The state machine will operate on script-engine \a eng.
+ */
+
+QScxml::QScxml(QScriptEngine* eng, QObject* parent)
+ : QStateMachine(parent)
+{
+ pvt = new QScxmlPrivate;
+ pvt->scriptEng = eng;
+ init();
+}
/*! \internal */
void QScxml::beginSelectTransitions(QEvent* ev)
@@ -824,7 +848,7 @@ static QString _q_configToString (QAbstractState* from,int level, const QSet<QAb
/*! \internal */
-void QScxml::endMicrostep(QEvent* e)
+void QScxml::endMicrostep(QEvent*)
{
scriptEngine()->globalObject().setProperty("_event",QScriptValue());
for (QHash<QString,QScxmlPrivate::AnchorSnapshot>::iterator