From df14e1e6e4c7402cb9f4ae5009b863673b0796fe Mon Sep 17 00:00:00 2001 From: Thijs Wenker Date: Tue, 29 Apr 2014 21:51:20 +0200 Subject: [PATCH] Use same load/save dialog behavior as in main application for ScriptEditor, this will keep track of the last directory that was used to load a script. --- interface/src/Application.cpp | 23 ++++++++++++++++------- interface/src/Application.h | 3 +++ interface/src/ui/ScriptEditorWidget.cpp | 11 +++++++++-- interface/src/ui/ScriptEditorWindow.cpp | 5 ++++- 4 files changed, 32 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 558ba31d80..228e40fdce 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3438,9 +3438,9 @@ ScriptEngine* Application::loadScript(const QString& scriptName, bool loadScript return scriptEngine; } -void Application::loadDialog() { +QString Application::getPreviousScriptLocation() { QString suggestedName; - + if (_previousScriptLocation.isEmpty()) { QString desktopLocation = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); // Temporary fix to Qt bug: http://stackoverflow.com/questions/16194475 @@ -3450,14 +3450,23 @@ void Application::loadDialog() { } else { suggestedName = _previousScriptLocation; } + + return suggestedName; +} - QString fileNameString = QFileDialog::getOpenFileName(_glWidget, tr("Open Script"), suggestedName, +void Application::setPreviousScriptLocation(QString previousScriptLocation) { + _previousScriptLocation = previousScriptLocation; + QMutexLocker locker(&_settingsMutex); + _settings->setValue("LastScriptLocation", _previousScriptLocation); +} + +void Application::loadDialog() { + + QString fileNameString = QFileDialog::getOpenFileName(_glWidget, tr("Open Script"), + getPreviousScriptLocation(), tr("JavaScript Files (*.js)")); if (!fileNameString.isEmpty()) { - _previousScriptLocation = fileNameString; - QMutexLocker locker(&_settingsMutex); - _settings->setValue("LastScriptLocation", _previousScriptLocation); - + setPreviousScriptLocation(fileNameString); loadScript(fileNameString); } } diff --git a/interface/src/Application.h b/interface/src/Application.h index 325770a8df..8929c06134 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -124,6 +124,9 @@ public: void restoreSizeAndPosition(); ScriptEngine* loadScript(const QString& fileNameString, bool loadScriptFromEditor = false); void loadScripts(); + QString getPreviousScriptLocation(); + void setPreviousScriptLocation(QString previousScriptLocation); + void storeSizeAndPosition(); void clearScriptsBeforeRunning(); void saveScripts(); diff --git a/interface/src/ui/ScriptEditorWidget.cpp b/interface/src/ui/ScriptEditorWidget.cpp index 3f9b0137ef..95d60e3b4f 100644 --- a/interface/src/ui/ScriptEditorWidget.cpp +++ b/interface/src/ui/ScriptEditorWidget.cpp @@ -128,8 +128,15 @@ bool ScriptEditorWidget::save() { } bool ScriptEditorWidget::saveAs() { - QString fileName = QFileDialog::getSaveFileName(this, tr("Save script"), QString(), tr("Javascript (*.js)")); - return !fileName.isEmpty() ? saveFile(fileName) : false; + QString fileName = QFileDialog::getSaveFileName(this, tr("Save script"), + Application::getInstance()->getPreviousScriptLocation(), + tr("JavaScript Files (*.js)")); + if (!fileName.isEmpty()) { + Application::getInstance()->setPreviousScriptLocation(fileName); + return saveFile(fileName); + } else { + return false; + } } void ScriptEditorWidget::setScriptFile(const QString& scriptPath) { diff --git a/interface/src/ui/ScriptEditorWindow.cpp b/interface/src/ui/ScriptEditorWindow.cpp index 0c34959353..d118f30d0b 100644 --- a/interface/src/ui/ScriptEditorWindow.cpp +++ b/interface/src/ui/ScriptEditorWindow.cpp @@ -73,8 +73,11 @@ void ScriptEditorWindow::loadScriptMenu(const QString& scriptName) { } void ScriptEditorWindow::loadScriptClicked() { - QString scriptName = QFileDialog::getOpenFileName(this, tr("Interface"), QString(), tr("Javascript (*.js)")); + QString scriptName = QFileDialog::getOpenFileName(this, tr("Interface"), + Application::getInstance()->getPreviousScriptLocation(), + tr("JavaScript Files (*.js)")); if (!scriptName.isEmpty()) { + Application::getInstance()->setPreviousScriptLocation(scriptName); addScriptEditorWidget("loading...")->loadFile(scriptName); updateButtons(); }