OSDN Git Service

Diff Dialog double click work
authorFrank Li <lznuaa@gmail.com>
Sun, 28 Dec 2008 14:31:25 +0000 (22:31 +0800)
committerFrank Li <lznuaa@gmail.com>
Sun, 28 Dec 2008 14:31:25 +0000 (22:31 +0800)
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/Commands/SwitchCommand.cpp
src/TortoiseProc/FileDiffDlg.cpp
src/TortoiseProc/GitLogList.cpp
src/TortoiseProc/GitSwitchDlg.cpp
src/TortoiseProc/TortoiseProc.vcproj

index 1fba776..07f86d4 100644 (file)
@@ -39,6 +39,7 @@
 #include "MessageBox.h"\r
 #include "GitStatus.h"\r
 #include "CreateBranchTagDlg.h"\r
+#include "GitSwitchDlg.h"\r
 \r
 CAppUtils::CAppUtils(void)\r
 {\r
@@ -1147,4 +1148,40 @@ bool CAppUtils::CreateBranchTag(bool IsTag,CString *CommitHash)
                \r
        }\r
        return FALSE;\r
+}\r
+\r
+bool CAppUtils::Switch(CString *CommitHash)\r
+{\r
+       CGitSwitchDlg dlg;\r
+       if(CommitHash)\r
+               dlg.m_Base=*CommitHash;\r
+       \r
+       if (dlg.DoModal() == IDOK)\r
+       {\r
+               CString cmd;\r
+               CString track;\r
+               CString base;\r
+               CString force;\r
+               CString branch;\r
+\r
+               if(dlg.m_bBranch)\r
+                       branch.Format(_T("-b %s"),dlg.m_NewBranch);\r
+               if(dlg.m_bForce)\r
+                       force=_T("-f");\r
+               if(dlg.m_bTrack)\r
+                       track=_T("--track");\r
+\r
+               cmd.Format(_T("git.exe checkout %s %s %s %s"),\r
+                        force,\r
+                        track,\r
+                        branch,\r
+                        dlg.m_Base);\r
+\r
+               CProgressDlg progress;\r
+               progress.m_GitCmd=cmd;\r
+               if(progress.DoModal()==IDOK)\r
+                       return TRUE;\r
+\r
+       }\r
+       return FALSE;\r
 }
\ No newline at end of file
index 90b3f9b..18cc961 100644 (file)
@@ -162,6 +162,7 @@ public:
        \r
        static bool Export(CString *BashHash=NULL);\r
        static bool CreateBranchTag(bool IsTag=TRUE,CString *CommitHash=NULL);\r
+       static bool Switch(CString *CommitHash);\r
 \r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
index 299b53e..5582227 100644 (file)
 #include "GitSwitchDlg.h"\r
 #include "ProgressDlg.h"\r
 #include "MessageBox.h"\r
+#include "AppUtils.h"\r
 \r
 bool SwitchCommand::Execute()\r
 {\r
-       CGitSwitchDlg dlg;\r
-       \r
-       if (dlg.DoModal() == IDOK)\r
-       {\r
-               CString cmd;\r
-               CString track;\r
-               CString base;\r
-               CString force;\r
-               CString branch;\r
-\r
-               if(dlg.m_bBranch)\r
-                       branch.Format(_T("-b %s"),dlg.m_NewBranch);\r
-               if(dlg.m_bForce)\r
-                       force=_T("-f");\r
-               if(dlg.m_bTrack)\r
-                       track=_T("--track");\r
-\r
-               cmd.Format(_T("git.exe checkout %s %s %s %s"),\r
-                        force,\r
-                        track,\r
-                        branch,\r
-                        dlg.m_Base);\r
-\r
-               CProgressDlg progress;\r
-               progress.m_GitCmd=cmd;\r
-               if(progress.DoModal()==IDOK)\r
-                       return TRUE;\r
-\r
-       }\r
-       return false;\r
+       return CAppUtils::CreateBranchTag(NULL);\r
 }\r
index dd328af..3dc296f 100644 (file)
@@ -30,6 +30,7 @@
 #include "BrowseFolder.h"\r
 #include "RevisionDlg.h"\r
 #include ".\filediffdlg.h"\r
