: CResizableStandAloneDialog(CBrowseRefsDlg::IDD, pParent),\r
m_cmdPath(cmdPath),\r
m_currSortCol(-1),\r
- m_currSortDesc(false)\r
+ m_currSortDesc(false),\r
+ m_initialRef(L"HEAD")\r
{\r
\r
}\r
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_REF, &CBrowseRefsDlg::OnTvnSelchangedTreeRef)\r
ON_WM_CONTEXTMENU()\r
ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST_REF_LEAFS, &CBrowseRefsDlg::OnLvnColumnclickListRefLeafs)\r
+ ON_WM_DESTROY()\r
+ ON_NOTIFY(NM_DBLCLK, IDC_LIST_REF_LEAFS, &CBrowseRefsDlg::OnNMDblclkListRefLeafs)\r
END_MESSAGE_MAP()\r
\r
\r
AddAnchor(IDOK,BOTTOM_RIGHT);\r
AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
\r
- Refresh(true);\r
+ Refresh(m_initialRef);\r
\r
\r
return TRUE;\r
\r
typedef std::map<CString,CString> MAP_STRING_STRING;\r
\r
-void CBrowseRefsDlg::Refresh(bool bSelectCurHead)\r
+CString CBrowseRefsDlg::GetSelectedRef(bool onlyIfLeaf)\r
{\r
-// m_RefMap.clear();\r
-// g_Git.GetMapHashToFriendName(m_RefMap);\r
- \r
- CString selectRef;\r
- if(bSelectCurHead)\r
+ POSITION pos=m_ListRefLeafs.GetFirstSelectedItemPosition();\r
+ //List ctrl selection?\r
+ if(pos)\r
{\r
- g_Git.Run(L"git symbolic-ref HEAD",&selectRef,CP_UTF8);\r
- selectRef.Trim(L"\r\n\t ");\r
+ //A leaf is selected\r
+ CShadowTree* pTree=(CShadowTree*)m_ListRefLeafs.GetItemData(\r
+ m_ListRefLeafs.GetNextSelectedItem(pos));\r
+ return pTree->GetRefName();\r
}\r
- else\r
+ else if(!onlyIfLeaf)\r
{\r
- POSITION pos=m_ListRefLeafs.GetFirstSelectedItemPosition();\r
- //List ctrl selection?\r
- if(pos)\r
+ //Tree ctrl selection?\r
+ HTREEITEM hTree=m_RefTreeCtrl.GetSelectedItem();\r
+ if(hTree!=NULL)\r
{\r
- CShadowTree* pTree=(CShadowTree*)m_ListRefLeafs.GetItemData(\r
- m_ListRefLeafs.GetNextSelectedItem(pos));\r
- selectRef=pTree->GetRefName();\r
+ CShadowTree* pTree=(CShadowTree*)m_RefTreeCtrl.GetItemData(hTree);\r
+ return pTree->GetRefName();\r
}\r
- else\r
+ }\r
+ return CString();//None\r
+}\r
+\r
+void CBrowseRefsDlg::Refresh(CString selectRef)\r
+{\r
+// m_RefMap.clear();\r
+// g_Git.GetMapHashToFriendName(m_RefMap);\r
+ \r
+ if(!selectRef.IsEmpty())\r
+ {\r
+ if(selectRef == "HEAD")\r
{\r
- //Tree ctrl selection?\r
- HTREEITEM hTree=m_RefTreeCtrl.GetSelectedItem();\r
- if(hTree!=NULL)\r
- {\r
- CShadowTree* pTree=(CShadowTree*)m_RefTreeCtrl.GetItemData(hTree);\r
- selectRef=pTree->GetRefName();\r
- }\r
+ selectRef.Empty();\r
+ g_Git.Run(L"git symbolic-ref HEAD",&selectRef,CP_UTF8);\r
+ selectRef.Trim(L"\r\n\t ");\r
}\r
}\r
+ else\r
+ {\r
+ selectRef = GetSelectedRef(false);\r
+ }\r
\r
m_RefTreeCtrl.DeleteAllItems();\r
m_ListRefLeafs.DeleteAllItems();\r
if(pTree->IsFrom(L"refs/remotes"))\r
{\r
// popupMenu.AppendMenu(MF_STRING,eCmd_AddRemote,L"Add Remote");\r
- popupMenu.AppendMenu(MF_STRING,eCmd_ManageRemotes,L"Manage Remotes");\r
+ if(!m_cmdPath.IsEmpty())\r
+ popupMenu.AppendMenu(MF_STRING,eCmd_ManageRemotes,L"Manage Remotes");\r
}\r
else if(pTree->IsFrom(L"refs/heads"))\r
popupMenu.AppendMenu(MF_STRING,eCmd_CreateBranch,L"Create Branch");\r
SetSortArrow(&m_ListRefLeafs,m_currSortCol,!m_currSortDesc);\r
}\r
\r
+void CBrowseRefsDlg::OnDestroy()\r
+{\r
+ m_pickedRef = GetSelectedRef(true);\r
+\r
+ CResizableStandAloneDialog::OnDestroy();\r
+}\r
+\r
+void CBrowseRefsDlg::OnNMDblclkListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+ LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);\r
+ *pResult = 0;\r
+\r
+ EndDialog(IDOK);\r
+}\r
+\r
+CString CBrowseRefsDlg::PickRef(bool returnAsHash, CString initialRef)\r
+{\r
+ CBrowseRefsDlg dlg(CString(),NULL);\r
+ \r
+ dlg.m_initialRef = initialRef;\r
+\r
+ if(dlg.DoModal() != IDOK)\r
+ return CString();\r
+\r
+ return dlg.m_pickedRef;\r
+}\r
+\r
afx_msg void OnBnClickedOk();\r
virtual BOOL OnInitDialog();\r
\r
- void Refresh(bool bSelectCurHead=false);\r
+ CString GetSelectedRef(bool onlyIfLeaf);\r
+\r
+ void Refresh(CString selectRef = CString());\r
\r
CShadowTree& GetTreeNode(CString refName, CShadowTree* pTreePos=NULL, bool bCreateIfNotExist=false);\r
\r
void ShowContextMenu(CPoint point, HTREEITEM hTreePos, VectorPShadowTree& selectedLeafs);\r
virtual BOOL PreTranslateMessage(MSG* pMsg);\r
afx_msg void OnLvnColumnclickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult);\r
+ afx_msg void OnDestroy();\r
+ afx_msg void OnNMDblclkListRefLeafs(NMHDR *pNMHDR, LRESULT *pResult);\r
+\r
+\r
+public:\r
+ CString m_initialRef;\r
+ CString m_pickedRef;\r
+\r
+ static CString PickRef(bool returnAsHash = false, CString initialRef = CString()); \r
};\r