From aa03241dd9ba8a52899c3e7167816927d2f6d70c Mon Sep 17 00:00:00 2001 From: Brad Davis Date: Thu, 28 Jan 2016 15:53:04 -0800 Subject: [PATCH] Make all load script dialogs QML and respect previous script location --- interface/src/Application.cpp | 21 ++++++++++++++----- interface/src/Application.h | 4 ++++ interface/src/ui/ScriptEditorWidget.cpp | 4 ++-- interface/src/ui/ScriptEditorWindow.cpp | 7 +++---- libraries/script-engine/src/ScriptEngines.cpp | 14 +------------ libraries/script-engine/src/ScriptEngines.h | 6 ------ 6 files changed, 26 insertions(+), 30 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8e0d46bc81..0bd0031740 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -416,7 +416,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer) : _aboutToQuit(false), _notifiedPacketVersionMismatchThisDomain(false), _maxOctreePPS(maxOctreePacketsPerSecond.get()), - _lastFaceTrackerUpdate(0) + _lastFaceTrackerUpdate(0), + _previousScriptLocation("LastScriptLocation", DESKTOP_LOCATION) { thread()->setObjectName("Main Thread"); @@ -4501,14 +4502,24 @@ void Application::domainSettingsReceived(const QJsonObject& domainSettingsObject } void Application::loadDialog() { - // To be migratd to QML - QString fileNameString = QFileDialog::getOpenFileName( - _glWidget, tr("Open Script"), "", tr("JavaScript Files (*.js)")); - if (!fileNameString.isEmpty()) { + auto scriptEngines = DependencyManager::get(); + QString fileNameString = OffscreenUi::getOpenFileName( + _glWidget, tr("Open Script"), getPreviousScriptLocation(), tr("JavaScript Files (*.js)")); + if (!fileNameString.isEmpty() && QFile(fileNameString).exists()) { + setPreviousScriptLocation(QFileInfo(fileNameString).absolutePath()); DependencyManager::get()->loadScript(fileNameString, true, false, false, true); // Don't load from cache } } +QString Application::getPreviousScriptLocation() { + QString result = _previousScriptLocation.get(); + return result; +} + +void Application::setPreviousScriptLocation(const QString& location) { + _previousScriptLocation.set(location); +} + void Application::loadScriptURLDialog() { auto newScript = OffscreenUi::getText(nullptr, "Open and Run Script", "Script URL"); if (!newScript.isEmpty()) { diff --git a/interface/src/Application.h b/interface/src/Application.h index 71946497d5..e4bfba7492 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -103,6 +103,9 @@ public: void postLambdaEvent(std::function f) override; + QString getPreviousScriptLocation(); + void setPreviousScriptLocation(const QString& previousScriptLocation); + void initializeGL(); void initializeUi(); void paintGL(); @@ -431,6 +434,7 @@ private: Camera _mirrorCamera; // Cammera for mirror view QRect _mirrorViewRect; + Setting::Handle _previousScriptLocation; Setting::Handle _fieldOfView; float _scaleMirror; diff --git a/interface/src/ui/ScriptEditorWidget.cpp b/interface/src/ui/ScriptEditorWidget.cpp index a261c208d7..df66d1e3e1 100644 --- a/interface/src/ui/ScriptEditorWidget.cpp +++ b/interface/src/ui/ScriptEditorWidget.cpp @@ -191,10 +191,10 @@ bool ScriptEditorWidget::save() { bool ScriptEditorWidget::saveAs() { auto scriptEngines = DependencyManager::get(); QString fileName = QFileDialog::getSaveFileName(this, tr("Save script"), - scriptEngines->getPreviousScriptLocation(), + qApp->getPreviousScriptLocation(), tr("JavaScript Files (*.js)")); if (!fileName.isEmpty()) { - scriptEngines->setPreviousScriptLocation(fileName); + qApp->setPreviousScriptLocation(fileName); return saveFile(fileName); } else { return false; diff --git a/interface/src/ui/ScriptEditorWindow.cpp b/interface/src/ui/ScriptEditorWindow.cpp index 919c8b64d3..45a2f3f440 100644 --- a/interface/src/ui/ScriptEditorWindow.cpp +++ b/interface/src/ui/ScriptEditorWindow.cpp @@ -87,12 +87,11 @@ void ScriptEditorWindow::loadScriptMenu(const QString& scriptName) { } void ScriptEditorWindow::loadScriptClicked() { - auto scriptEngines = DependencyManager::get(); QString scriptName = QFileDialog::getOpenFileName(this, tr("Interface"), - scriptEngines->getPreviousScriptLocation(), + qApp->getPreviousScriptLocation(), tr("JavaScript Files (*.js)")); if (!scriptName.isEmpty()) { - scriptEngines->setPreviousScriptLocation(scriptName); + qApp->setPreviousScriptLocation(scriptName); addScriptEditorWidget("loading...")->loadFile(scriptName); updateButtons(); } @@ -100,7 +99,7 @@ void ScriptEditorWindow::loadScriptClicked() { void ScriptEditorWindow::loadMenuAboutToShow() { _loadMenu->clear(); - QStringList runningScripts = DependencyManager::get()->getRunningScripts();; + QStringList runningScripts = DependencyManager::get()->getRunningScripts(); if (runningScripts.count() > 0) { QSignalMapper* signalMapper = new QSignalMapper(this); foreach (const QString& runningScript, runningScripts) { diff --git a/libraries/script-engine/src/ScriptEngines.cpp b/libraries/script-engine/src/ScriptEngines.cpp index 0a0b2de47e..6e8469a93f 100644 --- a/libraries/script-engine/src/ScriptEngines.cpp +++ b/libraries/script-engine/src/ScriptEngines.cpp @@ -34,8 +34,7 @@ ScriptsModel& getScriptsModel() { } ScriptEngines::ScriptEngines() - : _scriptsLocationHandle("scriptsLocation", DESKTOP_LOCATION), - _previousScriptLocation("LastScriptLocation", DESKTOP_LOCATION) + : _scriptsLocationHandle("scriptsLocation", DESKTOP_LOCATION) { _scriptsModelFilter.setSourceModel(&_scriptsModel); _scriptsModelFilter.sort(0, Qt::AscendingOrder); @@ -445,14 +444,3 @@ void ScriptEngines::onScriptEngineError(const QString& scriptFilename) { qCDebug(scriptengine) << "Application::loadScript(), script failed to load..."; emit scriptLoadError(scriptFilename, ""); } - -QString ScriptEngines::getPreviousScriptLocation() const { - return _previousScriptLocation.get(); -} - -void ScriptEngines::setPreviousScriptLocation(const QString& previousScriptLocation) { - if (_previousScriptLocation.get() != previousScriptLocation) { - _previousScriptLocation.set(previousScriptLocation); - emit previousScriptLocationChanged(); - } -} diff --git a/libraries/script-engine/src/ScriptEngines.h b/libraries/script-engine/src/ScriptEngines.h index 97afe9ac57..df60d6ff63 100644 --- a/libraries/script-engine/src/ScriptEngines.h +++ b/libraries/script-engine/src/ScriptEngines.h @@ -30,7 +30,6 @@ class ScriptEngines : public QObject, public Dependency { Q_PROPERTY(ScriptsModel* scriptsModel READ scriptsModel CONSTANT) Q_PROPERTY(ScriptsModelFilter* scriptsModelFilter READ scriptsModelFilter CONSTANT) - Q_PROPERTY(QString previousScriptLocation READ getPreviousScriptLocation WRITE setPreviousScriptLocation NOTIFY previousScriptLocationChanged) public: using ScriptInitializer = std::function; @@ -48,9 +47,6 @@ public: QStringList getRunningScripts(); ScriptEngine* getScriptEngine(const QString& scriptHash); - QString getPreviousScriptLocation() const; - void setPreviousScriptLocation(const QString& previousScriptLocation); - ScriptsModel* scriptsModel() { return &_scriptsModel; }; ScriptsModelFilter* scriptsModelFilter() { return &_scriptsModelFilter; }; @@ -73,7 +69,6 @@ signals: void scriptCountChanged(); void scriptsReloading(); void scriptLoadError(const QString& filename, const QString& error); - void previousScriptLocationChanged(); protected slots: void onScriptFinished(const QString& fileNameString, ScriptEngine* engine); @@ -97,7 +92,6 @@ protected: std::atomic _stoppingAllScripts { false }; std::list _scriptInitializers; mutable Setting::Handle _scriptsLocationHandle; - mutable Setting::Handle _previousScriptLocation; ScriptsModel _scriptsModel; ScriptsModelFilter _scriptsModelFilter; };