+#include "gitdiff.h"\r
 \r
 #define ID_COMPARE 1\r
 #define ID_BLAME 2\r
@@ -96,19 +97,6 @@ void CFileDiffDlg::SetDiff(CTGitPath * path, GitRev rev1, GitRev rev2)
        \r
 }\r
 \r
-#if 0\r
-void CFileDiffDlg::SetDiff(const CTGitPath& path1, GitRev rev1, const CTGitPath& path2, GitRev rev2, svn_depth_t depth, bool ignoreancestry)\r
-{\r
-       m_bDoPegDiff = false;\r
-       m_path1 = path1;\r
-       m_path2 = path2;\r
-       m_rev1 = rev1;\r
-       m_rev2 = rev2;\r
-       m_depth = depth;\r
-       m_bIgnoreancestry = ignoreancestry;\r
-}\r
-#endif\r
-\r
 BOOL CFileDiffDlg::OnInitDialog()\r
 {\r
        CResizableStandAloneDialog::OnInitDialog();\r
@@ -229,11 +217,17 @@ UINT CFileDiffDlg::DiffThread()
 #endif\r
        CString cmd;\r
        CString rev1=m_rev1.m_CommitHash;\r
-       if(this->m_rev1.m_CommitHash == GIT_REV_ZERO )\r
+       if(this->m_rev1.m_CommitHash == GIT_REV_ZERO || this->m_rev2.m_CommitHash == GIT_REV_ZERO)\r
        {\r
                rev1=+_T("");\r
+               if(this->m_rev1.m_CommitHash == GIT_REV_ZERO)\r
+                       cmd.Format(_T("git.exe diff -r --raw -C -M --numstat  %s"),m_rev2.m_CommitHash);\r
+               else\r
+                       cmd.Format(_T("git.exe diff -r -R --raw -C -M --numstat  %s"),m_rev1.m_CommitHash);\r
+       }else\r
+       {\r
+               cmd.Format(_T("git.exe diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
        }\r
-       cmd.Format(_T("git.cmd diff-tree -r --raw -C -M --numstat %s %s"),rev1,m_rev2.m_CommitHash);\r
        CString out;\r
        g_Git.Run(cmd,&out);\r
        this->m_arFileList.ParserFromLog(out);\r
@@ -291,6 +285,11 @@ int CFileDiffDlg::AddEntry(const CTGitPath * fd)
 \r
 void CFileDiffDlg::DoDiff(int selIndex, bool blame)\r
 {\r
+\r
+       CGitDiff diff;\r
+       CTGitPath* fd = m_arFilteredList[selIndex];\r
+       diff.Diff(fd, this->m_rev1.m_CommitHash, this->m_rev2.m_CommitHash, blame, FALSE);\r
+\r
 #if 0\r
        CFileDiffDlg::CTGitPath* fd = m_arFilteredList[selIndex];\r
 \r
@@ -514,15 +513,15 @@ void CFileDiffDlg::OnNMDblclkFilelist(NMHDR *pNMHDR, LRESULT *pResult)
 \r
 void CFileDiffDlg::OnLvnGetInfoTipFilelist(NMHDR *pNMHDR, LRESULT *pResult)\r
 {\r
-#if 0\r
+\r
        LPNMLVGETINFOTIP pGetInfoTip = reinterpret_cast<LPNMLVGETINFOTIP>(pNMHDR);\r
        if (pGetInfoTip->iItem >= (int)m_arFilteredList.size())\r
                return;\r
 \r
-       CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem].path.GetGitPathString();\r
+       CString path = m_path1.GetGitPathString() + _T("/") + m_arFilteredList[pGetInfoTip->iItem]->GetGitPathString();\r
        if (pGetInfoTip->cchTextMax > path.GetLength())\r
                        _tcsncpy_s(pGetInfoTip->pszText, pGetInfoTip->cchTextMax, path, pGetInfoTip->cchTextMax);\r
-#endif\r
+\r
        *pResult = 0;\r
 }\r
 \r
@@ -598,14 +597,14 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                temp.LoadString(IDS_LOG_POPUP_COMPARETWO);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_COMPARE, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPBLAME);\r
-               popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
+               //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_BLAME, temp);\r
                popup.AppendMenu(MF_SEPARATOR, NULL);\r
                temp.LoadString(IDS_FILEDIFF_POPSAVELIST);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_SAVEAS, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPCLIPBOARD);\r
                popup.AppendMenu(MF_STRING | MF_ENABLED, ID_CLIPBOARD, temp);\r
                temp.LoadString(IDS_FILEDIFF_POPEXPORT);\r
-               popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
+               //popup.AppendMenu(MF_STRING | MF_ENABLED, ID_EXPORT, temp);\r
                int cmd = popup.TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN | TPM_NONOTIFY, point.x, point.y, this, 0);\r
                m_bCancelled = false;\r
                switch (cmd)\r
