From 2412f0d54aad5e12bcd4e2d6261f0e3433ddff42 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Sat, 23 Jan 2010 19:53:15 +0800 Subject: [PATCH] Diff file list dialog click log is okay Signed-off-by: Frank Li --- src/TortoiseProc/FileDiffDlg.cpp | 59 ++++++++++++++++++++++++++++------------ src/TortoiseProc/FileDiffDlg.h | 17 ++++++++++++ 2 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/TortoiseProc/FileDiffDlg.cpp b/src/TortoiseProc/FileDiffDlg.cpp index 7a0ac48..c9c8fed 100644 --- a/src/TortoiseProc/FileDiffDlg.cpp +++ b/src/TortoiseProc/FileDiffDlg.cpp @@ -32,6 +32,8 @@ #include ".\filediffdlg.h" #include "gitdiff.h" #include "CommonResource.h" +#include "BrowseRefsDlg.h" +#include "LogDlg.h" #define ID_COMPARE 1 #define ID_BLAME 2 @@ -1068,33 +1070,56 @@ bool CFileDiffDlg::SortCompare(const CTGitPath*& Data1, const CTGitPath*& Data2) void CFileDiffDlg::OnBnClickedRev1btn() { -#if 0 - if (m_bThreadRunning) - return; // do nothing as long as the thread is still running + + ClickRevButton(&this->m_cRev1Btn,&this->m_rev1, &this->m_ctrRev1Edit); - // show a dialog where the user can enter a revision - CRevisionDlg dlg(this); - dlg.AllowWCRevs(false); - *((GitRev*)&dlg) = m_rev1; +} - if (dlg.DoModal() == IDOK) +void CFileDiffDlg::ClickRevButton(CMenuButton *button, GitRev *rev, CEdit *edit) +{ + int entry=button->GetCurrentEntry(); + if(entry == 0) /* Browse Refence*/ { - m_rev1 = dlg; - m_cRev1Btn.SetWindowText(m_rev1.ToString()); - m_cFileList.DeleteAllItems(); - // start a new thread to re-fetch the diff - InterlockedExchange(&m_bThreadRunning, TRUE); - if (AfxBeginThread(DiffThreadEntry, this)==NULL) { - InterlockedExchange(&m_bThreadRunning, FALSE); - CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR); + CString str = CBrowseRefsDlg::PickRef(); + if(str.IsEmpty()) + return; + + if(FillRevFromString(rev,str)) + return; + + edit->SetWindowText(str); } } -#endif + + if(entry == 1) /*Log*/ + { + CLogDlg dlg; + dlg.SetSelect(true); + if(dlg.DoModal() == IDOK) + { + if( dlg.GetSelectedHash().IsEmpty() ) + return; + + if(FillRevFromString(rev,dlg.GetSelectedHash())) + return; + + edit->SetWindowText(dlg.GetSelectedHash()); + + }else + return; + } + + if(entry == 2) /*RefLog*/ + { + } + + SetURLLabels(); } void CFileDiffDlg::OnBnClickedRev2btn() { + ClickRevButton(&this->m_cRev2Btn,&this->m_rev2, &this->m_ctrRev2Edit); #if 0 if (m_bThreadRunning) return; // do nothing as long as the thread is still running diff --git a/src/TortoiseProc/FileDiffDlg.h b/src/TortoiseProc/FileDiffDlg.h index 1ceaca1..4ef30ac 100644 --- a/src/TortoiseProc/FileDiffDlg.h +++ b/src/TortoiseProc/FileDiffDlg.h @@ -100,6 +100,23 @@ protected: void SetURLLabels(); void Filter(CString sFilterText); void CopySelectionToClipboard(); + + void ClickRevButton(CMenuButton *button,GitRev *rev, CEdit *edit); + + int FillRevFromString(GitRev *rev, CString str) + { + GitRev gitrev; + if(gitrev.GetCommit(str)) + { + CString msg; + msg.Format(_T("Reference %s is wrong"),str); + CMessageBox::Show(NULL,msg,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return -1; + } + *rev=gitrev; + return 0; + } + private: static UINT DiffThreadEntry(LPVOID pVoid); UINT DiffThread(); -- 2.11.0