diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/filedialogmemory.cpp | 53 | ||||
| -rw-r--r-- | src/filedialogmemory.h | 8 | ||||
| -rw-r--r-- | src/settings.cpp | 39 | ||||
| -rw-r--r-- | src/settings.h | 3 |
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; |
