void CDesertConfigDialog::FillCfgTree() { m_cfgtree.DeleteAllItems(); DesertIface::Space space; dhelper_ptr->getDesertIfaceSpace(space); std::string iname = space.name(); TVINSERTSTRUCT tvInsert; tvInsert.hParent = NULL; tvInsert.hInsertAfter = NULL; tvInsert.item.mask = TVIF_TEXT; tvInsert.item.pszText = _T("DesignSpace"); m_cfgTreeRootItem = m_cfgtree.InsertItem(&tvInsert); // m_cfgtree.SetItemState( m_cfgTreeRootItem, TVIS_BOLD, TVIS_BOLD ); //bold // m_cfgtree.SetItemState( cfg_root, 0, TVIS_BOLD ); //unbold set<DesertIface::Element> elems = space.Element_kind_children(); for(set<DesertIface::Element>::iterator i=elems.begin();i!=elems.end();++i) { if(!dhelper_ptr->isElementExist((*i).externalID())) continue; iname = (*i).name(); HTREEITEM elem_node = m_cfgtree.InsertItem(utf82cstring(iname), m_cfgTreeRootItem, TVI_LAST); FillCfgTree(DesertIface::Element(*i), elem_node); m_cfgtree.SortChildren(elem_node); m_cfgtree.Expand(elem_node,TVE_EXPAND); cfgTreeMap[elem_node]=(*i).externalID(); } m_cfgtree.SortChildren(m_cfgTreeRootItem); m_cfgtree.Expand(m_cfgTreeRootItem, TVE_EXPAND); }
BOOL CDesertConfigDialog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here stringstream ss; long cfgCount = dhelper_ptr->getRealConfigCount(); if(cfgCount == -2) { cfgSizeInfo = "Design Space Too Large"; } else if(cfgCount == -1) { cfgSizeInfo = "Not calculated yet"; } else { ss << cfgCount; cfgSizeInfo = ss.str(); } /*std::string info = "Total Configurations: \t"+(std::string)cnt_buff+"\r\nChecked Configurations: \t0"; m_cfgsize.SetWindowText(info.c_str());*/ updateSize(0); FillCfgList(); FillCfgTree(); m_blInited = false; //initialize resize anchor BOOL bOk = FALSE; bOk = m_resizer.Hook(this); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_CFGSIZE, ANCHOR_HORIZONTALLY | ANCHOR_TOP); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_CLEARALLETN, ANCHOR_TOP | ANCHOR_RIGHT); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_CFGLIST, ANCHOR_VERTICALLY); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_CFGTREE, ANCHOR_ALL); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_EXPORTSELBTN, ANCHOR_BOTTOM ); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_EXPORTALLBTN, ANCHOR_BOTTOM | ANCHOR_LEFT); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDCANCEL, ANCHOR_BOTTOM |ANCHOR_RIGHT ); ASSERT( bOk); bOk = m_resizer.SetAnchor(IDC_CLOSEALLBTN, ANCHOR_BOTTOM | ANCHOR_RIGHT ); ASSERT( bOk); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE }
void CDesertConfigDialog::FillCfgTree(DesertIface::Element &elem, HTREEITEM parent) { set<DesertIface::Element> elems = elem.Element_kind_children(); for(set<DesertIface::Element>::iterator i=elems.begin();i!=elems.end();++i) { if(!dhelper_ptr->isElementExist((*i).externalID())) continue; DesertIface::Element currElem = *i; std::string iname = currElem.name(); if(currElem.decomposition()) iname+=" [Compound]"; else { set<DesertIface::Element> child_elems = currElem.Element_kind_children(); if(!child_elems.empty()) { if(dhelper_ptr->isOptionalElement(currElem)) iname+=" [Optional]"; else iname+=" [Alternative]"; } else { //add number it envolved in configurations [#/total#] if(iname=="null") { int cnt = dhelper_ptr->getElementInConfigsCount(currElem.externalID()); char buffer[10]; _itoa(cnt, buffer, 10); iname = iname + " [" +(std::string)buffer+"/"+cfgSizeInfo+"]"; } else { std::string cnt_str = dhelper_ptr->getElementInConfigsString(currElem.externalID()); iname = iname + " [" +cnt_str+"]"; } } } HTREEITEM elem_node = m_cfgtree.InsertItem(utf82cstring(iname), parent, TVI_LAST); FillCfgTree(DesertIface::Element(*i),elem_node); m_cfgtree.SortChildren(elem_node); m_cfgtree.Expand(elem_node,TVE_EXPAND); cfgTreeMap[elem_node]=(*i).externalID(); } //leaf node }