From d59bedfa96a1efaab3011ad18697ae71788f5a0f Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Tue, 13 May 2014 22:25:08 -0700 Subject: [PATCH] Fix running scripts not properly updated when done programmatically Add a slot to Application to receive ScriptEngine::finished signals. Notify the Running scripts widget of stopped scripts so it can properly move them to the recent scripts list. --- interface/src/Application.cpp | 16 ++++++++++------ interface/src/Application.h | 1 + interface/src/ui/RunningScriptsWidget.cpp | 9 ++++----- interface/src/ui/RunningScriptsWidget.h | 1 + 4 files changed, 16 insertions(+), 11 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8858b6d324..ab8d69c319 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3405,6 +3405,8 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript scriptEngine->registerGlobalObject("Clipboard", clipboardScriptable); connect(scriptEngine, SIGNAL(finished(const QString&)), clipboardScriptable, SLOT(deleteLater())); + connect(scriptEngine, SIGNAL(finished(const QString&)), this, SLOT(scriptFinished(const QString&))); + scriptEngine->registerGlobalObject("Overlays", &_overlays); QScriptValue windowValue = scriptEngine->registerGlobalObject("Window", WindowScriptingInterface::getInstance()); @@ -3447,6 +3449,14 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript return scriptEngine; } +void Application::scriptFinished(const QString &scriptName) { + if (_scriptEnginesHash.remove(scriptName)) { + _runningScriptsWidget->scriptStopped(scriptName); + _runningScriptsWidget->setRunningScripts(getRunningScripts()); + bumpSettings(); + } +} + void Application::stopAllScripts(bool restart) { // stops all current running scripts for (QHash::const_iterator it = _scriptEnginesHash.constBegin(); @@ -3457,18 +3467,12 @@ void Application::stopAllScripts(bool restart) { it.value()->stop(); qDebug() << "stopping script..." << it.key(); } - _scriptEnginesHash.clear(); - _runningScriptsWidget->setRunningScripts(getRunningScripts()); - bumpSettings(); } void Application::stopScript(const QString &scriptName) { if (_scriptEnginesHash.contains(scriptName)) { _scriptEnginesHash.value(scriptName)->stop(); qDebug() << "stopping script..." << scriptName; - _scriptEnginesHash.remove(scriptName); - _runningScriptsWidget->setRunningScripts(getRunningScripts()); - bumpSettings(); } } diff --git a/interface/src/Application.h b/interface/src/Application.h index 67cf7dad44..174ac61c06 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -292,6 +292,7 @@ public slots: void toggleLogDialog(); void initAvatarAndViewFrustum(); ScriptEngine* loadScript(const QString& fileNameString, bool loadScriptFromEditor = false); + void scriptFinished(const QString& scriptName); void stopAllScripts(bool restart = false); void stopScript(const QString& scriptName); void reloadAllScripts(); diff --git a/interface/src/ui/RunningScriptsWidget.cpp b/interface/src/ui/RunningScriptsWidget.cpp index 61241f71fb..328974dc9d 100644 --- a/interface/src/ui/RunningScriptsWidget.cpp +++ b/interface/src/ui/RunningScriptsWidget.cpp @@ -157,6 +157,10 @@ void RunningScriptsWidget::paintEvent(QPaintEvent* event) { painter.end(); } +void RunningScriptsWidget::scriptStopped(const QString& scriptName) { + _recentlyLoadedScripts.prepend(scriptName); +} + void RunningScriptsWidget::stopScript(int row, int column) { if (column == 1) { // make sure the user has clicked on the close icon _lastStoppedScript = _runningScriptsTable->item(row, 0)->toolTip(); @@ -169,11 +173,6 @@ void RunningScriptsWidget::loadScript(int row, int column) { } void RunningScriptsWidget::allScriptsStopped() { - QStringList list = Application::getInstance()->getRunningScripts(); - for (int i = 0; i < list.size(); ++i) { - _recentlyLoadedScripts.prepend(list.at(i)); - } - Application::getInstance()->stopAllScripts(); } diff --git a/interface/src/ui/RunningScriptsWidget.h b/interface/src/ui/RunningScriptsWidget.h index ad310c4ed4..14a1f4a58e 100644 --- a/interface/src/ui/RunningScriptsWidget.h +++ b/interface/src/ui/RunningScriptsWidget.h @@ -36,6 +36,7 @@ protected: virtual void paintEvent(QPaintEvent* event); public slots: + void scriptStopped(const QString& scriptName); void setBoundary(const QRect& rect); private slots: