=== modified file 'src/scripting/StelScriptMgr.cpp' --- old/src/scripting/StelScriptMgr.cpp 2012-01-11 10:50:37 +0000 +++ new/src/scripting/StelScriptMgr.cpp 2012-05-21 15:57:31 +0000 @@ -134,6 +134,10 @@ setScriptRate(1.0); engine.setProcessEventsInterval(10); + + agent = new StelScriptEngineAgent(&engine); + engine.setAgent(agent); + } @@ -363,6 +367,9 @@ { if (engine.isEvaluating()) { + if (agent->getPauseScript()) { + agent->setPauseScript(false); + } QString msg = QString("INFO: asking running script to exit"); emit(scriptDebug(msg)); //qDebug() << msg; @@ -391,6 +398,15 @@ GETSTELMODULE(StelMovementMgr)->setMovementSpeedFactor(core->getTimeRate()); engine.globalObject().setProperty("scriptRateReadOnly", r); + +} + +void StelScriptMgr::pauseScript() { + agent->setPauseScript(true); +} + +void StelScriptMgr::resumeScript() { + agent->setPauseScript(false); } double StelScriptMgr::getScriptRate() @@ -487,3 +503,20 @@ return true; } +StelScriptEngineAgent::StelScriptEngineAgent(QScriptEngine *engine) + : QScriptEngineAgent(engine) +{ + isPaused = false; +} + +void StelScriptEngineAgent::positionChange(qint64 scriptId, int lineNumber, int columnNumber) +{ + Q_UNUSED(scriptId); + Q_UNUSED(lineNumber); + Q_UNUSED(columnNumber); + + while (isPaused) { + // TODO : sleep for 'processEventsInterval' time + QCoreApplication::processEvents(); + } +} === modified file 'src/scripting/StelScriptMgr.hpp' --- old/src/scripting/StelScriptMgr.hpp 2012-01-11 10:50:37 +0000 +++ new/src/scripting/StelScriptMgr.hpp 2012-05-21 15:50:14 +0000 @@ -26,8 +26,10 @@ #include #include #include +#include class StelMainScriptAPI; +class StelScriptEngineAgent; #ifdef ENABLE_SCRIPT_CONSOLE class ScriptConsole; @@ -119,10 +121,15 @@ //! StelMainScriptAPI can explicitly send information to the ScriptConsole void debug(const QString& msg); + //! Pause a running script. + void pauseScript(); + + //! Resume a paused script. + void resumeScript(); + private slots: //! Called at the end of the running threa void scriptEnded(); - signals: //! Notification when a script starts running void scriptRunning(); @@ -156,6 +163,25 @@ QString scriptFileName; + //Script engine agent + StelScriptEngineAgent *agent; + +}; + +class StelScriptEngineAgent : public QScriptEngineAgent +{ +public: + explicit StelScriptEngineAgent(QScriptEngine *engine); + virtual ~StelScriptEngineAgent() {} + + void setPauseScript(bool pause) { isPaused=pause; } + bool getPauseScript() { return isPaused; } + + void positionChange(qint64 scriptId, int lineNumber, int columnNumber); + +private: + bool isPaused; + }; #endif // _STELSCRIPTMGR_HPP_