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 | 105 | return true; |
| 106 | 106 | } |
| 107 | 107 | |
| 108 | −Q_SCRIPT_DECLARE_QMETAOBJECT(AudioInjectorOptions, QObject*) | |
| 109 | −Q_SCRIPT_DECLARE_QMETAOBJECT(QTimer, QObject*) | |
| 110 | − | |
| 111 | 108 | void ScriptEngine::init() { |
| 112 | 109 | if (_isInitialized) { |
| 113 | 110 | return; // only initialize once |
| @@ -134,9 +131,6 @@ void ScriptEngine::init() { · 20 unmodified lines | ||
| 134 | 131 | |
| 135 | 132 | QScriptValue injectionOptionValue = _engine.scriptValueFromQMetaObject<AudioInjectorOptions>(); |
| 136 | 133 | _engine.globalObject().setProperty("AudioInjectionOptions", injectionOptionValue); |
| 137 | − | |
| 138 | − QScriptValue timerValue = _engine.scriptValueFromQMetaObject<QTimer>(); | |
| 139 | − _engine.globalObject().setProperty("Timer", timerValue); | |
| 140 | 134 | |
| 141 | 135 | registerGlobalObject("Script", this); |
| 142 | 136 | registerGlobalObject("Audio", &_audioScriptingInterface); |
| @@ -302,4 +296,38 @@ void ScriptEngine::stop() { · 159 unmodified lines | ||
| 302 | 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 | |