CProfile -> CConfigFile

master
krzys-h 2015-07-19 15:30:30 +02:00
parent 644f5b4d7f
commit 02c24fbf27
18 changed files with 258 additions and 292 deletions

View File

@ -86,7 +86,7 @@ set(BASE_SOURCES
common/logger.cpp
common/misc.cpp
common/pathman.cpp
common/profile.cpp
common/config_file.cpp
common/regex_utils.cpp
common/resources/inputstream.cpp
common/resources/inputstreambuffer.cpp

View File

@ -102,7 +102,7 @@ struct ApplicationPrivate
CApplication::CApplication()
: m_private(MakeUnique<ApplicationPrivate>())
, m_eventQueue(MakeUnique<CEventQueue>())
, m_profile(MakeUnique<CProfile>())
, m_configFile(MakeUnique<CConfigFile>())
, m_input(MakeUnique<CInput>())
, m_pathManager(MakeUnique<CPathManager>())
{
@ -395,13 +395,13 @@ bool CApplication::Create()
}
m_pathManager->InitPaths();
if (!GetProfile().Init())
if (!GetConfigFile().Init())
{
GetLogger()->Warn("Config not found. Default values will be used!\n");
defaultValues = true;
}
if (GetProfile().GetStringProperty("Language", "Lang", path)) {
if (GetConfigFile().GetStringProperty("Language", "Lang", path)) {
Language language;
if (ParseLanguage(path, language)) {
m_language = language;
@ -478,7 +478,7 @@ bool CApplication::Create()
std::vector<Math::IntPoint> modes;
GetVideoResolutionList(modes, true, true);
if ( GetProfile().GetStringProperty("Setup", "Resolution", sValue) && !m_resolutionOverride )
if ( GetConfigFile().GetStringProperty("Setup", "Resolution", sValue) && !m_resolutionOverride )
{
std::istringstream resolution(sValue);
std::string ws, hs;
@ -499,7 +499,7 @@ bool CApplication::Create()
}
}
if ( GetProfile().GetIntProperty("Setup", "Fullscreen", iValue) && !m_resolutionOverride )
if ( GetConfigFile().GetIntProperty("Setup", "Fullscreen", iValue) && !m_resolutionOverride )
{
m_deviceConfig.fullScreen = (iValue == 1);
}

View File

@ -27,7 +27,7 @@
#include "common/event.h"
#include "common/global.h"
#include "common/singleton.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "graphics/core/device.h"
#include "graphics/engine/engine.h"
@ -368,7 +368,7 @@ protected:
//! Game controller - game engine and UI
std::unique_ptr<CController> m_controller;
//! Profile (INI) reader/writer
std::unique_ptr<CProfile> m_profile;
std::unique_ptr<CConfigFile> m_configFile;
//! Input manager
std::unique_ptr<CInput> m_input;
//! Path manager

View File

@ -26,17 +26,17 @@
CController::CController(CApplication* app, bool loadProfile)
CController::CController(CApplication* app, bool configLoaded)
: m_app(app)
, m_main(new CRobotMain(this))
, m_dialog(new Ui::CMainDialog())
{
m_main->Create(loadProfile);
m_main->Create();
m_dialog->Create();
if (!loadProfile)
m_main->CreateIni();
if (configLoaded)
m_main->LoadConfigFile();
else
m_main->LoadIni();
m_main->CreateConfigFile();
}
CController::~CController()

View File

@ -43,7 +43,7 @@ class CMainDialog;
class CController
{
public:
CController(CApplication* app, bool loadProfile = true);
CController(CApplication* app, bool configLoaded = true);
~CController();
//! Return CApplication instance

View File

@ -21,7 +21,7 @@
#include "common/logger.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "common/restext.h"
#include "graphics/engine/engine.h"
@ -314,17 +314,17 @@ void CInput::SaveKeyBindings()
key.str("");
key << b.primary << " " << b.secondary;
CProfile::GetInstancePointer()->SetStringProperty("Keybindings", keyTable[static_cast<InputSlot>(i)], key.str());
CConfigFile::GetInstancePointer()->SetStringProperty("Keybindings", keyTable[static_cast<InputSlot>(i)], key.str());
}
for (int i = 0; i < JOY_AXIS_SLOT_MAX; i++)
{
JoyAxisBinding b = GetJoyAxisBinding(static_cast<JoyAxisSlot>(i));
CProfile::GetInstancePointer()->SetIntProperty("Setup", "JoystickAxisBinding"+boost::lexical_cast<std::string>(i), b.axis);
CProfile::GetInstancePointer()->SetIntProperty("Setup", "JoystickAxisInvert"+boost::lexical_cast<std::string>(i), b.invert);
CConfigFile::GetInstancePointer()->SetIntProperty("Setup", "JoystickAxisBinding"+boost::lexical_cast<std::string>(i), b.axis);
CConfigFile::GetInstancePointer()->SetIntProperty("Setup", "JoystickAxisInvert"+boost::lexical_cast<std::string>(i), b.invert);
}
CProfile::GetInstancePointer()->SetFloatProperty("Setup", "JoystickDeadzone", GetJoystickDeadzone());
CConfigFile::GetInstancePointer()->SetFloatProperty("Setup", "JoystickDeadzone", GetJoystickDeadzone());
}
void CInput::LoadKeyBindings()
@ -335,7 +335,7 @@ void CInput::LoadKeyBindings()
{
InputBinding b;
if (!CProfile::GetInstancePointer()->GetStringProperty("Keybindings", keyTable[static_cast<InputSlot>(i)], keys))
if (!CConfigFile::GetInstancePointer()->GetStringProperty("Keybindings", keyTable[static_cast<InputSlot>(i)], keys))
continue;
skey.clear();
skey.str(keys);
@ -350,17 +350,17 @@ void CInput::LoadKeyBindings()
{
JoyAxisBinding b;
if (!CProfile::GetInstancePointer()->GetIntProperty("Setup", "JoystickAxisBinding"+boost::lexical_cast<std::string>(i), b.axis))
if (!CConfigFile::GetInstancePointer()->GetIntProperty("Setup", "JoystickAxisBinding"+boost::lexical_cast<std::string>(i), b.axis))
continue;
int x = 0;
CProfile::GetInstancePointer()->GetIntProperty("Setup", "JoystickAxisInvert"+boost::lexical_cast<std::string>(i), x); // If doesn't exist, use default (0)
CConfigFile::GetInstancePointer()->GetIntProperty("Setup", "JoystickAxisInvert"+boost::lexical_cast<std::string>(i), x); // If doesn't exist, use default (0)
b.invert = (x != 0);
SetJoyAxisBinding(static_cast<JoyAxisSlot>(i), b);
}
float deadzone;
if (CProfile::GetInstancePointer()->GetFloatProperty("Setup", "JoystickDeadzone", deadzone))
if (CConfigFile::GetInstancePointer()->GetFloatProperty("Setup", "JoystickDeadzone", deadzone))
SetJoystickDeadzone(deadzone);
}

View File

@ -18,7 +18,7 @@
*/
#include "common/profile.h"
#include "common/config_file.h"
#include "common/resources/inputstream.h"
#include "common/resources/outputstream.h"
@ -33,28 +33,27 @@
#include <boost/regex.hpp>
template<> CProfile* CSingleton<CProfile>::m_instance = nullptr;
template<> CConfigFile* CSingleton<CConfigFile>::m_instance = nullptr;
namespace bp = boost::property_tree;
CProfile::CProfile()
: m_profileNeedSave(false)
, m_useCurrentDirectory(false)
CConfigFile::CConfigFile()
: m_useCurrentDirectory(false)
, m_loaded(false)
{
}
CProfile::~CProfile()
CConfigFile::~CConfigFile()
{
Save();
}
void CProfile::SetUseCurrentDirectory(bool useCurrentDirectory)
void CConfigFile::SetUseCurrentDirectory(bool useCurrentDirectory)
{
m_useCurrentDirectory = useCurrentDirectory;
}
bool CProfile::Init()
bool CConfigFile::Init()
{
try
{
@ -76,6 +75,7 @@ bool CProfile::Init()
if (good)
{
bp::ini_parser::read_ini(*stream, m_propertyTree);
m_loaded = true;
}
else
{
@ -91,63 +91,60 @@ bool CProfile::Init()
return true;
}
bool CProfile::Save()
bool CConfigFile::Save()
{
if (m_profileNeedSave)
try
{
try
std::unique_ptr<std::ostream> stream;
bool good;
if (m_useCurrentDirectory)
{
std::unique_ptr<std::ostream> stream;
bool good;
if (m_useCurrentDirectory)
{
std::ofstream* outputStream = new std::ofstream("./colobot.ini");
stream = std::unique_ptr<std::ostream>(outputStream);
good = outputStream->good();
}
else
{
COutputStream* outputStream = new COutputStream("colobot.ini");
stream = std::unique_ptr<std::ostream>(outputStream);
good = outputStream->is_open();
}
if (good)
{
bp::ini_parser::write_ini(*stream, m_propertyTree);
}
else
{
GetLogger()->Error("Error on storing profile: failed to open file\n");
return false;
}
std::ofstream* outputStream = new std::ofstream("./colobot.ini");
stream = std::unique_ptr<std::ostream>(outputStream);
good = outputStream->good();
}
catch (std::exception & e)
else
{
GetLogger()->Error("Error on storing profile: %s\n", e.what());
COutputStream* outputStream = new COutputStream("colobot.ini");
stream = std::unique_ptr<std::ostream>(outputStream);
good = outputStream->is_open();
}
if (good)
{
bp::ini_parser::write_ini(*stream, m_propertyTree);
}
else
{
GetLogger()->Error("Error on storing profile: failed to open file\n");
return false;
}
}
catch (std::exception & e)
{
GetLogger()->Error("Error on storing profile: %s\n", e.what());
return false;
}
return true;
}
bool CProfile::SetStringProperty(std::string section, std::string key, std::string value)
bool CConfigFile::SetStringProperty(std::string section, std::string key, std::string value)
{
try
{
m_propertyTree.put(section + "." + key, value);
m_profileNeedSave = true;
Save();
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
GetLogger()->Info("Error on editing config file: %s\n", e.what());
return false;
}
return true;
}
bool CProfile::GetStringProperty(std::string section, std::string key, std::string &buffer)
bool CConfigFile::GetStringProperty(std::string section, std::string key, std::string &buffer)
{
try
{
@ -155,30 +152,37 @@ bool CProfile::GetStringProperty(std::string section, std::string key, std::stri
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
if (m_loaded)
{
GetLogger()->Info("Error on parsing config file: %s\n", e.what());
}
else
{
GetLogger()->Trace("Error on parsing config file: %s\n", e.what());
}
return false;
}
return true;
}
bool CProfile::SetIntProperty(std::string section, std::string key, int value)
bool CConfigFile::SetIntProperty(std::string section, std::string key, int value)
{
try
{
m_propertyTree.put(section + "." + key, value);
m_profileNeedSave = true;
Save();
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
GetLogger()->Info("Error on editing config file: %s\n", e.what());
return false;
}
return true;
}
bool CProfile::GetIntProperty(std::string section, std::string key, int &value)
bool CConfigFile::GetIntProperty(std::string section, std::string key, int &value)
{
try
{
@ -186,30 +190,37 @@ bool CProfile::GetIntProperty(std::string section, std::string key, int &value)
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
if (m_loaded)
{
GetLogger()->Info("Error on parsing config file: %s\n", e.what());
}
else
{
GetLogger()->Trace("Error on parsing config file: %s\n", e.what());
}
return false;
}
return true;
}
bool CProfile::SetFloatProperty(std::string section, std::string key, float value)
bool CConfigFile::SetFloatProperty(std::string section, std::string key, float value)
{
try
{
m_propertyTree.put(section + "." + key, value);
m_profileNeedSave = true;
Save();
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
GetLogger()->Info("Error on editing config file: %s\n", e.what());
return false;
}
return true;
}
bool CProfile::GetFloatProperty(std::string section, std::string key, float &value)
bool CConfigFile::GetFloatProperty(std::string section, std::string key, float &value)
{
try
{
@ -217,33 +228,15 @@ bool CProfile::GetFloatProperty(std::string section, std::string key, float &val
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
if (m_loaded)
{
GetLogger()->Info("Error on parsing config file: %s\n", e.what());
}
else
{
GetLogger()->Trace("Error on parsing config file: %s\n", e.what());
}
return false;
}
return true;
}
std::vector< std::string > CProfile::GetSection(std::string section, std::string key)
{
std::vector< std::string > ret_list;
boost::regex re(key + "[0-9]*"); //we want to match all key followed by any number
try
{
for(bp::ptree::value_type const & v : m_propertyTree.get_child(section))
{
if (boost::regex_search(v.first, re))
{
ret_list.push_back(v.second.get_value<std::string>());
}
}
}
catch (std::exception & e)
{
GetLogger()->Info("Error on parsing profile: %s\n", e.what());
}
return ret_list;
}

View File

@ -18,7 +18,7 @@
*/
/**
* \file common/profile.h
* \file common/config_file.h
* \brief Class for loading profile (currently for loading ini config file)
*/
@ -37,30 +37,25 @@ namespace fs = boost::filesystem;
/**
* \class CProfile
* \class CConfigFile
*
* \brief Class for loading profile (currently for loading ini config file)
* \brief Class for loading config file
*
*/
class CProfile : public CSingleton<CProfile>
class CConfigFile : public CSingleton<CConfigFile>
{
public:
CProfile();
virtual ~CProfile();
CConfigFile();
virtual ~CConfigFile();
/** Set flag to force using ini file from current directory */
void SetUseCurrentDirectory(bool useCurrentDirectory);
/** Loads colobot.ini from current directory
/** Loads colobot.ini
* \return return true on success
*/
bool Init();
/** Saves colobot.ini to current directory
* \return return true on success
*/
bool Save();
/** Sets string value in section under specified key
* \param section
* \param key
@ -109,22 +104,20 @@ public:
*/
bool GetFloatProperty(std::string section, std::string key, float &value);
/** Gets all values in section under specified key
* \param section
* \param key
* \return vector of values
private:
/** Saves colobot.ini
* \return return true on success
*/
std::vector< std::string > GetSection(std::string section, std::string key);
bool Save();
private:
boost::property_tree::ptree m_propertyTree;
bool m_profileNeedSave;
bool m_useCurrentDirectory;
bool m_loaded;
};
//! Global function to get profile instance
inline CProfile & GetProfile()
inline CConfigFile & GetConfigFile()
{
return *CProfile::GetInstancePointer();
return *CConfigFile::GetInstancePointer();
}

View File

@ -174,14 +174,14 @@ CEngine::CEngine(CApplication *app)
bool mipmaps = false;
int value;
if (CProfile::GetInstance().GetIntProperty("Setup", "FilterMode", value))
if (GetConfigFile().GetIntProperty("Setup", "FilterMode", value))
{
if (value == 1) filter = TEX_FILTER_NEAREST;
else if (value == 2) filter = TEX_FILTER_BILINEAR;
else if (value == 3) filter = TEX_FILTER_TRILINEAR, mipmaps = true;
}
if (CProfile::GetInstance().GetIntProperty("Setup", "ShadowMapping", value))
if (GetConfigFile().GetIntProperty("Setup", "ShadowMapping", value))
{
m_shadowMapping = (value > 0);
m_offscreenShadowRendering = (value > 1);
@ -3390,7 +3390,7 @@ void CEngine::RenderShadowMap()
{
int size;
if (CProfile::GetInstance().GetIntProperty("Setup", "OffscreenBuffer", size))
if (CConfigFile::GetInstance().GetIntProperty("Setup", "OffscreenBuffer", size))
{
width = height = size;
}

View File

@ -25,7 +25,7 @@
#include "common/config.h"
#include "common/image.h"
#include "common/logger.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "math/geometry.h"
@ -238,7 +238,7 @@ bool CGL21Device::Create()
m_textureStageParams = std::vector<TextureStageParams>(maxTextures, TextureStageParams());
int value;
if (CProfile::GetInstance().GetIntProperty("Setup", "PerPixelLighting", value))
if (CConfigFile::GetInstance().GetIntProperty("Setup", "PerPixelLighting", value))
{
m_perPixelLighting = value > 0;
}

View File

@ -24,7 +24,7 @@
#include "common/config.h"
#include "common/image.h"
#include "common/logger.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "math/geometry.h"
@ -243,7 +243,7 @@ bool CGL33Device::Create()
m_vertexCol = CreateStaticBuffer(PRIMITIVE_POINTS, static_cast<VertexCol*>(nullptr), 1);
int value;
if (CProfile::GetInstance().GetIntProperty("Setup", "PerPixelLighting", value))
if (CConfigFile::GetInstance().GetIntProperty("Setup", "PerPixelLighting", value))
{
m_perPixelLighting = value > 0;
}

View File

@ -20,7 +20,7 @@
#include "common/logger.h"
#include "common/make_unique.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "common/resources/resourcemanager.h"
#include "common/resources/inputstream.h"
#include "common/resources/outputstream.h"
@ -75,7 +75,7 @@ void PlayerApperance::DefPerso()
CPlayerProgress::CPlayerProgress(std::string playerName)
{
m_playerName = playerName;
GetProfile().SetStringProperty("Gamer", "LastName", m_playerName);
GetConfigFile().SetStringProperty("Gamer", "LastName", m_playerName);
if (!CResourceManager::DirectoryExists(GetSaveDir()))
{
@ -96,7 +96,7 @@ std::string CPlayerProgress::GetLastName()
{
std::string name;
if(!GetProfile().GetStringProperty("Gamer", "LastName", name))
if(!GetConfigFile().GetStringProperty("Gamer", "LastName", name))
GetResource(RES_TEXT, RT_NAME_DEFAULT, name);
return name;

View File

@ -33,7 +33,7 @@
#include "common/logger.h"
#include "common/make_unique.h"
#include "common/misc.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "common/restext.h"
#include "common/resources/resourcemanager.h"
@ -247,7 +247,7 @@ CRobotMain::CRobotMain(CController* controller)
}
}
void CRobotMain::Create(bool loadProfile)
void CRobotMain::Create()
{
m_app = m_ctrl->GetApplication();
@ -296,28 +296,22 @@ void CRobotMain::Create(bool loadProfile)
float fValue;
int iValue;
if (loadProfile)
{
if (GetProfile().GetFloatProperty("Edit", "FontSize", fValue)) m_fontSize = fValue;
if (GetProfile().GetFloatProperty("Edit", "WindowPosX", fValue)) m_windowPos.x = fValue;
if (GetProfile().GetFloatProperty("Edit", "WindowPosY", fValue)) m_windowPos.y = fValue;
if (GetProfile().GetFloatProperty("Edit", "WindowDimX", fValue)) m_windowDim.x = fValue;
if (GetProfile().GetFloatProperty("Edit", "WindowDimY", fValue)) m_windowDim.y = fValue;
}
if (GetConfigFile().GetFloatProperty("Edit", "FontSize", fValue)) m_fontSize = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "WindowPosX", fValue)) m_windowPos.x = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "WindowPosY", fValue)) m_windowPos.y = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "WindowDimX", fValue)) m_windowDim.x = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "WindowDimY", fValue)) m_windowDim.y = fValue;
m_IOPublic = false;
m_IODim = Math::Point(320.0f/640.0f, (121.0f+18.0f*8)/480.0f);
m_IOPos.x = (1.0f-m_IODim.x)/2.0f; // in the middle
m_IOPos.y = (1.0f-m_IODim.y)/2.0f;
if (loadProfile)
{
if (GetProfile().GetIntProperty ("Edit", "IOPublic", iValue)) m_IOPublic = iValue;
if (GetProfile().GetFloatProperty("Edit", "IOPosX", fValue)) m_IOPos.x = fValue;
if (GetProfile().GetFloatProperty("Edit", "IOPosY", fValue)) m_IOPos.y = fValue;
if (GetProfile().GetFloatProperty("Edit", "IODimX", fValue)) m_IODim.x = fValue;
if (GetProfile().GetFloatProperty("Edit", "IODimY", fValue)) m_IODim.y = fValue;
}
if (GetConfigFile().GetIntProperty ("Edit", "IOPublic", iValue)) m_IOPublic = iValue;
if (GetConfigFile().GetFloatProperty("Edit", "IOPosX", fValue)) m_IOPos.x = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "IOPosY", fValue)) m_IOPos.y = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "IODimX", fValue)) m_IODim.x = fValue;
if (GetConfigFile().GetFloatProperty("Edit", "IODimY", fValue)) m_IODim.y = fValue;
InitEye();
@ -402,25 +396,23 @@ void CRobotMain::ResetAfterDeviceChanged()
//! Creates the file colobot.ini at the first time
void CRobotMain::CreateIni()
void CRobotMain::CreateConfigFile()
{
m_dialog->SetupMemorize();
GetProfile().SetFloatProperty("Edit", "FontSize", m_fontSize);
GetProfile().SetFloatProperty("Edit", "WindowPosX", m_windowPos.x);
GetProfile().SetFloatProperty("Edit", "WindowPosY", m_windowPos.y);
GetProfile().SetFloatProperty("Edit", "WindowDimX", m_windowDim.x);
GetProfile().SetFloatProperty("Edit", "WindowDimY", m_windowDim.y);
GetProfile().SetIntProperty("Edit", "IOPublic", m_IOPublic);
GetProfile().SetFloatProperty("Edit", "IOPosX", m_IOPos.x);
GetProfile().SetFloatProperty("Edit", "IOPosY", m_IOPos.y);
GetProfile().SetFloatProperty("Edit", "IODimX", m_IODim.x);
GetProfile().SetFloatProperty("Edit", "IODimY", m_IODim.y);
GetProfile().Save();
GetConfigFile().SetFloatProperty("Edit", "FontSize", m_fontSize);
GetConfigFile().SetFloatProperty("Edit", "WindowPosX", m_windowPos.x);
GetConfigFile().SetFloatProperty("Edit", "WindowPosY", m_windowPos.y);
GetConfigFile().SetFloatProperty("Edit", "WindowDimX", m_windowDim.x);
GetConfigFile().SetFloatProperty("Edit", "WindowDimY", m_windowDim.y);
GetConfigFile().SetIntProperty("Edit", "IOPublic", m_IOPublic);
GetConfigFile().SetFloatProperty("Edit", "IOPosX", m_IOPos.x);
GetConfigFile().SetFloatProperty("Edit", "IOPosY", m_IOPos.y);
GetConfigFile().SetFloatProperty("Edit", "IODimX", m_IODim.x);
GetConfigFile().SetFloatProperty("Edit", "IODimY", m_IODim.y);
}
void CRobotMain::LoadIni()
void CRobotMain::LoadConfigFile()
{
m_dialog->SetupRecall();
}
@ -1556,7 +1548,7 @@ float CRobotMain::GetGameTime()
void CRobotMain::SetFontSize(float size)
{
m_fontSize = size;
GetProfile().SetFloatProperty("Edit", "FontSize", m_fontSize);
GetConfigFile().SetFloatProperty("Edit", "FontSize", m_fontSize);
}
float CRobotMain::GetFontSize()
@ -1568,8 +1560,8 @@ float CRobotMain::GetFontSize()
void CRobotMain::SetWindowPos(Math::Point pos)
{
m_windowPos = pos;
GetProfile().SetFloatProperty("Edit", "WindowPosX", m_windowPos.x);
GetProfile().SetFloatProperty("Edit", "WindowPosY", m_windowPos.y);
GetConfigFile().SetFloatProperty("Edit", "WindowPosX", m_windowPos.x);
GetConfigFile().SetFloatProperty("Edit", "WindowPosY", m_windowPos.y);
}
Math::Point CRobotMain::GetWindowPos()
@ -1580,8 +1572,8 @@ Math::Point CRobotMain::GetWindowPos()
void CRobotMain::SetWindowDim(Math::Point dim)
{
m_windowDim = dim;
GetProfile().SetFloatProperty("Edit", "WindowDimX", m_windowDim.x);
GetProfile().SetFloatProperty("Edit", "WindowDimY", m_windowDim.y);
GetConfigFile().SetFloatProperty("Edit", "WindowDimX", m_windowDim.x);
GetConfigFile().SetFloatProperty("Edit", "WindowDimY", m_windowDim.y);
}
Math::Point CRobotMain::GetWindowDim()
@ -1594,7 +1586,7 @@ Math::Point CRobotMain::GetWindowDim()
void CRobotMain::SetIOPublic(bool mode)
{
m_IOPublic = mode;
GetProfile().SetIntProperty("Edit", "IOPublic", m_IOPublic);
GetConfigFile().SetIntProperty("Edit", "IOPublic", m_IOPublic);
}
bool CRobotMain::GetIOPublic()
@ -1605,8 +1597,8 @@ bool CRobotMain::GetIOPublic()
void CRobotMain::SetIOPos(Math::Point pos)
{
m_IOPos = pos;
GetProfile().SetFloatProperty("Edit", "IOPosX", m_IOPos.x);
GetProfile().SetFloatProperty("Edit", "IOPosY", m_IOPos.y);
GetConfigFile().SetFloatProperty("Edit", "IOPosX", m_IOPos.x);
GetConfigFile().SetFloatProperty("Edit", "IOPosY", m_IOPos.y);
}
Math::Point CRobotMain::GetIOPos()
@ -1617,8 +1609,8 @@ Math::Point CRobotMain::GetIOPos()
void CRobotMain::SetIODim(Math::Point dim)
{
m_IODim = dim;
GetProfile().SetFloatProperty("Edit", "IODimX", m_IODim.x);
GetProfile().SetFloatProperty("Edit", "IODimY", m_IODim.y);
GetConfigFile().SetFloatProperty("Edit", "IODimX", m_IODim.x);
GetConfigFile().SetFloatProperty("Edit", "IODimY", m_IODim.y);
}
Math::Point CRobotMain::GetIODim()

