summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2012-10-08 14:22:49 +0300
committerAndrei Karas <akaras@inbox.ru>2012-10-08 14:22:49 +0300
commit0c2def29e3bf56a686305ba7385de45214ec86a4 (patch)
tree6e310b27035d5dd5dc9d1ada3adf1f724236b3c1
parentb8dbda756100d2ad6c01ddac0247296a74c28742 (diff)
downloadManaVerse-0c2def29e3bf56a686305ba7385de45214ec86a4.tar.gz
ManaVerse-0c2def29e3bf56a686305ba7385de45214ec86a4.tar.bz2
ManaVerse-0c2def29e3bf56a686305ba7385de45214ec86a4.tar.xz
ManaVerse-0c2def29e3bf56a686305ba7385de45214ec86a4.zip
Allow reinit configuration files.
-rw-r--r--src/configuration.cpp27
-rw-r--r--src/configuration.h4
-rw-r--r--src/graphicsmanager.cpp1
3 files changed, 30 insertions, 2 deletions
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 3b8aa6a92..a9c4037e9 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -317,9 +317,10 @@ ConfigurationObject::~ConfigurationObject()
Configuration::Configuration() :
ConfigurationObject(),
- mConfigPath(""),
+ mConfigPath(),
mDefaultsData(nullptr),
- mDirectory("")
+ mDirectory(),
+ mUseResManager(false)
{
#ifdef DEBUG_CONFIG
mLogKeys = false;
@@ -690,6 +691,8 @@ void Configuration::init(const std::string &filename, const bool useResManager)
{
mDefaultsData = nullptr;
XML::Document doc(filename, useResManager);
+ mFilename = filename;
+ mUseResManager = useResManager;
if (useResManager)
{
@@ -721,6 +724,26 @@ void Configuration::init(const std::string &filename, const bool useResManager)
initFromXML(rootNode);
}
+void Configuration::reInit()
+{
+ XML::Document doc(mFilename, mUseResManager);
+ if (!doc.rootNode())
+ {
+ logger->log("Couldn't open configuration file: %s", mFilename.c_str());
+ return;
+ }
+
+ const XmlNodePtr rootNode = doc.rootNode();
+
+ if (!rootNode || !xmlNameEqual(rootNode, "configuration"))
+ {
+ logger->log("Warning: No configuration file (%s)", mFilename.c_str());
+ return;
+ }
+
+ initFromXML(rootNode);
+}
+
void ConfigurationObject::writeToXML(const XmlTextWriterPtr writer)
{
for (Options::const_iterator i = mOptions.begin(), i_end = mOptions.end();
diff --git a/src/configuration.h b/src/configuration.h
index 5a843e468..46ba4165a 100644
--- a/src/configuration.h
+++ b/src/configuration.h
@@ -238,6 +238,8 @@ class Configuration final : public ConfigurationObject
void init(const std::string &filename,
const bool useResManager = false);
+ void reInit();
+
/**
* Set the default values for each keys.
*
@@ -334,6 +336,8 @@ class Configuration final : public ConfigurationObject
DefaultsData *mDefaultsData; /**< Defaults of value
for a given key */
std::string mDirectory;
+ std::string mFilename;
+ bool mUseResManager;
};
extern Configuration branding;
diff --git a/src/graphicsmanager.cpp b/src/graphicsmanager.cpp
index 7b56498dc..8e41f4666 100644
--- a/src/graphicsmanager.cpp
+++ b/src/graphicsmanager.cpp
@@ -168,6 +168,7 @@ bool GraphicsManager::detectGraphics()
config.setValue("opengl", mode);
config.setValue("videoconfigured", true);
+ config.write();
logger->log("detection complete");
return true;