示例#1
0
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;
}
示例#2
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;
}
示例#3
0
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;
}
示例#4
0
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";
	}
}
示例#5
0
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;
}
示例#6
0
//
//
//
// 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;
}
示例#7
0
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;
}