diff options
Diffstat (limited to 'lib/configuration/configuration.cpp')
-rw-r--r-- | lib/configuration/configuration.cpp | 44 |
1 files changed, 34 insertions, 10 deletions
diff --git a/lib/configuration/configuration.cpp b/lib/configuration/configuration.cpp index bd7700c..34e84af 100644 --- a/lib/configuration/configuration.cpp +++ b/lib/configuration/configuration.cpp @@ -7,11 +7,11 @@ */ #include "configuration.h" -#include <sstream> +#include <QStandardPaths> #include <algorithm> -#include <stdexcept> #include <iostream> -#include <QStandardPaths> +#include <sstream> +#include <stdexcept> static std::unique_ptr<Configuration> s_conf; @@ -21,7 +21,6 @@ inline void strip(std::string &value) value.erase(std::find_if(value.rbegin(), value.rend(), std::bind1st(std::not_equal_to<char>(), ' ')).base(), value.end()); } - Configuration::Configuration() : use_global(true) { @@ -32,9 +31,9 @@ Configuration::Configuration() Configuration::Configuration(std::initializer_list<std::pair<std::string, conf_value_t>> l) noexcept : m_homePath(QStandardPaths::writableLocation(QStandardPaths::HomeLocation).toStdString()) { - for(const auto &i : l) { - insert_or_assign(i.first, i.second); - } + for(const auto &i : l) { + insert_or_assign(i.first, i.second); + } } void Configuration::read(std::basic_istream<char> &input) @@ -69,18 +68,16 @@ void Configuration::read(std::basic_istream<char> &input) } else if(std::holds_alternative<bool>(v)) { at(key) = (value == "true"); } - } } } - void Configuration::move_global(std::unique_ptr<Configuration> &&conf) { s_conf = std::move(conf); } -Configuration* Configuration::instance() +Configuration *Configuration::instance() { return s_conf.get(); } @@ -101,3 +98,30 @@ void setShortcut(QAction *action, const char *name) } #endif } + +std::ostream &operator<<(std::ostream &out, const Configuration &obj) +{ + // unordered_map is, well, unordered, so grab the keys and sort them before printing them + std::vector<std::string> keys; + + if(obj.use_global) { + if(!s_conf) + throw new std::runtime_error("Trying to use default Configuration, but none has been set!"); + + for(const auto &pair : *s_conf) + keys.emplace_back(pair.first); + } else { + for(const auto &pair : obj) + out << pair.first << "\n"; + } + std::sort(keys.begin(), keys.end()); + + for(const auto &key : keys) { + if(obj.use_global) + out << key << "=" << s_conf->value<std::string>(key.c_str()).value() << "\n"; + else + out << key << "=" << obj.value<std::string>(key.c_str()).value() << "\n"; + } + + return out; +} |