void CBrowseRefsDlg::DoDataExchange(CDataExchange* pDX)\r
{\r
CDialog::DoDataExchange(pDX);\r
- DDX_Control(pDX, IDC_TREE_REF, m_RefTreeCtrl);\r
+ DDX_Control(pDX, IDC_TREE_REF, m_RefTreeCtrl);\r
+ DDX_Control(pDX, IDC_LIST_REF_LEAFS, m_ListRefLeafs);\r
}\r
\r
\r
BEGIN_MESSAGE_MAP(CBrowseRefsDlg, CResizableStandAloneDialog)\r
ON_BN_CLICKED(IDOK, &CBrowseRefsDlg::OnBnClickedOk)\r
+ ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_REF, &CBrowseRefsDlg::OnTvnSelchangedTreeRef)\r
END_MESSAGE_MAP()\r
\r
\r
{\r
CResizableStandAloneDialog::OnInitDialog();\r
\r
- AddAnchor(IDC_TREE_REF, TOP_LEFT, BOTTOM_RIGHT);\r
+ AddAnchor(IDC_TREE_REF, TOP_LEFT, BOTTOM_LEFT);\r
+ AddAnchor(IDC_LIST_REF_LEAFS, TOP_LEFT, BOTTOM_RIGHT);\r
+\r
+ m_ListRefLeafs.SetExtendedStyle(m_ListRefLeafs.GetExtendedStyle()|LVS_EX_FULLROWSELECT);\r
+ m_ListRefLeafs.InsertColumn(0,L"Name",0,150);\r
+ m_ListRefLeafs.InsertColumn(1,L"Date Last Commit",0,100);\r
+ m_ListRefLeafs.InsertColumn(2,L"Last Commit",0,300);\r
+ m_ListRefLeafs.InsertColumn(3,L"Hash",0,80);\r
\r
AddAnchor(IDOK,BOTTOM_RIGHT);\r
AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
Refresh();\r
\r
\r
- return TRUE; // return TRUE unless you set the focus to a control\r
- // EXCEPTION: OCX Property Pages should return FALSE\r
+ return TRUE;\r
}\r
\r
CShadowTree* CShadowTree::GetNextSub(CString& nameLeft)\r
ASSERT(FALSE);\r
return *pTreePos;\r
}\r
- if(pNextTree->m_hTree==NULL)\r
+\r
+ if(!refName.IsEmpty())\r
{\r
- //New tree. Create node in control.\r
- pNextTree->m_hTree=m_RefTreeCtrl.InsertItem(pNextTree->m_csName,pTreePos->m_hTree,NULL);\r
- m_RefTreeCtrl.SetItemData(pNextTree->m_hTree,(DWORD_PTR)pNextTree);\r
+ //When the refName is not empty, this node is not a leaf, so lets add it to the tree control.\r
+ //Leafs are for the list control.\r
+ if(pNextTree->m_hTree==NULL)\r
+ {\r
+ //New tree. Create node in control.\r
+ pNextTree->m_hTree=m_RefTreeCtrl.InsertItem(pNextTree->m_csName,pTreePos->m_hTree,NULL);\r
+ m_RefTreeCtrl.SetItemData(pNextTree->m_hTree,(DWORD_PTR)pNextTree);\r
+ }\r
}\r
\r
return GetTreeNode(refName,pNextTree);\r
}\r
\r
+\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