View File

@ -150,16 +150,15 @@ class CRobotMain : public CSingleton<CRobotMain>
public:
CRobotMain(CController* controller);
virtual ~CRobotMain();
void Create(bool loadProfile = true);
void Create();
Gfx::CCamera* GetCamera();
Gfx::CTerrain* GetTerrain();
Ui::CInterface* GetInterface();
Ui::CDisplayText* GetDisplayText();
void CreateIni();
void LoadIni();
void CreateConfigFile();
void LoadConfigFile();
void ResetAfterDeviceChanged();

View File

@ -30,7 +30,7 @@
#include "common/logger.h"
#include "common/make_unique.h"
#include "common/misc.h"
#include "common/profile.h"
#include "common/config_file.h"
#include "common/restext.h"
#include "common/stringutils.h"
@ -4861,53 +4861,53 @@ void CMainDialog::ChangeSetupButtons()
void CMainDialog::SetupMemorize()
{
GetProfile().SetStringProperty("Directory", "savegame", m_savegameDir);
GetProfile().SetStringProperty("Directory", "public", m_publicDir);
GetProfile().SetStringProperty("Directory", "files", m_filesDir);
GetProfile().SetIntProperty("Setup", "Tooltips", m_bTooltip);
GetProfile().SetIntProperty("Setup", "InterfaceGlint", m_bGlint);
GetProfile().SetIntProperty("Setup", "InterfaceGlint", m_bRain);
GetProfile().SetIntProperty("Setup", "Soluce4", m_bSoluce4);
GetProfile().SetIntProperty("Setup", "Movies", m_bMovies);
GetProfile().SetIntProperty("Setup", "NiceReset", m_bNiceReset);
GetProfile().SetIntProperty("Setup", "HimselfDamage", m_bHimselfDamage);
GetProfile().SetIntProperty("Setup", "CameraScroll", m_bCameraScroll);
GetProfile().SetIntProperty("Setup", "CameraInvertX", m_bCameraInvertX);
GetProfile().SetIntProperty("Setup", "CameraInvertY", m_bCameraInvertY);
GetProfile().SetIntProperty("Setup", "InterfaceEffect", m_bEffect);
GetProfile().SetIntProperty("Setup", "Blood", m_bBlood);
GetProfile().SetIntProperty("Setup", "Autosave", m_bAutosave);
GetProfile().SetIntProperty("Setup", "AutosaveInterval", m_main->GetAutosaveInterval());
GetProfile().SetIntProperty("Setup", "AutosaveSlots", m_main->GetAutosaveSlots());
GetProfile().SetIntProperty("Setup", "GroundShadow", m_engine->GetShadow());
GetProfile().SetIntProperty("Setup", "GroundSpot", m_engine->GetGroundSpot());
GetProfile().SetIntProperty("Setup", "ObjectDirty", m_engine->GetDirty());
GetProfile().SetIntProperty("Setup", "FogMode", m_engine->GetFog());
GetProfile().SetIntProperty("Setup", "LensMode", m_engine->GetLensMode());
GetProfile().SetIntProperty("Setup", "SkyMode", m_engine->GetSkyMode());
GetProfile().SetIntProperty("Setup", "PlanetMode", m_engine->GetPlanetMode());
GetProfile().SetIntProperty("Setup", "LightMode", m_engine->GetLightMode());
GetProfile().SetIntProperty("Setup", "UseJoystick", m_app->GetJoystickEnabled() ? m_app->GetJoystick().index : -1);
GetProfile().SetFloatProperty("Setup", "ParticleDensity", m_engine->GetParticleDensity());
GetProfile().SetFloatProperty("Setup", "ClippingDistance", m_engine->GetClippingDistance());
GetProfile().SetFloatProperty("Setup", "ObjectDetail", m_engine->GetObjectDetail());
GetProfile().SetFloatProperty("Setup", "GadgetQuantity", m_engine->GetGadgetQuantity());
GetProfile().SetIntProperty("Setup", "TextureQuality", m_engine->GetTextureQuality());
GetProfile().SetIntProperty("Setup", "TotoMode", m_engine->GetTotoMode());
GetProfile().SetIntProperty("Setup", "AudioVolume", m_sound->GetAudioVolume());
GetProfile().SetIntProperty("Setup", "MusicVolume", m_sound->GetMusicVolume());
GetProfile().SetIntProperty("Setup", "EditIndentMode", m_engine->GetEditIndentMode());
GetProfile().SetIntProperty("Setup", "EditIndentValue", m_engine->GetEditIndentValue());
GetProfile().SetIntProperty("Setup", "SystemMouse", m_app->GetMouseMode() == MOUSE_SYSTEM);
GetConfigFile().SetStringProperty("Directory", "savegame", m_savegameDir);
GetConfigFile().SetStringProperty("Directory", "public", m_publicDir);
GetConfigFile().SetStringProperty("Directory", "files", m_filesDir);
GetConfigFile().SetIntProperty("Setup", "Tooltips", m_bTooltip);
GetConfigFile().SetIntProperty("Setup", "InterfaceGlint", m_bGlint);
GetConfigFile().SetIntProperty("Setup", "InterfaceGlint", m_bRain);
GetConfigFile().SetIntProperty("Setup", "Soluce4", m_bSoluce4);
GetConfigFile().SetIntProperty("Setup", "Movies", m_bMovies);
GetConfigFile().SetIntProperty("Setup", "NiceReset", m_bNiceReset);
GetConfigFile().SetIntProperty("Setup", "HimselfDamage", m_bHimselfDamage);
GetConfigFile().SetIntProperty("Setup", "CameraScroll", m_bCameraScroll);
GetConfigFile().SetIntProperty("Setup", "CameraInvertX", m_bCameraInvertX);
GetConfigFile().SetIntProperty("Setup", "CameraInvertY", m_bCameraInvertY);
GetConfigFile().SetIntProperty("Setup", "InterfaceEffect", m_bEffect);
GetConfigFile().SetIntProperty("Setup", "Blood", m_bBlood);
GetConfigFile().SetIntProperty("Setup", "Autosave", m_bAutosave);
GetConfigFile().SetIntProperty("Setup", "AutosaveInterval", m_main->GetAutosaveInterval());
GetConfigFile().SetIntProperty("Setup", "AutosaveSlots", m_main->GetAutosaveSlots());
GetConfigFile().SetIntProperty("Setup", "GroundShadow", m_engine->GetShadow());
GetConfigFile().SetIntProperty("Setup", "GroundSpot", m_engine->GetGroundSpot());
GetConfigFile().SetIntProperty("Setup", "ObjectDirty", m_engine->GetDirty());
GetConfigFile().SetIntProperty("Setup", "FogMode", m_engine->GetFog());
GetConfigFile().SetIntProperty("Setup", "LensMode", m_engine->GetLensMode());
GetConfigFile().SetIntProperty("Setup", "SkyMode", m_engine->GetSkyMode());
GetConfigFile().SetIntProperty("Setup", "PlanetMode", m_engine->GetPlanetMode());
GetConfigFile().SetIntProperty("Setup", "LightMode", m_engine->GetLightMode());
GetConfigFile().SetIntProperty("Setup", "UseJoystick", m_app->GetJoystickEnabled() ? m_app->GetJoystick().index : -1);
GetConfigFile().SetFloatProperty("Setup", "ParticleDensity", m_engine->GetParticleDensity());
GetConfigFile().SetFloatProperty("Setup", "ClippingDistance", m_engine->GetClippingDistance());
GetConfigFile().SetFloatProperty("Setup", "ObjectDetail", m_engine->GetObjectDetail());
GetConfigFile().SetFloatProperty("Setup", "GadgetQuantity", m_engine->GetGadgetQuantity());
GetConfigFile().SetIntProperty("Setup", "TextureQuality", m_engine->GetTextureQuality());
GetConfigFile().SetIntProperty("Setup", "TotoMode", m_engine->GetTotoMode());
GetConfigFile().SetIntProperty("Setup", "AudioVolume", m_sound->GetAudioVolume());
GetConfigFile().SetIntProperty("Setup", "MusicVolume", m_sound->GetMusicVolume());
GetConfigFile().SetIntProperty("Setup", "EditIndentMode", m_engine->GetEditIndentMode());
GetConfigFile().SetIntProperty("Setup", "EditIndentValue", m_engine->GetEditIndentValue());
GetConfigFile().SetIntProperty("Setup", "SystemMouse", m_app->GetMouseMode() == MOUSE_SYSTEM);
GetProfile().SetIntProperty("Setup", "MipmapLevel", m_engine->GetTextureMipmapLevel());
GetProfile().SetIntProperty("Setup", "Anisotropy", m_engine->GetTextureAnisotropyLevel());
GetProfile().SetFloatProperty("Setup", "ShadowColor", m_engine->GetShadowColor());
GetProfile().SetFloatProperty("Setup", "ShadowRange", m_engine->GetShadowRange());
GetProfile().SetIntProperty("Setup", "MSAA", m_engine->GetMultiSample());
GetConfigFile().SetIntProperty("Setup", "MipmapLevel", m_engine->GetTextureMipmapLevel());
GetConfigFile().SetIntProperty("Setup", "Anisotropy", m_engine->GetTextureAnisotropyLevel());
GetConfigFile().SetFloatProperty("Setup", "ShadowColor", m_engine->GetShadowColor());
GetConfigFile().SetFloatProperty("Setup", "ShadowRange", m_engine->GetShadowRange());
GetConfigFile().SetIntProperty("Setup", "MSAA", m_engine->GetMultiSample());
/* screen setup */
GetProfile().SetIntProperty("Setup", "Fullscreen", m_setupFull ? 1 : 0);
GetConfigFile().SetIntProperty("Setup", "Fullscreen", m_setupFull ? 1 : 0);
CList *pl;
CWindow *pw;
@ -4921,13 +4921,13 @@ void CMainDialog::SetupMemorize()
m_app->GetVideoResolutionList(modes, true, true);
std::ostringstream ss;
ss << modes[m_setupSelMode].x << "x" << modes[m_setupSelMode].y;
GetProfile().SetStringProperty("Setup", "Resolution", ss.str());
GetConfigFile().SetStringProperty("Setup", "Resolution", ss.str());
}
}
CInput::GetInstancePointer()->SaveKeyBindings();
GetProfile().SetIntProperty("Setup", "DeleteGamer", m_bDeleteGamer);
GetConfigFile().SetIntProperty("Setup", "DeleteGamer", m_bDeleteGamer);
}
// Remember all the settings.
@ -4938,152 +4938,152 @@ void CMainDialog::SetupRecall()
int iValue;
std::string key;
if ( GetProfile().GetStringProperty("Directory", "savegame", key) )
if ( GetConfigFile().GetStringProperty("Directory", "savegame", key) )
{
m_savegameDir = key;
}
if ( GetProfile().GetStringProperty("Directory", "public", key) )
if ( GetConfigFile().GetStringProperty("Directory", "public", key) )
{
m_publicDir = key;
}
if ( GetProfile().GetStringProperty("Directory", "files", key) )
if ( GetConfigFile().GetStringProperty("Directory", "files", key) )
{
m_filesDir = key;
}
if ( GetProfile().GetIntProperty("Setup", "TotoMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "TotoMode", iValue) )
{
m_engine->SetTotoMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "Tooltips", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Tooltips", iValue) )
{
m_bTooltip = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "InterfaceGlint", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "InterfaceGlint", iValue) )
{
m_bGlint = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "InterfaceGlint", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "InterfaceGlint", iValue) )
{
m_bRain = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "SystemMouse", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "SystemMouse", iValue) )
{
m_app->SetMouseMode(iValue ? MOUSE_SYSTEM : MOUSE_ENGINE);
}
if ( GetProfile().GetIntProperty("Setup", "Soluce4", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Soluce4", iValue) )
{
m_bSoluce4 = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "Movies", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Movies", iValue) )
{
m_bMovies = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "NiceReset", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "NiceReset", iValue) )
{
m_bNiceReset = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "HimselfDamage", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "HimselfDamage", iValue) )
{
m_bHimselfDamage = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "CameraScroll", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "CameraScroll", iValue) )
{
m_bCameraScroll = iValue;
m_camera->SetCameraScroll(m_bCameraScroll);
}
if ( GetProfile().GetIntProperty("Setup", "CameraInvertX", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "CameraInvertX", iValue) )
{
m_bCameraInvertX = iValue;
m_camera->SetCameraInvertX(m_bCameraInvertX);
}
if ( GetProfile().GetIntProperty("Setup", "CameraInvertY", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "CameraInvertY", iValue) )
{
m_bCameraInvertY = iValue;
m_camera->SetCameraInvertY(m_bCameraInvertY);
}
if ( GetProfile().GetIntProperty("Setup", "InterfaceEffect", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "InterfaceEffect", iValue) )
{
m_bEffect = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "Blood", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Blood", iValue) )
{
m_bBlood = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "Autosave", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Autosave", iValue) )
{
m_bAutosave = iValue;
}
if ( GetProfile().GetIntProperty("Setup", "AutosaveInterval", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "AutosaveInterval", iValue) )
{
m_main->SetAutosaveInterval(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "AutosaveSlots", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "AutosaveSlots", iValue) )
{
m_main->SetAutosaveSlots(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "GroundShadow", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "GroundShadow", iValue) )
{
m_engine->SetShadow(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "GroundSpot", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "GroundSpot", iValue) )
{
m_engine->SetGroundSpot(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "ObjectDirty", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "ObjectDirty", iValue) )
{
m_engine->SetDirty(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "FogMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "FogMode", iValue) )
{
m_engine->SetFog(iValue);
m_camera->SetOverBaseColor(Gfx::Color(0.0f, 0.0f, 0.0f, 0.0f)); // TODO: color ok?
}
if ( GetProfile().GetIntProperty("Setup", "LensMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "LensMode", iValue) )
{
m_engine->SetLensMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "SkyMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "SkyMode", iValue) )
{
m_engine->SetSkyMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "PlanetMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "PlanetMode", iValue) )
{
m_engine->SetPlanetMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "LightMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "LightMode", iValue) )
{
m_engine->SetLightMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "UseJoystick", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "UseJoystick", iValue) )
{
if(iValue >= 0)
{
@ -5103,59 +5103,59 @@ void CMainDialog::SetupRecall()
}
}
if ( GetProfile().GetFloatProperty("Setup", "ParticleDensity", fValue) )
if ( GetConfigFile().GetFloatProperty("Setup", "ParticleDensity", fValue) )
{
m_engine->SetParticleDensity(fValue);
}
if ( GetProfile().GetFloatProperty("Setup", "ClippingDistance", fValue) )
if ( GetConfigFile().GetFloatProperty("Setup", "ClippingDistance", fValue) )
{
m_engine->SetClippingDistance(fValue);
}
if ( GetProfile().GetFloatProperty("Setup", "ObjectDetail", fValue) )
if ( GetConfigFile().GetFloatProperty("Setup", "ObjectDetail", fValue) )
{
m_engine->SetObjectDetail(fValue);
}
if ( GetProfile().GetFloatProperty("Setup", "GadgetQuantity", fValue) )
if ( GetConfigFile().GetFloatProperty("Setup", "GadgetQuantity", fValue) )
{
m_engine->SetGadgetQuantity(fValue);
}
if ( GetProfile().GetIntProperty("Setup", "TextureQuality", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "TextureQuality", iValue) )
{
m_engine->SetTextureQuality(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "AudioVolume", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "AudioVolume", iValue) )
{
m_sound->SetAudioVolume(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "MusicVolume", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "MusicVolume", iValue) )
{
m_sound->SetMusicVolume(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "EditIndentMode", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "EditIndentMode", iValue) )
{
m_engine->SetEditIndentMode(iValue);
}
if ( GetProfile().GetIntProperty("Setup", "EditIndentValue", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "EditIndentValue", iValue) )
{
m_engine->SetEditIndentValue(iValue);
}
CInput::GetInstancePointer()->LoadKeyBindings();
if ( GetProfile().GetIntProperty("Setup", "DeleteGamer", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "DeleteGamer", iValue) )
{
m_bDeleteGamer = iValue;
}
if ( GetProfile().GetStringProperty("Setup", "Resolution", key) )
if ( GetConfigFile().GetStringProperty("Setup", "Resolution", key) )
{
std::istringstream resolution(key);
std::string ws, hs;
@ -5180,32 +5180,32 @@ void CMainDialog::SetupRecall()
}
}
if ( GetProfile().GetIntProperty("Setup", "Fullscreen", iValue) )
if ( GetConfigFile().GetIntProperty("Setup", "Fullscreen", iValue) )
{
m_setupFull = (iValue == 1);
}
if ( GetProfile().GetIntProperty("Setup", "MipmapLevel", iValue))
if ( GetConfigFile().GetIntProperty("Setup", "MipmapLevel", iValue))
{
m_engine->SetTextureMipmapLevel(iValue);
}
if (GetProfile().GetIntProperty("Setup", "Anisotropy", iValue))
if (GetConfigFile().GetIntProperty("Setup", "Anisotropy", iValue))
{
m_engine->SetTextureAnisotropyLevel(iValue);
}
if (GetProfile().GetFloatProperty("Setup", "ShadowColor", fValue))
if (GetConfigFile().GetFloatProperty("Setup", "ShadowColor", fValue))
{
m_engine->SetShadowColor(fValue);
}
if (GetProfile().GetFloatProperty("Setup", "ShadowRange", fValue))
if (GetConfigFile().GetFloatProperty("Setup", "ShadowRange", fValue))
{
m_engine->SetShadowRange(fValue);
}
if (GetProfile().GetIntProperty("Setup", "MSAA", iValue))
if (GetConfigFile().GetIntProperty("Setup", "MSAA", iValue))
{
m_engine->SetMultiSample(iValue);
}

View File

@ -9,7 +9,7 @@ endif()
set(UT_SOURCES
main.cpp
app/app_test.cpp
common/profile_test.cpp
common/config_file_test.cpp
graphics/engine/lightman_test.cpp
math/func_test.cpp
math/geometry_test.cpp

View File

@ -6,10 +6,3 @@ string_value=Hello world
[test_int]
int_value=42
[test_multi]
entry1=1
entry2=2
entry3=3
entry4=4
entry5=5

View File

@ -16,7 +16,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://gnu.org/licenses
*/
#include "common/profile.h"
#include "common/config_file.h"
#include "common/logger.h"
#include "app/system.h"
@ -26,31 +26,27 @@
#include <gtest/gtest.h>
class CProfileTest : public testing::Test
class CConfigFileTest : public testing::Test
{
protected:
CProfile m_profile;
CConfigFile m_configFile;
};
TEST_F(CProfileTest, ReadTest)
TEST_F(CConfigFileTest, ReadTest)
{
m_profile.SetUseCurrentDirectory(true);
m_configFile.SetUseCurrentDirectory(true);
ASSERT_TRUE(m_profile.Init()); // load colobot.ini file
ASSERT_TRUE(m_configFile.Init()); // load colobot.ini file
std::string result;
ASSERT_TRUE(m_profile.GetStringProperty("test_string", "string_value", result));
ASSERT_TRUE(m_configFile.GetStringProperty("test_string", "string_value", result));
ASSERT_STREQ("Hello world", result.c_str());
int int_value;
ASSERT_TRUE(m_profile.GetIntProperty("test_int", "int_value", int_value));
ASSERT_TRUE(m_configFile.GetIntProperty("test_int", "int_value", int_value));
ASSERT_EQ(42, int_value);
float float_value;
ASSERT_TRUE(m_profile.GetFloatProperty("test_float", "float_value", float_value));
ASSERT_TRUE(m_configFile.GetFloatProperty("test_float", "float_value", float_value));
ASSERT_FLOAT_EQ(1.5, float_value);
std::vector<std::string> list;
list = m_profile.GetSection("test_multi", "entry");
ASSERT_EQ(5u, list.size());
}