#ifndef CLIENT_SETTINGS_HH_ #define CLIENT_SETTINGS_HH_ #include #include #include #include #include #include //#include "client/shared.hh" #include "shared/shared.hh" // This settings file just provides functionality for persistent variables, // it has nothing to do with rendering or our window manager. namespace client { namespace settings { using setting_pair_t = std::pair; std::optional maybe_get_setting_str(const setting_pair_t&); void set_setting_str(const setting_pair_t& loc, const std::string& value); std::string get_setting_str(const setting_pair_t& loc, const std::string default_value); // Attempts to read the setting in the file, returning it if it exists. // If either name or category does not exist, writes the default value in // the file under the expected headings. template T get(const setting_pair_t& loc, const T& default_value) { const std::string value = get_setting_str(loc, boost::lexical_cast(default_value)); return boost::lexical_cast(value); } // Attempts to set the setting in the file, overwriting the pre-existing // value or writing a new entry. template void set(const setting_pair_t& loc, const T& value) { set_setting_str(loc, boost::lexical_cast(value)); } void save(); } // namespace settings } // namespace client #endif