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
105105 return true;
106106 }
107107
108−Q_SCRIPT_DECLARE_QMETAOBJECT(AudioInjectorOptions, QObject*)
109−Q_SCRIPT_DECLARE_QMETAOBJECT(QTimer, QObject*)
110−
111108 void ScriptEngine::init() {
112109 if (_isInitialized) {
113110 return; // only initialize once
@@ -134,9 +131,6 @@ void ScriptEngine::init() { · 20 unmodified lines
134131
135132 QScriptValue injectionOptionValue = _engine.scriptValueFromQMetaObject<AudioInjectorOptions>();
136133 _engine.globalObject().setProperty("AudioInjectionOptions", injectionOptionValue);
137−
138− QScriptValue timerValue = _engine.scriptValueFromQMetaObject<QTimer>();
139− _engine.globalObject().setProperty("Timer", timerValue);
140134
141135 registerGlobalObject("Script", this);
142136 registerGlobalObject("Audio", &_audioScriptingInterface);
@@ -302,4 +296,38 @@ void ScriptEngine::stop() { · 159 unmodified lines
302296 _isFinished = true;
303297 }
304298
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+}
305333