#include "wx/xml/xml.h"
#include "wx/wx.h"
+#include "wx/tokenzr.h"
#include "xmlhelpr.h"
-wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& param)
+wxXmlNode *XmlFindNodeSimple(wxXmlNode *parent, const wxString& param)
{
+ if (param.IsEmpty()) return parent;
+
wxXmlNode *n = parent->GetChildren();
-
+
while (n)
{
if (n->GetType() == wxXML_ELEMENT_NODE && n->GetName() == param)
}
-void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+
+wxXmlNode *XmlFindNode(wxXmlNode *parent, const wxString& path)
{
- wxXmlNode *n = XmlFindNode(parent, name);
- if (n == NULL)
+ wxXmlNode *n = parent;
+ wxStringTokenizer tkn(path, _T("/"));
+ while (tkn.HasMoreTokens())
+ {
+ n = XmlFindNodeSimple(n, tkn.GetNextToken());
+ if (n == NULL) break;
+ }
+ return n;
+}
+
+
+
+wxXmlNode *XmlCreateNode(wxXmlNode *parent, const wxString& name)
+{
+ wxXmlNode *n;
+ wxString nm;
+
+ wxStringTokenizer tkn(name, _T("/"));
+ n = parent;
+ while (tkn.HasMoreTokens())
{
- n = new wxXmlNode(wxXML_ELEMENT_NODE, name);
+ parent = n;
+ nm = tkn.GetNextToken();
+ n = XmlFindNodeSimple(parent, nm);
+ if (n) continue;
+
+ // n == NULL:
+ n = new wxXmlNode(wxXML_ELEMENT_NODE, nm);
parent->AddChild(n);
- n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, ""));
}
-
+ n->AddChild(new wxXmlNode(wxXML_TEXT_NODE, wxEmptyString));
+
+ return n;
+}
+
+
+
+void XmlWriteValue(wxXmlNode *parent, const wxString& name, const wxString& value)
+{
+ wxXmlNode *n = XmlFindNode(parent, name);
+ if (n == NULL)
+ n = XmlCreateNode(parent, name);
+
n = n->GetChildren();
-
+
while (n)
{
- if (n->GetType() == wxXML_TEXT_NODE ||
+ if (n->GetType() == wxXML_TEXT_NODE ||
n->GetType() == wxXML_CDATA_SECTION_NODE)
{
n->SetContent(value);
wxXmlNode *n = XmlFindNode(parent, name);
if (n == NULL) return wxEmptyString;
n = n->GetChildren();
-
+
while (n)
{
- if (n->GetType() == wxXML_TEXT_NODE ||
+ if (n->GetType() == wxXML_TEXT_NODE ||
n->GetType() == wxXML_CDATA_SECTION_NODE)
return n->GetContent();
n = n->GetNext();
+wxString XmlGetClass(wxXmlNode *parent)
+{
+ return parent->GetPropVal(_T("class"), wxEmptyString);
+}
+
+
+
+void XmlSetClass(wxXmlNode *parent, const wxString& classname)
+{
+ parent->DeleteProperty(_T("class"));
+ parent->AddProperty(_T("class"), classname);
+}
+
+
+
+