X-Git-Url: http://git.sourceforge.jp/view?p=tortoisegit%2FTortoiseGitJp.git;a=blobdiff_plain;f=src%2FTortoiseProc%2FProgressDlg.cpp;h=a218184144e43d3a674f88e8fd2d76bab719be1c;hp=e1a86dd3bb1d2c5287897304090948acb2e62fe1;hb=1a01c67020ca924a36369cfbe067af94cfe8c561;hpb=c4b08896f2169470b385566491ba3a755f4da76d diff --git a/src/TortoiseProc/ProgressDlg.cpp b/src/TortoiseProc/ProgressDlg.cpp index e1a86dd..a218184 100644 --- a/src/TortoiseProc/ProgressDlg.cpp +++ b/src/TortoiseProc/ProgressDlg.cpp @@ -11,7 +11,7 @@ IMPLEMENT_DYNAMIC(CProgressDlg, CResizableStandAloneDialog) CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/) - : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true) + : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true), m_bAutoCloseOnSuccess(false), m_bAbort(false), m_bDone(false) { } @@ -36,6 +36,7 @@ void CProgressDlg::DoDataExchange(CDataExchange* pDX) BEGIN_MESSAGE_MAP(CProgressDlg, CResizableStandAloneDialog) ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI) + ON_BN_CLICKED(IDOK, &CProgressDlg::OnBnClickedOk) END_MESSAGE_MAP() BOOL CProgressDlg::OnInitDialog() @@ -130,8 +131,13 @@ UINT CProgressDlg::ProgressThread() WaitForSingleObject(pi.hProcess, INFINITE); DWORD status=0; - if(!GetExitCodeProcess(pi.hProcess,&status)) + if(!GetExitCodeProcess(pi.hProcess,&status) || m_bAbort) { + CloseHandle(pi.hProcess); + + CloseHandle(hRead); + + this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_FAILED,0); return GIT_ERROR_GET_EXIT_CODE; } m_GitStatus |= status; @@ -153,11 +159,25 @@ LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam) m_Animate.Play(0,-1,-1); this->DialogEnableWindow(IDOK,FALSE); } - if(wParam == MSG_PROGRESSDLG_END) + if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED) { + m_bDone = true; m_Animate.Stop(); m_Progress.SetPos(100); this->DialogEnableWindow(IDOK,TRUE); + if(wParam == MSG_PROGRESSDLG_END && m_GitStatus == 0) + { + if(m_bAutoCloseOnSuccess) + EndDialog(IDOK); + if(!m_changeAbortButtonOnSuccessTo.IsEmpty()) + { + GetDlgItem(IDCANCEL)->SetWindowText(m_changeAbortButtonOnSuccessTo); + } + else + DialogEnableWindow(IDCANCEL, FALSE); + } + else + DialogEnableWindow(IDCANCEL, FALSE); } if(lParam != 0) @@ -229,3 +249,21 @@ void CProgressDlg::RemoveLastLine(CString &str) return; } // CProgressDlg message handlers + +void CProgressDlg::OnBnClickedOk() +{ + // TODO: Add your control notification handler code here + m_Log.GetWindowText(this->m_LogText); + OnOK(); +} + +void CProgressDlg::OnCancel() +{ + if(m_bDone) + { + CResizableStandAloneDialog::OnCancel(); + return; + } + + m_bAbort = true; +}