summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-08-04 07:51:12 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-08-04 07:51:12 -0400
commitab14a8bac3368fc2c1005bcc33009b65a0c728f2 (patch)
tree788986ee198047dd62932d72f1c0ea56c491934c /src
parent89415ca5c3903ced870d3bf5698dfa0e53122520 (diff)
moved recent directories to Settings
use global cache variable instead of an instance inside a function
Diffstat (limited to 'src')
-rw-r--r--src/filedialogmemory.cpp53
-rw-r--r--src/filedialogmemory.h8
-rw-r--r--src/settings.cpp39
-rw-r--r--src/settings.h3
4 files changed, 53 insertions, 50 deletions
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 <http://www.gnu.org/licenses/>.
#include "settings.h"
#include <QFileDialog>
-
-FileDialogMemory::FileDialogMemory()
-{
-}
-
+static std::map<QString, QString> g_Cache;
void FileDialogMemory::save(Settings& s)
{
- auto& settings = s.directInterface();
-
- settings.remove("recentDirectories");
- settings.beginWriteArray("recentDirectories");
- int index = 0;
- for (std::map<QString, QString>::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<QSettings&>(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<QString, QString> 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<QString, QString> Settings::getRecentDirectories() const
+{
+ std::map<QString, QString> map;
+
+ const int size = m_Settings.beginReadArray("recentDirectories");
+
+ for (int i=0; i<size; ++i) {
+ m_Settings.setArrayIndex(i);
+
+ const QVariant name = m_Settings.value("name");
+ const QVariant dir = m_Settings.value("directory");
+
+ if (name.isValid() && dir.isValid()) {
+ map.emplace(name.toString(), dir.toString());
+ }
+ }
+
+ m_Settings.endArray();
+
+ return map;
+}
+
+void Settings::setRecentDirectories(const std::map<QString, QString>& 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<QString, QString> getRecentDirectories() const;
+ void setRecentDirectories(const std::map<QString, QString>& map);
+
GeometrySettings& geometry();
const GeometrySettings& geometry() const;