#include "MessageBox.h"\r
#include "RefLogDlg.h"\r
#include "IconMenu.h"\r
+#include "FileDiffDlg.h"\r
\r
void SetSortArrow(CListCtrl * control, int nColumn, bool bAscending)\r
{\r
\r
typedef std::map<CString,CString> MAP_STRING_STRING;\r
\r
-CString CBrowseRefsDlg::GetSelectedRef(bool onlyIfLeaf)\r
+CString CBrowseRefsDlg::GetSelectedRef(bool onlyIfLeaf, bool pickFirstSelIfMultiSel)\r
{\r
POSITION pos=m_ListRefLeafs.GetFirstSelectedItemPosition();\r
//List ctrl selection?\r
- if(pos)\r
+ if(pos && (pickFirstSelIfMultiSel || m_ListRefLeafs.GetSelectedCount() == 1))\r
{\r
//A leaf is selected\r
CShadowTree* pTree=(CShadowTree*)m_ListRefLeafs.GetItemData(\r
}\r
else\r
{\r
- selectRef = GetSelectedRef(false);\r
+ selectRef = GetSelectedRef(false, true);\r
}\r
\r
m_RefTreeCtrl.DeleteAllItems();\r
// if(pTree==NULL)\r
// return;\r
}\r
+ else if(selectedLeafs.size() == 2)\r
+ {\r
+ bAddSeparator = true;\r
+ \r
+ popupMenu.AppendMenuIcon(eCmd_Diff, L"Diff These Commits", IDI_DIFF);\r
+ }\r
\r
if(bAddSeparator) popupMenu.AppendMenu(MF_SEPARATOR);\r
\r
Refresh();\r
}\r
break;\r
+ case eCmd_Diff:\r
+ {\r
+ CFileDiffDlg dlg;\r
+ dlg.SetDiff(\r
+ NULL, \r
+ selectedLeafs[0]->m_csRefHash, \r
+ selectedLeafs[1]->m_csRefHash);\r
+ dlg.DoModal();\r
+ }\r
+ break;\r
}\r
}\r
\r
\r
void CBrowseRefsDlg::OnDestroy()\r
{\r
- m_pickedRef = GetSelectedRef(true);\r
+ m_pickedRef = GetSelectedRef(true, false);\r
\r
CResizableStandAloneDialog::OnDestroy();\r
}\r
eCmd_DeleteBranch,\r
eCmd_DeleteRemoteBranch,\r
eCmd_DeleteTag,\r
- eCmd_ShowReflog\r
+ eCmd_ShowReflog,\r
+ eCmd_Diff\r
};\r
\r
enum eCol\r
afx_msg void OnBnClickedOk();\r
virtual BOOL OnInitDialog();\r
\r
- CString GetSelectedRef(bool onlyIfLeaf);\r
+ CString GetSelectedRef(bool onlyIfLeaf, bool pickFirstSelIfMultiSel = false);\r
\r
void Refresh(CString selectRef = CString());\r
\r