Signed-off-by: Frank Li <lznuaa@gmail.com>
#include ".\filediffdlg.h"\r
#include "gitdiff.h"\r
#include "CommonResource.h"\r
#include ".\filediffdlg.h"\r
#include "gitdiff.h"\r
#include "CommonResource.h"\r
+#include "BrowseRefsDlg.h"\r
+#include "LogDlg.h"\r
\r
#define ID_COMPARE 1\r
#define ID_BLAME 2\r
\r
#define ID_COMPARE 1\r
#define ID_BLAME 2\r
\r
void CFileDiffDlg::OnBnClickedRev1btn()\r
{\r
\r
void CFileDiffDlg::OnBnClickedRev1btn()\r
{\r
-#if 0\r
- if (m_bThreadRunning)\r
- return; // do nothing as long as the thread is still running\r
+ \r
+ ClickRevButton(&this->m_cRev1Btn,&this->m_rev1, &this->m_ctrRev1Edit);\r
- // show a dialog where the user can enter a revision\r
- CRevisionDlg dlg(this);\r
- dlg.AllowWCRevs(false);\r
- *((GitRev*)&dlg) = m_rev1;\r
- if (dlg.DoModal() == IDOK)\r
+void CFileDiffDlg::ClickRevButton(CMenuButton *button, GitRev *rev, CEdit *edit)\r
+{\r
+ int entry=button->GetCurrentEntry();\r
+ if(entry == 0) /* Browse Refence*/\r
- m_rev1 = dlg;\r
- m_cRev1Btn.SetWindowText(m_rev1.ToString());\r
- m_cFileList.DeleteAllItems();\r
- // start a new thread to re-fetch the diff\r
- InterlockedExchange(&m_bThreadRunning, TRUE);\r
- if (AfxBeginThread(DiffThreadEntry, this)==NULL)\r
- InterlockedExchange(&m_bThreadRunning, FALSE);\r
- CMessageBox::Show(NULL, IDS_ERR_THREADSTARTFAILED, IDS_APPNAME, MB_OK | MB_ICONERROR);\r
+ CString str = CBrowseRefsDlg::PickRef();\r
+ if(str.IsEmpty())\r
+ return;\r
+ \r
+ if(FillRevFromString(rev,str))\r
+ return;\r
+\r
+ edit->SetWindowText(str);\r
+\r
+ if(entry == 1) /*Log*/\r
+ {\r
+ CLogDlg dlg;\r
+ dlg.SetSelect(true);\r
+ if(dlg.DoModal() == IDOK)\r
+ {\r
+ if( dlg.GetSelectedHash().IsEmpty() )\r
+ return;\r
+\r
+ if(FillRevFromString(rev,dlg.GetSelectedHash()))\r
+ return;\r
+\r
+ edit->SetWindowText(dlg.GetSelectedHash());\r
+\r
+ }else\r
+ return;\r
+ }\r
+\r
+ if(entry == 2) /*RefLog*/\r
+ {\r
+ }\r
+\r
+ SetURLLabels();\r
}\r
\r
void CFileDiffDlg::OnBnClickedRev2btn()\r
{\r
}\r
\r
void CFileDiffDlg::OnBnClickedRev2btn()\r
{\r
+ ClickRevButton(&this->m_cRev2Btn,&this->m_rev2, &this->m_ctrRev2Edit);\r
#if 0\r
if (m_bThreadRunning)\r
return; // do nothing as long as the thread is still running\r
#if 0\r
if (m_bThreadRunning)\r
return; // do nothing as long as the thread is still running\r
void SetURLLabels();\r
void Filter(CString sFilterText);\r
void CopySelectionToClipboard();\r
void SetURLLabels();\r
void Filter(CString sFilterText);\r
void CopySelectionToClipboard();\r
+ \r
+ void ClickRevButton(CMenuButton *button,GitRev *rev, CEdit *edit);\r
+\r
+ int FillRevFromString(GitRev *rev, CString str)\r
+ {\r
+ GitRev gitrev;\r
+ if(gitrev.GetCommit(str))\r
+ {\r
+ CString msg;\r
+ msg.Format(_T("Reference %s is wrong"),str);\r
+ CMessageBox::Show(NULL,msg,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+ return -1;\r
+ }\r
+ *rev=gitrev;\r
+ return 0;\r
+ }\r
+\r
private:\r
static UINT DiffThreadEntry(LPVOID pVoid);\r
UINT DiffThread();\r
private:\r
static UINT DiffThreadEntry(LPVOID pVoid);\r
UINT DiffThread();\r