History

change script timer setup to match HTML dom standard

Stephen Birarda committed 12 years ago

Commit 9dd8c111 parent d9cfaec3 files · +50 −12Browse files

Showing the changes to libraries/script-engine/src/ScriptEngine.cpp (1 of 3 files). Show all

Unified · Split

libraries/script-engine/src/ScriptEngine.cpp+34−6
@@ -105,9 +105,6 @@ bool ScriptEngine::setScriptContents(const QString& scriptContents) { · 104 unmodified lines
105 return true;105 return true;
106}106}
107 107
108Q_SCRIPT_DECLARE_QMETAOBJECT(AudioInjectorOptions, QObject*)
109Q_SCRIPT_DECLARE_QMETAOBJECT(QTimer, QObject*)
110
111void ScriptEngine::init() {108void ScriptEngine::init() {
112 if (_isInitialized) {109 if (_isInitialized) {
113 return; // only initialize once110 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
299void 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
315void 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
326void ScriptEngine::setInterval(const QScriptValue& function, int intervalMS) {
327 setupTimerWithInterval(function, intervalMS, false);
328}
329
330void ScriptEngine::setTimeout(const QScriptValue& function, int timeoutMS) {
331 setupTimerWithInterval(function, timeoutMS, true);
332}
305 333