Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 3 files). Show all
Unified · Split
| @@ -105,9 +105,6 @@ bool ScriptEngine::setScriptContents(const QString& scriptContents) { · 104 unmodified lines | |||
| 105 | return true; | 105 | return true; |
| 106 | } | 106 | } |
| 107 | 107 | ||
| 108 | Q_SCRIPT_DECLARE_QMETAOBJECT(AudioInjectorOptions, QObject*) | ||
| 109 | Q_SCRIPT_DECLARE_QMETAOBJECT(QTimer, QObject*) | ||
| 110 | |||
| 111 | void ScriptEngine::init() { | 108 | void ScriptEngine::init() { |
| 112 | if (_isInitialized) { | 109 | if (_isInitialized) { |
| 113 | return; // only initialize once | 110 | return; // only initialize once |
| @@ -134,9 +131,6 @@ void ScriptEngine::init() { · 20 unmodified lines | |||
| 134 | 131 | ||
| 135 | QScriptValue injectionOptionValue = _engine.scriptValueFromQMetaObject<AudioInjectorOptions>(); | 132 | QScriptValue injectionOptionValue = _engine.scriptValueFromQMetaObject<AudioInjectorOptions>(); |
| 136 | _engine.globalObject().setProperty("AudioInjectionOptions", injectionOptionValue); | 133 | _engine.globalObject().setProperty("AudioInjectionOptions", injectionOptionValue); |
| 137 | |||
| 138 | QScriptValue timerValue = _engine.scriptValueFromQMetaObject<QTimer>(); | ||
| 139 | _engine.globalObject().setProperty("Timer", timerValue); | ||
| 140 | 134 | ||
| 141 | registerGlobalObject("Script", this); | 135 | registerGlobalObject("Script", this); |
| 142 | registerGlobalObject("Audio", &_audioScriptingInterface); | 136 | registerGlobalObject("Audio", &_audioScriptingInterface); |
| @@ -302,4 +296,38 @@ void ScriptEngine::stop() { · 159 unmodified lines | |||
| 302 | _isFinished = true; | 296 | _isFinished = true; |
| 303 | } | 297 | } |
| 304 | 298 | ||
| 299 | void ScriptEngine::timerFired() { | ||
| 300 | QTimer* callingTimer = reinterpret_cast<QTimer*>(sender()); | ||
| 301 | |||
| 302 | // call the associated JS function, if it exists | ||
| 303 | QScriptValue timerFunction = _timerFunctionMap.value(callingTimer); | ||
| 304 | if (timerFunction.isValid()) { | ||
| 305 | timerFunction.call(); | ||
| 306 | } | ||
| 307 | |||
| 308 | if (!callingTimer->isActive()) { | ||
| 309 | // this timer is done, we can kill it | ||
| 310 | qDebug() << "Deleting a single shot timer"; | ||
| 311 | delete callingTimer; | ||
| 312 | } | ||
| 313 | } | ||
| 314 | |||
| 315 | void ScriptEngine::setupTimerWithInterval(const QScriptValue& function, int intervalMS, bool isSingleShot) { | ||
| 316 | // create the timer, add it to the map, and start it | ||
| 317 | QTimer* newTimer = new QTimer(this); | ||
| 318 | connect(newTimer, &QTimer::timeout, this, &ScriptEngine::timerFired); | ||
| 319 | _timerFunctionMap.insert(newTimer, function); | ||
| 320 | |||
| 321 | newTimer->setSingleShot(isSingleShot); | ||
| 322 | |||
| 323 | newTimer->start(intervalMS); | ||
| 324 | } | ||
| 325 | |||
| 326 | void ScriptEngine::setInterval(const QScriptValue& function, int intervalMS) { | ||
| 327 | setupTimerWithInterval(function, intervalMS, false); | ||
| 328 | } | ||
| 329 | |||
| 330 | void ScriptEngine::setTimeout(const QScriptValue& function, int timeoutMS) { | ||
| 331 | setupTimerWithInterval(function, timeoutMS, true); | ||
| 332 | } | ||
| 305 | 333 | ||