void CDuiListBox::LoadItemAttribute(pugi::xml_node xmlNode, LPLBITEM pItem) { pItem->nImage=xmlNode.attribute("img").as_int(pItem->nImage); pItem->lParam=xmlNode.attribute("data").as_uint(pItem->lParam); pItem->strText = DUI_CA2T(xmlNode.text().get(), CP_UTF8); DuiStringPool::getSingleton().BuildString(pItem->strText); }
void CDuiMenu::BuildMenu( HMENU menuPopup,pugi::xml_node xmlNode ) { pugi::xml_node xmlItem=xmlNode.first_child(); while(xmlItem) { if(strcmp("item",xmlItem.name())==0) { DuiMenuItemData *pdmmi=new DuiMenuItemData; pdmmi->hMenu=menuPopup; pdmmi->itemInfo.iIcon=xmlItem.attribute("icon").as_int(-1); pdmmi->itemInfo.strText=DUI_CA2T(xmlItem.text().get(),CP_UTF8); int nID=xmlItem.attribute("id").as_int(0); BOOL bCheck=xmlItem.attribute("check").as_bool(false); BOOL bRadio=xmlItem.attribute("radio").as_bool(false); BOOL bDisable=xmlItem.attribute("disable").as_bool(false); pugi::xml_writer_buff writer; xmlItem.print(writer); CDuiStringW str=DUI_CA2W(CDuiStringA(writer.buffer(),writer.size()),CP_UTF8); pugi::xml_node xmlChild=xmlItem.first_child(); while(xmlChild && xmlChild.type()==pugi::node_pcdata) xmlChild=xmlChild.next_sibling(); if(!xmlChild) { pdmmi->nID=nID; UINT uFlag=MF_OWNERDRAW; if(bCheck) uFlag|=MF_CHECKED; if(bDisable) uFlag |= MF_GRAYED; if(bRadio) uFlag |= MFT_RADIOCHECK|MF_CHECKED; AppendMenu(menuPopup,uFlag,(UINT_PTR)pdmmi->nID,(LPCTSTR)pdmmi); } else { HMENU hSubMenu=::CreatePopupMenu(); pdmmi->nID=(UINT_PTR)hSubMenu; UINT uFlag=MF_OWNERDRAW|MF_POPUP; if(bDisable) uFlag |= MF_GRAYED; AppendMenu(menuPopup,uFlag,(UINT_PTR)hSubMenu,(LPCTSTR)pdmmi); BuildMenu(hSubMenu,xmlItem);//build sub menu } m_arrDmmi.Add(pdmmi); } else if(strcmp("sep",xmlItem.name())==0) { AppendMenu(menuPopup,MF_SEPARATOR|MF_OWNERDRAW,(UINT_PTR)0,(LPCTSTR)NULL); } xmlItem=xmlItem.next_sibling(); } }
BOOL DuiResProviderFiles::Init( LPCTSTR pszPath ) { CMyBuffer<char> xmlBuf; CDuiStringT strPathIndex=pszPath; strPathIndex+=_T("\\"); strPathIndex+=INDEX_XML; FILE *f=_tfopen(strPathIndex,_T("rb")); if(!f) return(FALSE); int nLen=_filelength(_fileno(f)); if(nLen>100*1024) { fclose(f); return FALSE; } xmlBuf.Allocate(nLen); if(nLen!=fread(xmlBuf,1,nLen,f)) { fclose(f); return FALSE; } fclose(f); pugi::xml_document xmlDoc; CDuiStringT strFileName; if(!xmlDoc.load_buffer(xmlBuf,xmlBuf.size(),pugi::parse_default,pugi::encoding_utf8)) return FALSE; pugi::xml_node xmlNode=xmlDoc.child("resid"); while(xmlNode) { DuiResID id(DUI_CA2T(xmlNode.attribute("type").value(),CP_UTF8),xmlNode.attribute("id").as_int(0)); CDuiStringT strFile=DUI_CA2T(xmlNode.attribute("file").value(),CP_UTF8); if(!m_strPath.IsEmpty()) strFile.Format(_T("%s\\%s"),(LPCTSTR)m_strPath,(LPCTSTR)strFile); m_mapFiles[id]=strFile; xmlNode=xmlNode.next_sibling("resid"); } m_strPath=pszPath; return TRUE; }
BOOL CDuiListBox::Load(pugi::xml_node xmlNode) { __super::Load(xmlNode); CDuiStringT strChildSrc = DUI_CA2T(xmlNode.attribute("itemsrc").value(),CP_UTF8); if (strChildSrc.IsEmpty()) return TRUE; pugi::xml_document xmlDoc; if(!DuiSystem::getSingleton().LoadXmlDocment(xmlDoc,strChildSrc,DUIRES_XML_TYPE)) return FALSE; return LoadChildren(xmlDoc.first_child()); }
BOOL DuiStringPool::Init( pugi::xml_node xmlNode ) { if (strcmp(xmlNode.name(), "string") != 0) { DUIASSERT(FALSE); return FALSE; } UINT uStringID = 0; for (pugi::xml_node xmlStr=xmlNode.child("s"); xmlStr; xmlStr=xmlStr.next_sibling("s")) { uStringID=xmlStr.attribute("id").as_int(-1); if(uStringID==-1) continue; CDuiStringA str=xmlStr.text().get(); if(str.IsEmpty()) str=xmlStr.attribute("text").value(); AddKeyObject(uStringID,CDuiStringT(DUI_CA2T(str, CP_UTF8))); } return TRUE; }
BOOL CDuiHeaderCtrl::LoadChildren( pugi::xml_node xmlNode ) { if(!xmlNode || strcmp(xmlNode.name(),"items")!=0) return TRUE; pugi::xml_node xmlItem=xmlNode.child("item"); int iOrder=0; while(xmlItem) { DUIHDITEM item={0}; item.mask=0xFFFFFFFF; item.iOrder=iOrder++; CDuiStringT strTxt=DUI_CA2T(xmlItem.text().get(),CP_UTF8); item.pszText=_tcsdup(strTxt); item.cchTextMax=strTxt.GetLength(); item.cx=xmlItem.attribute("width").as_int(50); item.lParam=xmlItem.attribute("userata").as_uint(0); item.stFlag=(DUIHDSORTFLAG)xmlItem.attribute("sortFlag").as_uint(ST_NULL); m_arrItems.InsertAt(m_arrItems.GetCount(),item); xmlItem=xmlItem.next_sibling("item"); } return TRUE; }