IMPLEMENT_DYNAMIC(CProgressDlg, CResizableStandAloneDialog)\r
\r
CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/)\r
- : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true)\r
+ : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true), m_bAutoCloseOnSuccess(false), m_bAbort(false), m_bDone(false)\r
{\r
\r
}\r
\r
BEGIN_MESSAGE_MAP(CProgressDlg, CResizableStandAloneDialog)\r
ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI)\r
+ ON_BN_CLICKED(IDOK, &CProgressDlg::OnBnClickedOk)\r
END_MESSAGE_MAP()\r
\r
BOOL CProgressDlg::OnInitDialog()\r
WaitForSingleObject(pi.hProcess, INFINITE);\r
\r
DWORD status=0;\r
- if(!GetExitCodeProcess(pi.hProcess,&status))\r
+ if(!GetExitCodeProcess(pi.hProcess,&status) || m_bAbort)\r
{\r
+ CloseHandle(pi.hProcess);\r
+\r
+ CloseHandle(hRead);\r
+\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_FAILED,0);\r
return GIT_ERROR_GET_EXIT_CODE;\r
}\r
m_GitStatus |= status;\r
m_Animate.Play(0,-1,-1);\r
this->DialogEnableWindow(IDOK,FALSE);\r
}\r
- if(wParam == MSG_PROGRESSDLG_END)\r
+ if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED)\r
{\r
+ m_bDone = true;\r
m_Animate.Stop();\r
m_Progress.SetPos(100);\r
this->DialogEnableWindow(IDOK,TRUE);\r
+ if(wParam == MSG_PROGRESSDLG_END && m_GitStatus == 0)\r
+ {\r
+ if(m_bAutoCloseOnSuccess)\r
+ EndDialog(IDOK);\r
+ if(!m_changeAbortButtonOnSuccessTo.IsEmpty())\r
+ {\r
+ GetDlgItem(IDCANCEL)->SetWindowText(m_changeAbortButtonOnSuccessTo);\r
+ }\r
+ else\r
+ DialogEnableWindow(IDCANCEL, FALSE);\r
+ }\r
+ else\r
+ DialogEnableWindow(IDCANCEL, FALSE);\r
}\r
\r
if(lParam != 0)\r
return;\r
}\r
// CProgressDlg message handlers\r
+\r
+void CProgressDlg::OnBnClickedOk()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ m_Log.GetWindowText(this->m_LogText);\r
+ OnOK();\r
+}\r
+\r
+void CProgressDlg::OnCancel()\r
+{\r
+ if(m_bDone)\r
+ {\r
+ CResizableStandAloneDialog::OnCancel();\r
+ return;\r
+ }\r
+\r
+ m_bAbort = true;\r
+}\r