@@ -673,6 +672,7 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                        break;\r
                case ID_EXPORT:\r
                        {\r
+#if 0 //this funcation seem no useful\r
                                // export all changed files to a folder\r
                                CBrowseFolder browseFolder;\r
                                browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
@@ -694,8 +694,11 @@ void CFileDiffDlg::OnContextMenu(CWnd* pWnd, CPoint point)
                                                CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
                                        }\r
                                }\r
+#endif;                                \r
                        }\r
+\r
                        break;\r
+\r
                }\r
        }\r
 }\r
@@ -809,7 +812,7 @@ void CFileDiffDlg::OnEnSetfocusSecondurl()
 \r
 void CFileDiffDlg::OnBnClickedSwitchleftright()\r
 {\r
-#if 0\r
+\r
        if (m_bThreadRunning)\r
                return;\r
        CString sFilterString;\r
@@ -817,14 +820,14 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
 \r
        m_cFileList.SetRedraw(false);\r
        m_cFileList.DeleteAllItems();\r
-       for (int i=0; i<(int)m_arFileList.size(); ++i)\r
+       for (int i=0; i<(int)m_arFileList.GetCount(); ++i)\r
        {\r
                CTGitPath fd = m_arFileList[i];\r
-               if (fd.kind == svn_client_diff_summarize_kind_added)\r
-                       fd.kind = svn_client_diff_summarize_kind_deleted;\r
-               else if (fd.kind == svn_client_diff_summarize_kind_deleted)\r
-                       fd.kind = svn_client_diff_summarize_kind_added;\r
-               m_arFileList[i] = fd;\r
+               if (fd.m_Action == CTGitPath::LOGACTIONS_ADDED)\r
+                       fd.m_Action = CTGitPath::LOGACTIONS_DELETED;\r
+               else if (fd.m_Action == CTGitPath::LOGACTIONS_DELETED)\r
+                       fd.m_Action = CTGitPath::LOGACTIONS_ADDED;\r
+               ( CTGitPath)m_arFileList[i] = ( CTGitPath)fd;\r
        }\r
        Filter(sFilterString);\r
 \r
@@ -836,7 +839,7 @@ void CFileDiffDlg::OnBnClickedSwitchleftright()
        m_rev1 = m_rev2;\r
        m_rev2 = rev;\r
        SetURLLabels();\r
-#endif\r
+\r
 }\r
 \r
 void CFileDiffDlg::SetURLLabels()\r
index e54dc13..cfefc00 100644 (file)
@@ -68,6 +68,9 @@ CGitLogList::CGitLogList():CHintListCtrl()
        lf.lfWeight = FW_BOLD;
        m_boldFont = CreateFontIndirect(&lf);
 
+       m_wcRev.m_CommitHash=GIT_REV_ZERO;
+       m_wcRev.m_Subject=_T("Working Copy");
+
        m_hModifiedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONMODIFIED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
        m_hReplacedIcon = (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONREPLACED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
        m_hAddedIcon    =  (HICON)LoadImage(AfxGetResourceHandle(), MAKEINTRESOURCE(IDI_ACTIONADDED), IMAGE_ICON, 0, 0, LR_DEFAULTSIZE);
@@ -1083,7 +1086,26 @@ void CGitLogList::OnContextMenu(CWnd* pWnd, CPoint point)
                                
                        }
                        break;
