VOID XmlMenuParseChild(CDUIMenuBuilder* pThis, CDUIXml& xml, CRefPtr<IDUIControl> pParentControl) { IDUIApp* pDUIApp = DUIGetAppInstance(); if(pDUIApp == NULL) return; IDUIControlFactory* pControlFactory = pDUIApp->GetControlFactory(); if(pControlFactory == NULL) return; CDUIString strControlName, strAttriName, strAttriValue; CRefPtr<IDUIControl> pControl; INT nIndex(0); while(xml.FindChildElem()) { xml.IntoElem(); strControlName = xml.GetTagName(); pControl = pControlFactory->NewControl(strControlName); if(pControl.IsNull() && pThis->GetCallBack() != NULL) { pControl = pThis->GetCallBack()->OnBuilderNewControl(strControlName); } DUI_ASSERT(!pControl.IsNull()); if(!pControl.IsNull()) { DUI_ASSERT(pControl->GetInterface(IMenu) != NULL || pControl->GetInterface(IMenuItem) != NULL); nIndex = 0; do { strAttriName = xml.GetAttribName(nIndex++); if(strAttriName.size() <= 0) break; strAttriValue = xml.GetAttrib(strAttriName); pControl->SetAttribute(strAttriName, strAttriValue); } while(TRUE); if(pThis->GetCallBack() != NULL) { pThis->GetCallBack()->OnAddChildControl(pParentControl, pControl); } else { DefAddChildControl(pParentControl, pControl); } XmlMenuParseChild(pThis, xml, pControl); } xml.OutOfElem(); } }
BOOL CDUIListBox::BeforeAddControl(CRefPtr<IDUIControl> pItem) { if(!theBase::BeforeAddControl(pItem)) return FALSE; IDUIListItem* pListItem = (IDUIListItem*)pItem->GetInterface(IListItem); DUI_ASSERT(pListItem != NULL); if(pListItem == NULL) return FALSE; return TRUE; }
DUI_BGN_NAMESPCE BOOL DefAddChildControl(CRefPtr<IDUIControl> pParent, CRefPtr<IDUIControl> pChild) { IDUIComboBox* pComboBox = (IDUIComboBox*)pParent->GetInterface(IComboBox); if(pComboBox != NULL) { pComboBox->AddListItem(pChild); } else { pParent->AddControl(pChild); } return TRUE; }
CRefPtr<IDUIMenu> XmlControlParse(CDUIMenuBuilder* pThis, CDUIXml& xml) { IDUIApp* pDUIApp = DUIGetAppInstance(); if(pDUIApp == NULL) return NULL; IDUIControlFactory* pControlFactory = pDUIApp->GetControlFactory(); if(pControlFactory == NULL) return NULL; if(!xml.FindElem(_T("menu"))) { DUI_ASSERT(FALSE); return NULL; } CRefPtr<IDUIControl> pRootControl = pControlFactory->NewControl(_T("menu")); DUI_ASSERT(!pRootControl.IsNull()); if(pRootControl.IsNull()) return NULL; //parse menu attribute CDUIString strAttriName, strAttriValue; INT nIndex(0); do { strAttriName = xml.GetAttribName(nIndex++); if(strAttriName.size() <= 0) break; strAttriValue = xml.GetAttrib(strAttriName); pRootControl->SetAttribute(strAttriName, strAttriValue); } while(TRUE); XmlMenuParseChild(pThis, xml, pRootControl); if(pThis->GetCallBack() != NULL) { pThis->GetCallBack()->OnBuilderControlCreated(pRootControl); } IDUIMenu* pMenuRet = (IDUIMenu*)pRootControl->GetInterface(IMenu); DUI_ASSERT(pMenuRet != NULL); return pMenuRet; }
VOID CDUITreeViewImpl::OnCreate() { if(m_pVertSB.IsNull()) { CRefPtr<IDUIControl> pNewControl = GetControlFactory()->NewControl(DUI_VERT_SCROLLBAR); if(!pNewControl.IsNull()) { m_pVertSB = (IDUIScrollBar*)pNewControl->GetInterface(IScrollBar); } } if(!m_pVertSB.IsNull()) { DUI_ASSERT(m_pControlMgr != NULL); m_pVertSB->AttachWindow(m_pControlMgr); m_pVertSB->SetScrollOwner(this); } //CheckInitGroupStatus(); }