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