diff --git a/aegisub/libaegisub/common/option.cpp b/aegisub/libaegisub/common/option.cpp index 071f82209..87f232d37 100644 --- a/aegisub/libaegisub/common/option.cpp +++ b/aegisub/libaegisub/common/option.cpp @@ -37,15 +37,19 @@ namespace agi { -Options::Options(const std::string &file, const std::string& default_config): - config_file(file), config_default(default_config), config_loaded(false) { +Options::Options(const std::string &file, const std::string& default_config, const OptionSetting setting): + config_file(file), config_default(default_config), config_loaded(false), setting(setting) { LOG_D("agi/options") << "New Options object"; std::istringstream stream(default_config); LoadConfig(stream); } Options::~Options() { - Flush(); + + if ((setting & FLUSH_SKIP) != FLUSH_SKIP) { + Flush(); + } + for (OptionValueMap::iterator i = values.begin(); i != values.end(); i++) { delete i->second; } diff --git a/aegisub/libaegisub/include/libaegisub/option.h b/aegisub/libaegisub/include/libaegisub/option.h index e9712c67e..1c4f81387 100644 --- a/aegisub/libaegisub/include/libaegisub/option.h +++ b/aegisub/libaegisub/include/libaegisub/option.h @@ -52,6 +52,14 @@ public: class Options { friend class PutOptionVisitor; +public: + /// Options class settings. + enum OptionSetting { + NONE = 0x000, ///< Do nothing (default) + FLUSH_SKIP = 0x001, ///< Skip writing the config file to disk + }; + +private: /// Internal OptionValueMap OptionValueMap values; @@ -68,6 +76,9 @@ class Options { /// Whether the user (final) config has been loaded bool config_loaded; + /// Settings. + const OptionSetting setting; + /// @brief Load a config file into the Options object. /// @param config Config to load. void LoadConfig(std::istream& stream); @@ -85,7 +96,7 @@ public: /// @brief Constructor /// @param file User config that will be loaded from and written back to. /// @param default_config Default configuration. - Options(const std::string &file, const std::string &default_config); + Options(const std::string &file, const std::string &default_config, const OptionSetting setting=NONE); /// Destructor ~Options();