87 lines
2.2 KiB
C++
87 lines
2.2 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "data/registry.h"
|
|
|
|
using namespace GS;
|
|
using GS::NML::Tag;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
Tag *Registry::CreateKey(const char *path, const Variant *value, bool /*recursive*/)
|
|
{
|
|
StringList tag_path_list;
|
|
String(path).TrimChar(';').Split(":", tag_path_list);
|
|
|
|
Tag *ctag = NULL;
|
|
for (uint n = 0; n < tag_path_list.GetCount(); ++n)
|
|
{
|
|
String &tag_path = tag_path_list.ObjectAt(n);
|
|
|
|
Tag *ntag = ctag ? ctag->GetTag(tag_path) : GetTag(tag_path);
|
|
if (ntag == NULL)
|
|
ntag = ctag ? ctag->AddChild(tag_path) : AddRoot(tag_path);
|
|
if ((ctag = ntag) == NULL)
|
|
return NULL;
|
|
}
|
|
|
|
if (ctag && value)
|
|
{
|
|
ctag->GetValue() = *value;
|
|
RegistryKeyChange msg(path);
|
|
BroadcastMessage(RegistryMsg_KeyChange, this, &msg);
|
|
}
|
|
return ctag;
|
|
}
|
|
Tag *Registry::CreateKey(const char *path, const Variant &value, bool recursive)
|
|
{ return CreateKey(path, &value, recursive); }
|
|
bool Registry::DeleteKey(const char *path)
|
|
{
|
|
StringList tag_path_list;
|
|
String(path).Split(":", tag_path_list);
|
|
|
|
Tag *ctag = NULL, *ptag = NULL;
|
|
for (uint n = 0; n < tag_path_list.GetCount(); ++n)
|
|
{
|
|
ptag = ctag;
|
|
String &tag_path = tag_path_list.ObjectAt(n);
|
|
Tag *ntag = ctag ? ctag->GetTag(tag_path) : GetTag(tag_path);
|
|
if (!ntag)
|
|
return false;
|
|
ctag = ntag;
|
|
}
|
|
if (!ctag)
|
|
return false;
|
|
|
|
if (ptag)
|
|
ptag->RemoveTag(ctag);
|
|
else
|
|
tags.Remove(ctag);
|
|
|
|
_safe_delete(ctag);
|
|
return true;
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
float Registry::GetReal(const char *path, float default_value) const
|
|
{
|
|
Tag *tag = GetTag(path);
|
|
float v;
|
|
if (!tag || !tag->GetValue().Get(v))
|
|
return default_value;
|
|
return v;
|
|
}
|
|
bool Registry::GetBool(const char *path, bool default_value) const
|
|
{
|
|
Tag *tag = GetTag(path);
|
|
bool v;
|
|
if (!tag || !tag->GetValue().Get(v))
|
|
return default_value;
|
|
return v;
|
|
}
|
|
//------------------------------------------------------------------------------
|