00001 #include "stdafx.h" 00002 #include "XMLResource.h" 00003 00004 CXMLResource::CXMLResource() 00005 { 00006 SetEntityType(Entity_XMLResource); 00007 m_pXMLElement = NULL; 00008 } 00009 00010 CXMLResource::~CXMLResource() 00011 { 00012 Destroy(); 00013 } 00014 00015 void CXMLResource::SetFilename(CString strFilename) 00016 { 00017 m_strFilename = strFilename; 00018 } 00019 00020 CString CXMLResource::GetFilename() 00021 { 00022 return m_strFilename; 00023 } 00024 00025 int CXMLResource::LoadXML(TiXmlNode *pDataNode, CString strFilename) 00026 { 00027 if(pDataNode == NULL && strFilename == "") // If both parameters are invalid, return error 00028 return -1; 00029 00030 const char *pcValue = NULL; 00031 TiXmlElement* pXMLElement = NULL; 00032 TiXmlNode *XMLNode = NULL; 00033 TiXmlDocument XMLDoc; 00034 00035 if(strFilename !="") 00036 { 00037 if(strFilename.Find(CString(".xml")) > 0) 00038 { 00039 if(!XMLDoc.LoadFile(GetFullPath(strFilename).GetBuffer())) 00040 return false; 00041 else 00042 { 00043 XMLNode = XMLDoc.FirstChild(); 00044 m_strFilename = strFilename; 00045 } 00046 } 00047 else 00048 return 1; 00049 } 00050 else 00051 XMLNode = pDataNode; 00052 00053 if(XMLNode !=NULL) 00054 { 00055 pcValue = XMLNode->ToElement()->Attribute("Filename"); 00056 if(pcValue !=NULL) 00057 { 00058 m_strFilename = GetRelPath(pcValue); 00059 LoadXML(NULL, CString(GetAppPath() + pcValue)); 00060 } 00061 } 00062 00063 if(m_pXMLElement !=NULL) 00064 SAFEDEL(m_pXMLElement) 00065 00066 if(XMLNode !=NULL) 00067 m_pXMLElement = XMLNode->Clone()->ToElement(); 00068 else 00069 m_pXMLElement = pDataNode->Clone()->ToElement(); 00070 00071 pcValue = m_pXMLElement->Attribute("Name"); 00072 if(pcValue !=NULL) 00073 { 00074 SetName(CString(pcValue)); 00075 pcValue = NULL; 00076 } 00077 00078 pcValue = m_pXMLElement->Attribute("ID"); 00079 if(pcValue !=NULL) 00080 { 00081 SetID((UINT)atoi(pcValue)); 00082 pcValue = NULL; 00083 } 00084 00085 return 1; 00086 } 00087 00088 int CXMLResource::SaveXML(TiXmlNode *pDataNode, CString strFilename) 00089 { 00090 00091 return 0; 00092 } 00093 00094 bool CXMLResource::PropertyChanging( const void* pvProperty , void* pvNewValue ) 00095 { 00096 bool bChangeOK = CEntity::PropertyChanging(pvProperty, pvNewValue); 00097 00098 return bChangeOK; 00099 } 00100 00101 void CXMLResource::GetProperties( EPropList& PropList ) 00102 { 00103 CEntity::GetProperties(PropList); 00104 00105 PropList.AddPropSeparator(this, "XML Resource"); 00106 PropList.AddPropFile(this, "Filename", &m_strFilename, "XML Files (*.xml)|*.xml|All Files (*.*)|*.*||")->SetComment("Resource' Filename"); 00107 } 00108 00109 void CXMLResource::Destroy() 00110 { 00111 if(m_pXMLElement !=NULL) 00112 { 00113 m_pXMLElement->Clear(); 00114 SAFEDEL(m_pXMLElement) 00115 } 00116 } 00117 00118 bool CXMLResource::IsOfType(eEntityType eType) 00119 { 00120 if(eType == Entity_XMLResource) 00121 return true; 00122 00123 return CResource::IsOfType(eType); 00124 }