OSDN Git Service

BrowseRefsDlg: Add ability to diff two commits
authorJohan 't Hart <johanthart@gmail.com>
Sun, 14 Jun 2009 12:42:37 +0000 (14:42 +0200)
committerJohan 't Hart <johanthart@gmail.com>
Sun, 14 Jun 2009 12:42:37 +0000 (14:42 +0200)
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/BrowseRefsDlg.cpp
src/TortoiseProc/BrowseRefsDlg.h
src/TortoiseProc/FileDiffDlg.h

index dcea82c..aadb3b4 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 278853b..c0701e2 100644 (file)
@@ -12,6 +12,7 @@
 #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
@@ -160,11 +161,11 @@ CShadowTree* CShadowTree::FindLeaf(CString partialRefName)
 \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
@@ -200,7 +201,7 @@ void CBrowseRefsDlg::Refresh(CString selectRef)
        }\r
        else\r
        {\r
-               selectRef = GetSelectedRef(false);\r
+               selectRef = GetSelectedRef(false, true);\r
        }\r
 \r
        m_RefTreeCtrl.DeleteAllItems();\r
@@ -578,6 +579,12 @@ void CBrowseRefsDlg::ShowContextMenu(CPoint point, HTREEITEM hTreePos, VectorPSh
 //             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
@@ -654,6 +661,16 @@ void CBrowseRefsDlg::ShowContextMenu(CPoint point, HTREEITEM hTreePos, VectorPSh
                        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
@@ -753,7 +770,7 @@ void CBrowseRefsDlg::OnLvnColumnclickListRefLeafs(NMHDR *pNMHDR, LRESULT *pResul
 \r
 void CBrowseRefsDlg::OnDestroy()\r
 {\r
-       m_pickedRef = GetSelectedRef(true);\r
+       m_pickedRef = GetSelectedRef(true, false);\r
 \r
        CResizableStandAloneDialog::OnDestroy();\r
 }\r
index bf3fafb..f379dd6 100644 (file)
@@ -67,7 +67,8 @@ public:
                eCmd_DeleteBranch,\r
                eCmd_DeleteRemoteBranch,\r
                eCmd_DeleteTag,\r
-               eCmd_ShowReflog\r
+               eCmd_ShowReflog,\r
+               eCmd_Diff\r
        };\r
 \r
        enum eCol\r
@@ -89,7 +90,7 @@ public:
        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
index e94a8b5..74496ab 100644 (file)
@@ -28,6 +28,7 @@
 #include "XPImageButton.h"\r
 #include "FilterEdit.h"\r
 #include "Tooltip.h"\r
+#include "ProgressDlg.h"\r
 \r
 \r
 #define IDT_FILTER             101\r