From 0da704eabe961d856f1799f774438f363f2de9ca Mon Sep 17 00:00:00 2001 From: miltolstoy Date: Mon, 8 Jun 2020 12:24:38 +0300 Subject: [PATCH] logic: save last filepicker location (issue #802) (#1024) --- src/lib/settings/ApplicationSettings.cpp | 10 ++++++++ src/lib/settings/ApplicationSettings.h | 3 +++ src/lib_gui/qt/utility/QtFileDialog.cpp | 31 ++++++++++++++++++------ src/lib_gui/qt/utility/QtFileDialog.h | 2 ++ 4 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 124d136e..1be13ccd 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -668,6 +668,16 @@ void ApplicationSettings::setSeenErrorHelpMessage(bool seen) setValue("user/seen_error_help_message", seen); } +FilePath ApplicationSettings::getLastFilepickerLocation() const +{ + return FilePath(getValue("user/last_filepicker_location", L"")); +} + +void ApplicationSettings::setLastFilepickerLocation(const FilePath& path) +{ + setValue("user/last_filepicker_location", path.wstr()); +} + int ApplicationSettings::getPluginPort() const { return getValue("network/plugin_port", 6666); diff --git a/src/lib/settings/ApplicationSettings.h b/src/lib/settings/ApplicationSettings.h index c91eb80c..bb51211d 100644 --- a/src/lib/settings/ApplicationSettings.h +++ b/src/lib/settings/ApplicationSettings.h @@ -178,6 +178,9 @@ public: bool getSeenErrorHelpMessage() const; void setSeenErrorHelpMessage(bool seen); + FilePath getLastFilepickerLocation() const; + void setLastFilepickerLocation(const FilePath& path); + // network int getPluginPort() const; void setPluginPort(const int pluginPort); diff --git a/src/lib_gui/qt/utility/QtFileDialog.cpp b/src/lib_gui/qt/utility/QtFileDialog.cpp index 835c34b0..2a53791e 100644 --- a/src/lib_gui/qt/utility/QtFileDialog.cpp +++ b/src/lib_gui/qt/utility/QtFileDialog.cpp @@ -7,6 +7,7 @@ #include "FilePath.h" #include "QtFilesAndDirectoriesDialog.h" #include "utilityApp.h" +#include "ApplicationSettings.h" QStringList QtFileDialog::getFileNamesAndDirectories(QWidget* parent, const FilePath& path) { @@ -39,6 +40,7 @@ QStringList QtFileDialog::getFileNamesAndDirectories(QWidget* parent, const File list = dialog->selectedFiles(); } + saveFilePickerLocation(FilePath(dialog->directory().path().toStdString())); delete dialog; return list; @@ -46,15 +48,18 @@ QStringList QtFileDialog::getFileNamesAndDirectories(QWidget* parent, const File QString QtFileDialog::getExistingDirectory(QWidget* parent, const QString& caption, const FilePath& dir) { - return QFileDialog::getExistingDirectory( - parent, caption, getDir(QString::fromStdWString(dir.wstr()))); + QString dir_path = QFileDialog::getExistingDirectory(parent, caption, getDir(QString::fromStdWString(dir.wstr()))); + saveFilePickerLocation(FilePath(dir_path.toStdString())); + return dir_path; } QString QtFileDialog::getOpenFileName( QWidget* parent, const QString& caption, const FilePath& dir, const QString& filter) { - return QFileDialog::getOpenFileName( - parent, caption, getDir(QString::fromStdWString(dir.wstr())), filter); + QString file_path = QFileDialog::getOpenFileName(parent, caption, getDir(QString::fromStdWString(dir.wstr())), filter); + FilePath dir_path = FilePath(file_path.toStdString()).getParentDirectory(); + saveFilePickerLocation(dir_path); + return file_path; } QString QtFileDialog::showSaveFileDialog( @@ -107,14 +112,24 @@ QString QtFileDialog::showSaveFileDialog( QString QtFileDialog::getDir(QString dir) { - static bool used = false; + if (!dir.isEmpty()) + { + return dir; + } - if (!used && dir.isEmpty()) + dir = QString::fromStdString(ApplicationSettings::getInstance()->getLastFilepickerLocation().str()); + + if (dir.isEmpty()) // first app launch, settings file absent { dir = QDir::homePath(); } - used = true; - return dir; } + +void QtFileDialog::saveFilePickerLocation(FilePath path) +{ + std::shared_ptr settings = ApplicationSettings::getInstance(); + settings->setLastFilepickerLocation(path); + settings->save(); +} diff --git a/src/lib_gui/qt/utility/QtFileDialog.h b/src/lib_gui/qt/utility/QtFileDialog.h index 58bbcbb3..c8648b34 100644 --- a/src/lib_gui/qt/utility/QtFileDialog.h +++ b/src/lib_gui/qt/utility/QtFileDialog.h @@ -20,6 +20,8 @@ public: private: static QString getDir(QString dir); + + static void saveFilePickerLocation(FilePath path); }; #endif // QT_FILE_DIALOG_H