+\r
+void CBrowseRefsDlg::OnTvnSelchangedTreeRef(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+ LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);\r
+ *pResult = 0;\r
+\r
+ FillListCtrlForTreeNode(pNMTreeView->itemNew.hItem);\r
+}\r
+\r
+void CBrowseRefsDlg::FillListCtrlForTreeNode(HTREEITEM treeNode)\r
+{\r
+ m_ListRefLeafs.DeleteAllItems();\r
+\r
+ CShadowTree* pTree=(CShadowTree*)(m_RefTreeCtrl.GetItemData(treeNode));\r
+ if(pTree==NULL)\r
+ {\r
+ ASSERT(FALSE);\r
+ return;\r
+ }\r
+ FillListCtrlForShadowTree(pTree,L"",true);\r
+}\r
+\r
+void CBrowseRefsDlg::FillListCtrlForShadowTree(CShadowTree* pTree, CString refNamePrefix, bool isFirstLevel)\r
+{\r
+ if(pTree->IsLeaf())\r
+ {\r
+ int indexItem=m_ListRefLeafs.InsertItem(m_ListRefLeafs.GetItemCount(),L"");\r
+\r
+ m_ListRefLeafs.SetItemData(indexItem,(DWORD_PTR)pTree);\r
+ m_ListRefLeafs.SetItemText(indexItem,0,refNamePrefix+pTree->m_csName);\r
+ m_ListRefLeafs.SetItemText(indexItem,3,pTree->m_csRef);\r
+ }\r
+ else\r
+ {\r
+\r
+ CString csThisName;\r
+ if(!isFirstLevel)\r
+ csThisName=refNamePrefix+pTree->m_csName+L"/";\r
+ for(CShadowTree::TShadowTreeMap::iterator itSubTree=pTree->m_ShadowTree.begin(); itSubTree!=pTree->m_ShadowTree.end(); ++itSubTree)\r
+ {\r
+ FillListCtrlForShadowTree(&itSubTree->second,csThisName,false);\r
+ }\r
+ }\r
+}\r