int CzXmlNode::Save(const char* filename) { // Dont save root node if (Name == ".") { CzXmlNode* node = getFirstNode(); if (node == NULL) return -1; return node->Save(filename); } CzFile file; if (file.Open(filename, "wb", true)) { const char* xml_head = "<?xml version=\"1.0\"?>\n"; if (!file.Write((void*)xml_head, strlen(xml_head))) return -1; int err = SaveTree(&file); if (err < 0) return err; } else return -1; return 0; }
CzXmlNode* CzXmlNode::CloneTree(CzXmlNode* parent) { // Clone node CzXmlNode* node = Clone(parent); // Clone children for (CzXmlNodeList::iterator it = Children.begin(); it != Children.end(); ++it) { node->AddChild((*it)->CloneTree(this)); } return node; }
CzXmlNode* CzXmlNode::getFirstNamedNode(unsigned int name_hash) { // Check this mode if (Name.getHash() == name_hash) return this; // Check child nodes for (CzXmlNodeList::iterator i = Children.begin(); i != Children.end(); ++i) { CzXmlNode* pNode = *i; CzXmlNode* pFound = pNode->getFirstNamedNode(name_hash); if (pFound != NULL) return pFound; } return NULL; }
void CzXmlNode::PrintTree(CzString& out, int level) { for (int t = 0; t < level; t++) { out += "\t"; } out += "<"; out += Name.c_str(); PrintAttributes(out); if (HasValue) { if (Value.getLength() == 0) out += " />\n"; else { out += ">"; out += Value.c_str(); } } else { out += ">\n"; CzXmlNode* node; for (CzXmlNodeList::iterator it = Children.begin(); it != Children.end(); it++) { node = *it; node->PrintTree(out, level + 1); } for (int t = 0; t < level; t++) out += "\t"; } // if (Value.getLength() > 0 || Value.c_str() == NULL) if (Value.getLength() > 0 || !HasValue) { out += "</"; out += Name.c_str(); out += ">\n"; } }
CzXmlNode* CzXmlNode::Clone(CzXmlNode* parent) { // Clone node CzXmlNode* node = new CzXmlNode(); node->Managed = false; node->Name = Name; node->Value = Value; node->HasValue = HasValue; node->Parent = parent; node->Parser = NULL; node->Line = Line; // Clone nodes attributes for (CzXmlAttributeList::iterator it = Attributes.begin(); it != Attributes.end(); ++it) { CzXmlAttribute* attrib = new CzXmlAttribute(); attrib->Managed = false; attrib->setName((*it)->getName().c_str()); attrib->setValue((*it)->getValue().c_str()); node->AddAttribute(attrib); } return node; }
// // // // CzSettings implementation // // // int CzSettings::Init() { PreventPowerSaving = false; CzXmlParser* xml = new CzXmlParser(); if (xml->Parse("AppEasy.xml") == XmlErrorNone) { CzXmlNode* root = xml->getRoot()->getFirstNode(); if (root != NULL) { // Get debug trace info level CzXmlNode* node = root->getFirstNamedNode(CZ_HASH("debug")); if (node != NULL) { CzXmlAttribute* attrib = node->getAttribute(CZ_HASH("level")); if (attrib != NULL) { g_CzShowTracing = attrib->getValueAsInt(); CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "Debugging trace level set to ", CzString(g_CzShowTracing).c_str()); } } // Get Facebook App ID node = root->getFirstNamedNode(CZ_HASH("facebook")); if (node != NULL) { CzXmlAttribute* attrib = node->getAttribute(CZ_HASH("app_id")); if (attrib != NULL) { FacebookAppID = attrib->getValue(); CzDebug::Log(CZ_DEBUG_CHANNEL_INFO, "Got Facebook App ID"); } } } } delete xml; return 1; }
bool CzXomlLoad::CreateInstance(IzXomlResource* parent, CzScene* scene, CzString* template_name, CzString* parameters) { if (template_name == NULL) return false; // Get the template CzTemplate* temp = (CzTemplate*)CzXomlResourceManager::FindResource(template_name->getHash(), CzHashes::Template_Hash, parent); if (temp != NULL) { if (parameters != NULL && !parameters->isEmpty()) { // Create a set of XML attributes that will replace the template parameters CzXmlNode* replacements = new CzXmlNode(); replacements->Managed = false; // Split parameter two into paramater=value pairs CzSlotArray<CzString*>* split = parameters->Split(':'); CzSlotArray<CzString*>* strings = new CzSlotArray<CzString*>(); for (int t = 0; t < split->getSize(); t++) { CzString* pair = split->element_at(t); if (pair != NULL) { // Split paramater / value pair pair->Split('=', strings); CzString* name = strings->element_at(0); CzString* value = strings->element_at(1); if (name != NULL && value != NULL) { // Set template paramater CzXmlAttribute* attrib = new CzXmlAttribute(); attrib->Managed = false; attrib->setName(name->c_str()); attrib->setValue(value->c_str()); replacements->AddAttribute(attrib); } } strings->clear(true); } temp->Instantiate(scene, replacements); delete replacements; delete strings; split->clear(true); delete split; } else temp->Instantiate(scene, NULL); } #if defined (_DEBUG) else { CzDebug::Log(CZ_DEBUG_CHANNEL_WARNING, "Action - FromTemplate - Cannot find template - ", template_name->c_str(), parent->getDebugInfo().c_str()); return false; } #endif return true; }