diff --git a/components/settings/settings.cpp b/components/settings/settings.cpp index 500d3c6e6..463230bc7 100644 --- a/components/settings/settings.cpp +++ b/components/settings/settings.cpp @@ -9,6 +9,7 @@ using namespace Settings; Ogre::ConfigFile Manager::mFile = Ogre::ConfigFile(); Ogre::ConfigFile Manager::mDefaultFile = Ogre::ConfigFile(); +SettingCategoryVector Manager::mChangedSettings = SettingCategoryVector(); void Manager::loadUser (const std::string& file) { @@ -77,8 +78,11 @@ void Manager::setString (const std::string& setting, const std::string& category { Ogre::ConfigFile::SettingsMultiMap::iterator i = it.current(); - if ((*i).first == setting) + if ((*i).first == setting && (*i).second != value) + { + mChangedSettings.push_back(std::make_pair(setting, category)); (*i).second = value; + } it.getNext(); } @@ -98,3 +102,10 @@ void Manager::setBool (const std::string& setting, const std::string& category, { setString(setting, category, Ogre::StringConverter::toString(value)); } + +const SettingCategoryVector Manager::apply() +{ + SettingCategoryVector vec = mChangedSettings; + mChangedSettings.clear(); + return vec; +} diff --git a/components/settings/settings.hpp b/components/settings/settings.hpp index 46f8139c4..98fad605e 100644 --- a/components/settings/settings.hpp +++ b/components/settings/settings.hpp @@ -5,6 +5,7 @@ namespace Settings { + typedef std::vector< std::pair > SettingCategoryVector; /// /// \brief Settings management (can change during runtime) @@ -12,9 +13,13 @@ namespace Settings class Manager { public: + static Ogre::ConfigFile mFile; static Ogre::ConfigFile mDefaultFile; + static SettingCategoryVector mChangedSettings; + ///< tracks all the settings that were changed since the last apply() call + void loadDefault (const std::string& file); ///< load file as the default settings (can be overridden by user settings) @@ -27,6 +32,9 @@ namespace Settings void saveUser (const std::string& file); ///< save user settings to file + const SettingCategoryVector apply(); + ///< returns the list of changed settings and then clears it + static const int getInt (const std::string& setting, const std::string& category); static const float getFloat (const std::string& setting, const std::string& category); static const std::string getString (const std::string& setting, const std::string& category);