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)\r
{\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
{\r
InitialText = m_PreText + _T("\r\n");\r
}\r
- if (m_bShowCommand)\r
+ if (m_bShowCommand && (!m_GitCmd.IsEmpty() ))\r
{\r
InitialText += m_GitCmd+_T("\r\n\r\n");\r
}\r
m_pThread->m_bAutoDelete = FALSE;\r
m_pThread->ResumeThread();\r
}\r
+\r
+ if(!m_Title.IsEmpty())\r
+ this->SetWindowText(m_Title);\r
return TRUE;\r
}\r
\r
PROCESS_INFORMATION pi;\r
HANDLE hRead;\r
\r
- m_Animate.Play(0,-1,-1);\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_START,0);\r
\r
CString *pfilename;\r
if(m_LogFile.IsEmpty())\r
else\r
pfilename=&m_LogFile;\r
\r
- g_Git.RunAsync(this->m_GitCmd,&pi, &hRead,pfilename);\r
- this->DialogEnableWindow(IDOK,FALSE);\r
+ m_GitCmdList.push_back(m_GitCmd);\r
+\r
+ m_GitStatus =0;\r
\r
- DWORD readnumber;\r
- char buffer[2];\r
- CString output;\r
- while(ReadFile(hRead,buffer,1,&readnumber,NULL))\r
+ for(int i=0;i<m_GitCmdList.size();i++)\r
{\r
- buffer[readnumber]=0;\r
- ParserCmdOutput((TCHAR)buffer[0]);\r
- }\r
+ if(m_GitCmdList[i].IsEmpty())\r
+ continue;\r
\r
- CloseHandle(pi.hThread);\r
+ if (m_bShowCommand && m_GitCmdList[i]!= m_GitCmd)\r
+ {\r
+ CString str;\r
+ str+= m_GitCmdList[i]+_T("\r\n\r\n");\r
+ for(int j=0;j<str.GetLength();j++)\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_RUN,str[j]);\r
+ }\r
\r
- WaitForSingleObject(pi.hProcess, INFINITE);\r
- m_GitStatus =0;\r
+ g_Git.RunAsync(this->m_GitCmdList[i],&pi, &hRead,pfilename);\r
\r
- if(!GetExitCodeProcess(pi.hProcess,&m_GitStatus))\r
- {\r
- return GIT_ERROR_GET_EXIT_CODE;\r
+ DWORD readnumber;\r
+ char buffer[2];\r
+ CString output;\r
+ while(ReadFile(hRead,buffer,1,&readnumber,NULL))\r
+ {\r
+ buffer[readnumber]=0;\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_RUN,(TCHAR)buffer[0]);\r
+ }\r
+ \r
+ CloseHandle(pi.hThread);\r
+\r
+ WaitForSingleObject(pi.hProcess, INFINITE);\r
+ \r
+ DWORD status=0;\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
}\r
\r
CloseHandle(pi.hProcess);\r
\r
CloseHandle(hRead);\r
\r
- m_Progress.SetPos(100);\r
- this->DialogEnableWindow(IDOK,TRUE);\r
+ this->PostMessage(MSG_PROGRESSDLG_UPDATE_UI,MSG_PROGRESSDLG_END,0);\r
\r
- m_Animate.Stop();\r
return 0;\r
}\r
\r
+LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)\r
+{\r
+ if(wParam == MSG_PROGRESSDLG_START)\r
+ {\r
+ m_Animate.Play(0,-1,-1);\r
+ this->DialogEnableWindow(IDOK,FALSE);\r
+ }\r
+ if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED)\r
+ {\r
+ m_Animate.Stop();\r
+ m_Progress.SetPos(100);\r
+ this->DialogEnableWindow(IDOK,TRUE);\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
+ ParserCmdOutput((TCHAR)lParam);\r
+\r
+ return 0;\r
+}\r
int CProgressDlg::FindPercentage(CString &log)\r
{\r
int s1=log.Find(_T('%'));\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
+ m_bAbort = true;\r
+}\r