-               
+               case ID_COMPARE:
+                       {
+                               GitRev * r1 = &m_wcRev;
+                               GitRev * r2 = pSelLogEntry;
+                               CFileDiffDlg dlg;
+                               dlg.SetDiff(NULL,*r1,*r2);
+                               dlg.DoModal();
+
+                               //user clicked on the menu item "compare with working copy"
+                               //if (PromptShown())
+                               //{
+                               //      GitDiff diff(this, m_hWnd, true);
+                               //      diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
+                               //      diff.SetHEADPeg(m_LogRevision);
+                               //      diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected);
+                               //}
+                               //else
+                               //      CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
+                       }
+                       break;
                case ID_COPYCLIPBOARD:
                        {
                                CopySelectionToClipBoard();
@@ -1109,6 +1131,10 @@ void CGitLogList::OnContextMenu(CWnd* pWnd, CPoint point)
                        g_Git.GetMapHashToFriendName(m_HashMap);
                        Invalidate();
                        break;
+               case ID_SWITCHTOREV:
+                       CAppUtils::Switch(&pSelLogEntry->m_CommitHash);
+                       break;
+               
 
                default:
                        CMessageBox::Show(NULL,_T("Have not implemented"),_T("TortoiseGit"),MB_OK);
@@ -1260,20 +1286,7 @@ void CGitLogList::OnContextMenu(CWnd* pWnd, CPoint point)
                                }
                        } 
                        break;
-               case ID_COMPARE:
-                       {
-                               //user clicked on the menu item "compare with working copy"
-                               if (PromptShown())
-                               {
-                                       GitDiff diff(this, m_hWnd, true);
-                                       diff.SetAlternativeTool(!!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
-                                       diff.SetHEADPeg(m_LogRevision);
-                                       diff.ShowCompare(m_path, GitRev::REV_WC, m_path, revSelected);
-                               }
-                               else
-                                       CAppUtils::StartShowCompare(m_hWnd, m_path, GitRev::REV_WC, m_path, revSelected, GitRev(), m_LogRevision, !!(GetAsyncKeyState(VK_SHIFT) & 0x8000));
-                       }
-                       break;
+
                case ID_COMPARETWO:
                        {
                                GitRev r1 = revSelected;
index 71d70e2..981897f 100644 (file)
@@ -59,7 +59,14 @@ BOOL CGitSwitchDlg::OnInitDialog()
 \r
        CHOOSE_VERSION_ADDANCHOR;\r
        Init();\r
-       SetDefaultChoose(IDC_RADIO_BRANCH);\r
+\r
+       if(m_Base.IsEmpty())\r
+               SetDefaultChoose(IDC_RADIO_BRANCH);\r
+       else\r
+       {\r
+               this->GetDlgItem(IDC_COMBOBOXEX_VERSION)->SetWindowTextW(m_Base);\r
+               SetDefaultChoose(IDC_RADIO_VERSION);\r
+       }\r
 \r
        OnBnClickedCheckBranch();\r
        this->GetDlgItem(IDC_CHECK_TRACK)->EnableWindow(FALSE);\r
index 856d489..4aa809c 100644 (file)
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\explorer.ico"\r
+                               RelativePath=".\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\explorer.ico"\r
+                               RelativePath="..\Resources\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\newfolder.ico"\r
+                               RelativePath=".\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\newfolder.ico"\r
+                               RelativePath="..\Resources\newfolder.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\open.ico"\r
+                               RelativePath=".\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\open.ico"\r
+                               RelativePath="..\Resources\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\save.ico"\r
+                               RelativePath=".\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\save.ico"\r
+                               RelativePath="..\Resources\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\saveas.ico"\r
+                               RelativePath=".\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\saveas.ico"\r
+                               RelativePath="..\Resources\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\up.ico"\r
+                               RelativePath=".\up.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\up.ico"\r
+                               RelativePath="..\Resources\up.ico"\r
                                >\r
                        </File>\r
                        <File\r