summaryrefslogtreecommitdiffhomepage
path: root/options/group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'options/group.cpp')
-rw-r--r--options/group.cpp118
1 files changed, 43 insertions, 75 deletions
diff --git a/options/group.cpp b/options/group.cpp
index 9a4bd912..d5829008 100644
--- a/options/group.cpp
+++ b/options/group.cpp
@@ -8,107 +8,75 @@
#include "group.hpp"
#include "defs.hpp"
-#include <QStandardPaths>
-#include <QDir>
-
-#include <QDebug>
+#include "globals.hpp"
-namespace options {
+#include <utility>
+#include <algorithm>
-group::group(const QString& name, std::shared_ptr<QSettings> conf) : name(name)
-{
- if (name == "")
- return;
+#include <QFile>
+#include <QDir>
- conf->beginGroup(name);
- for (auto& k_ : conf->childKeys())
- {
- auto tmp = k_.toUtf8();
- QString k(tmp);
- kvs[k] = conf->value(k_);
- }
- conf->endGroup();
-}
+namespace options::detail {
-group::group(const QString& name) : group(name, ini_file())
-{
-}
+using namespace options::globals;
-void group::save() const
+group::group(const QString& name) : name(name)
{
- save_deferred(*ini_file());
-}
+ constexpr unsigned reserved_buckets = 64;
+ kvs.reserve(reserved_buckets);
+ kvs.max_load_factor(0.4375);
-void group::save_deferred(QSettings& s) const
-{
- if (name == "")
+ if (name.isEmpty())
return;
- s.beginGroup(name);
- for (auto& i : kvs)
- s.setValue(i.first, i.second);
- s.endGroup();
+ with_settings_object([&](QSettings& conf) {
+ conf.beginGroup(name);
+ for (auto const& k : conf.childKeys())
+ kvs[k] = conf.value(k);
+ conf.endGroup();
+ });
}
-void group::put(const QString &s, const QVariant &d)
+void group::save() const
{
- kvs[s] = d;
-}
+ if (name.isEmpty())
+ return;
-bool group::contains(const QString &s) const
-{
- return kvs.find(s) != kvs.cend();
+ with_settings_object([&](QSettings& s) {
+ s.beginGroup(name);
+ for (auto const& i : kvs)
+ s.setValue(i.first, i.second);
+ s.endGroup();
+ });
}
-QString group::ini_directory()
+void group::put(const QString& s, QVariant&& d)
{
- const auto dirs = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
- if (dirs.size() == 0)
- return "";
- if (QDir(dirs[0]).mkpath(OPENTRACK_ORG))
- return dirs[0] + "/" OPENTRACK_ORG;
- return "";
+ if (d.isNull())
+ kvs.erase(s);
+ else
+ kvs[s] = d;
}
-QString group::ini_filename()
+void group::put(const QString& s, const QVariant& d)
{
- QSettings settings(OPENTRACK_ORG);
- const QString ret = settings.value(OPENTRACK_CONFIG_FILENAME_KEY, OPENTRACK_DEFAULT_CONFIG).toString();
- if (ret.size() == 0)
- return OPENTRACK_DEFAULT_CONFIG;
- return ret;
+ put(s, QVariant{d});
}
-QString group::ini_pathname()
+bool group::contains(const QString& s) const
{
- const auto dir = ini_directory();
- if (dir == "")
- return "";
- return dir + "/" + ini_filename();
+ const auto it = kvs.find(s);
+ return it != kvs.cend();
}
-QString group::ini_combine(const QString& filename)
+QVariant group::get_variant(const QString& name) const
{
- return ini_directory() + QStringLiteral("/") + filename;
-}
+ auto it = kvs.find(name);
+ if (it != kvs.cend())
+ return it->second;
-QStringList group::ini_list()
-{
- const auto dirname = ini_directory();
- if (dirname == "")
- return QStringList();
- QDir settings_dir(dirname);
- QStringList list = settings_dir.entryList( QStringList { "*.ini" } , QDir::Files, QDir::Name );
- std::sort(list.begin(), list.end());
- return list;
+ return {};
}
-std::shared_ptr<QSettings> group::ini_file()
-{
- const auto pathname = ini_pathname();
- if (pathname != "")
- return std::make_shared<QSettings>(ini_pathname(), QSettings::IniFormat);
- return std::make_shared<QSettings>();
-}
+} // ns options::detail
-}