diff options
Diffstat (limited to 'options/group.cpp')
| -rw-r--r-- | options/group.cpp | 118 |
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 -} |
