IMPLEMENT_DYNAMIC(CProgressDlg, CResizableStandAloneDialog)\r
\r
CProgressDlg::CProgressDlg(CWnd* pParent /*=NULL*/)\r
- : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true), m_bAutoCloseOnSuccess(false)\r
+ : CResizableStandAloneDialog(CProgressDlg::IDD, pParent), m_bShowCommand(true), m_bAutoCloseOnSuccess(false), m_bAbort(false)\r
{\r
\r
}\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
m_Animate.Stop();\r
m_Progress.SetPos(100);\r
this->DialogEnableWindow(IDOK,TRUE);\r
- if(m_bAutoCloseOnSuccess && wParam == MSG_PROGRESSDLG_END)\r
- EndDialog(IDOK);\r
+ if(wParam == MSG_PROGRESSDLG_END)\r
+ {\r
+ if(m_bAutoCloseOnSuccess)\r
+ EndDialog(IDOK);\r
+ if(m_changeAbortButtonOnSuccessTo.IsEmpty())\r
+ {\r
+ GetDlgItem(IDCANCEL)->SetWindowText(m_changeAbortButtonOnSuccessTo);\r
+ }\r
+ }\r
+ else\r
+ DialogEnableWindow(IDCANCEL, FALSE);\r
}\r
\r
if(lParam != 0)\r
m_Log.GetWindowText(this->m_LogText);\r
OnOK();\r
}\r
+\r
+void CProgressDlg::OnCancel()\r
+{\r
+ m_bAbort = true;\r
+}\r
CString m_GitCmd;\r
std::vector<CString> m_GitCmdList;\r
bool m_bAutoCloseOnSuccess;\r
+ CString m_changeAbortButtonOnSuccessTo;\r
\r
CString m_LogFile;\r
\r
BOOL m_bShowCommand; // whether to display the command in the log window (default true)\r
CString m_PreText; // optional text to show in log window before running command\r
CString m_LogText;\r
+\r
+ bool m_bAbort;\r
protected:\r
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support\r
static UINT ProgressThreadEntry(LPVOID pVoid);\r
\r
LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
\r
+ void OnCancel();\r
+\r
\r
DECLARE_MESSAGE_MAP()\r
public:\r