openmw-tes3coop/apps/opencs/model/prefs/state.cpp

124 lines
2.8 KiB
C++
Raw Normal View History

#include "state.hpp"
#include <stdexcept>
2015-12-06 11:06:28 +00:00
#include <algorithm>
CSMPrefs::State *CSMPrefs::State::sThis = 0;
void CSMPrefs::State::load()
{
// default settings file
boost::filesystem::path local = mConfigurationManager.getLocalPath() / mConfigFile;
boost::filesystem::path global = mConfigurationManager.getGlobalPath() / mConfigFile;
if (boost::filesystem::exists (local))
mSettings.loadDefault (local.string());
else if (boost::filesystem::exists (global))
mSettings.loadDefault (global.string());
else
throw std::runtime_error ("No default settings file found! Make sure the file \"opencs.ini\" was properly installed.");
// user settings file
boost::filesystem::path user = mConfigurationManager.getUserConfigPath() / mConfigFile;
if (boost::filesystem::exists (user))
mSettings.loadUser (user.string());
}
void CSMPrefs::State::declare()
{
2015-12-08 08:56:42 +00:00
declareCategory ("Windows");
2015-12-08 08:56:42 +00:00
declareCategory ("Records");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("ID Tables");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("ID Dialogues");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("Reports");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("Search & Replace");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("Scripts");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("General Input");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("3D Scene Input");
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
declareCategory ("Tooltips");
2015-12-06 11:06:28 +00:00
}
2015-12-08 08:56:42 +00:00
void CSMPrefs::State::declareCategory (const std::string& key)
2015-12-06 11:06:28 +00:00
{
std::map<std::string, Category>::iterator iter = mCategories.find (key);
if (iter!=mCategories.end())
{
mCurrentCategory = iter;
}
else
{
mCurrentCategory =
2015-12-08 08:56:42 +00:00
mCategories.insert (std::make_pair (key, Category (this, key))).first;
2015-12-06 11:06:28 +00:00
}
}
CSMPrefs::State::State (const Files::ConfigurationManager& configurationManager)
2015-12-06 11:06:28 +00:00
: mConfigFile ("opencs.ini"), mConfigurationManager (configurationManager),
mCurrentCategory (mCategories.end())
{
if (sThis)
throw std::logic_error ("An instance of CSMPRefs::State already exists");
load();
declare();
sThis = this;
}
CSMPrefs::State::~State()
{
sThis = 0;
}
void CSMPrefs::State::save()
{
boost::filesystem::path user = mConfigurationManager.getUserConfigPath() / mConfigFile;
mSettings.saveUser (user.string());
}
2015-12-08 08:56:42 +00:00
CSMPrefs::State::Iterator CSMPrefs::State::begin()
2015-12-06 11:06:28 +00:00
{
2015-12-08 08:56:42 +00:00
return mCategories.begin();
}
2015-12-06 11:06:28 +00:00
2015-12-08 08:56:42 +00:00
CSMPrefs::State::Iterator CSMPrefs::State::end()
{
return mCategories.end();
2015-12-06 11:06:28 +00:00
}
2015-12-08 11:04:45 +00:00
CSMPrefs::Category& CSMPrefs::State::getCategory (const std::string& key)
{
Iterator iter = mCategories.find (key);
if (iter==mCategories.end())
throw std::logic_error ("Invalid user settings category: " + key);
return iter->second;
}
CSMPrefs::State& CSMPrefs::State::get()
{
if (!sThis)
throw std::logic_error ("No instance of CSMPrefs::State");
return *sThis;
}
CSMPrefs::State& CSMPrefs::get()
{
return State::get();
}