From ab14a8bac3368fc2c1005bcc33009b65a0c728f2 Mon Sep 17 00:00:00 2001 From: isanae <14251494+isanae@users.noreply.github.com> Date: Sun, 4 Aug 2019 07:51:12 -0400 Subject: moved recent directories to Settings use global cache variable instead of an instance inside a function --- src/filedialogmemory.cpp | 53 ++++++++---------------------------------------- src/filedialogmemory.h | 8 ++------ src/settings.cpp | 39 +++++++++++++++++++++++++++++++++++ src/settings.h | 3 +++ 4 files changed, 53 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/filedialogmemory.cpp b/src/filedialogmemory.cpp index 48828563..96587ac7 100644 --- a/src/filedialogmemory.cpp +++ b/src/filedialogmemory.cpp @@ -21,46 +21,18 @@ along with Mod Organizer. If not, see . #include "settings.h" #include - -FileDialogMemory::FileDialogMemory() -{ -} - +static std::map g_Cache; void FileDialogMemory::save(Settings& s) { - auto& settings = s.directInterface(); - - settings.remove("recentDirectories"); - settings.beginWriteArray("recentDirectories"); - int index = 0; - for (std::map::const_iterator iter = instance().m_Cache.begin(); - iter != instance().m_Cache.end(); ++iter) { - settings.setArrayIndex(index++); - settings.setValue("name", iter->first); - settings.setValue("directory", iter->second); - } - settings.endArray(); + s.setRecentDirectories(g_Cache); } - void FileDialogMemory::restore(const Settings& s) { - auto& settings = const_cast(s.directInterface()); - - int size = settings.beginReadArray("recentDirectories"); - for (int i = 0; i < size; ++i) { - settings.setArrayIndex(i); - QVariant name = settings.value("name"); - QVariant dir = settings.value("directory"); - if (name.isValid() && dir.isValid()) { - instance().m_Cache.insert(std::make_pair(name.toString(), dir.toString())); - } - } - settings.endArray(); + g_Cache = s.getRecentDirectories(); } - QString FileDialogMemory::getOpenFileName( const QString &dirID, QWidget *parent, const QString &caption, const QString &dir, const QString &filter, QString *selectedFilter, @@ -69,8 +41,8 @@ QString FileDialogMemory::getOpenFileName( QString currentDir = dir; if (currentDir.isEmpty()) { - auto itor = instance().m_Cache.find(dirID); - if (itor != instance().m_Cache.end()) { + auto itor = g_Cache.find(dirID); + if (itor != g_Cache.end()) { currentDir = itor->second; } } @@ -79,7 +51,7 @@ QString FileDialogMemory::getOpenFileName( parent, caption, currentDir, filter, selectedFilter, options); if (!result.isNull()) { - instance().m_Cache[dirID] = QFileInfo(result).path(); + g_Cache[dirID] = QFileInfo(result).path(); } return result; @@ -93,8 +65,8 @@ QString FileDialogMemory::getExistingDirectory( QString currentDir = dir; if (currentDir.isEmpty()) { - auto itor = instance().m_Cache.find(dirID); - if (itor != instance().m_Cache.end()) { + auto itor = g_Cache.find(dirID); + if (itor != g_Cache.end()) { currentDir = itor->second; } } @@ -103,15 +75,8 @@ QString FileDialogMemory::getExistingDirectory( parent, caption, currentDir, options); if (!result.isNull()) { - instance().m_Cache[dirID] = QFileInfo(result).path(); + g_Cache[dirID] = result; } return result; } - - -FileDialogMemory &FileDialogMemory::instance() -{ - static FileDialogMemory instance; - return instance; -} diff --git a/src/filedialogmemory.h b/src/filedialogmemory.h index d214a8e6..8b8a3b76 100644 --- a/src/filedialogmemory.h +++ b/src/filedialogmemory.h @@ -30,6 +30,8 @@ class Settings; class FileDialogMemory { public: + FileDialogMemory() = delete; + static void save(Settings& settings); static void restore(const Settings& settings); @@ -42,12 +44,6 @@ public: const QString &dirID, QWidget *parent = 0, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = QFileDialog::ShowDirsOnly); - -private: - std::map m_Cache; - - FileDialogMemory(); - static FileDialogMemory &instance(); }; #endif // FILEDIALOGMEMORY_H diff --git a/src/settings.cpp b/src/settings.cpp index 44aa56ba..cfc5c1d7 100644 --- a/src/settings.cpp +++ b/src/settings.cpp @@ -764,6 +764,45 @@ void Settings::writePluginBlacklist() m_Settings.endArray(); } +std::map Settings::getRecentDirectories() const +{ + std::map map; + + const int size = m_Settings.beginReadArray("recentDirectories"); + + for (int i=0; i& map) +{ + m_Settings.remove("recentDirectories"); + m_Settings.beginWriteArray("recentDirectories"); + + int index = 0; + for (auto&& p : map) { + m_Settings.setArrayIndex(index); + m_Settings.setValue("name", p.first); + m_Settings.setValue("directory", p.second); + + ++index; + } + + m_Settings.endArray(); +} + GeometrySettings& Settings::geometry() { return m_Geometry; diff --git a/src/settings.h b/src/settings.h index 615cdcbe..5b02ca67 100644 --- a/src/settings.h +++ b/src/settings.h @@ -218,6 +218,9 @@ public: void setPreviousSeparatorColor(const QColor& c) const; void removePreviousSeparatorColor(); + std::map getRecentDirectories() const; + void setRecentDirectories(const std::map& map); + GeometrySettings& geometry(); const GeometrySettings& geometry() const; -- cgit v1.3.1