{\r
m_pThread = NULL;\r
m_bAltAbortPress=false;\r
+ m_bBufferAll=false;\r
}\r
\r
CProgressDlg::~CProgressDlg()\r
}\r
if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED)\r
{\r
+ if(m_bBufferAll)\r
+ {\r
+ m_Databuf.push_back(0);\r
+ InsertCRLF();\r
+ m_Log.SetWindowText(&m_Databuf[0]);\r
+ }\r
m_BufStart=0;\r
this->m_Databuf.clear();\r
\r
DialogEnableWindow(IDCANCEL, FALSE);\r
}\r
\r
- if(lParam == 0)\r
+ if(!m_bBufferAll)\r
{\r
- for(int i=this->m_BufStart;i<this->m_Databuf.size();i++)\r
+ if(lParam == 0)\r
{\r
- ParserCmdOutput(this->m_Databuf[m_BufStart]);\r
- m_BufStart++;\r
- }\r
- }else\r
- ParserCmdOutput((TCHAR)lParam);\r
-\r
+ for(int i=this->m_BufStart;i<this->m_Databuf.size();i++)\r
+ {\r
+ ParserCmdOutput(this->m_Databuf[m_BufStart]);\r
+ m_BufStart++;\r
+ }\r
+ }else\r
+ ParserCmdOutput((TCHAR)lParam);\r
+ }\r
return 0;\r
}\r
\r
return _ttol(log.Mid(s2,s1-s2));\r
}\r
\r
+#if 0\r
void CProgressDlg::ParserCmdOutput(TCHAR ch)\r
{\r
TRACE(_T("%c"),ch);\r
TRACE(_T("End Char %s \r\n"),ch==_T('\r')?_T("lf"):_T(""));\r
TRACE(_T("End Char %s \r\n"),ch==_T('\n')?_T("cr"):_T(""));\r
\r
- CString text;\r
- m_Log.GetWindowTextW(text);\r
+ int lines=m_Log.GetLineCount();\r
+\r
if(ch == _T('\r'))\r
+ { \r
+ int start=m_Log.LineIndex(lines-1);\r
+ int length=m_Log.LineLength(lines-1);\r
+ m_Log.SetSel( start,start+length);\r
+ m_Log.ReplaceSel(m_LogText);\r
+\r
+ }else\r
{\r
- RemoveLastLine(text);\r
+ m_Log.SetSel(m_Log.GetWindowTextLength(),\r
+ m_Log.GetWindowTextLength());\r
+ m_Log.ReplaceSel(CString(_T("\r\n"))+m_LogText);\r
}\r
- text+=_T("\r\n")+m_LogText;\r
- m_Log.SetWindowTextW(text);\r
\r
+ if( lines > 500 ) //limited log length\r
+ {\r
+ int end=m_Log.LineIndex(1);\r
+ m_Log.SetSel(0,end);\r
+ m_Log.ReplaceSel(_T(""));\r
+ }\r
m_Log.LineScroll(m_Log.GetLineCount());\r
\r
int s1=m_LogText.Find(_T(':'));\r
}\r
\r
}\r
+#endif\r
+\r
+void CProgressDlg::ParserCmdOutput(TCHAR ch)\r
+{\r
+ ParserCmdOutput(this->m_Log,this->m_Progress,this->m_LogText,ch);\r
+}\r
+void CProgressDlg::ParserCmdOutput(CRichEditCtrl &log,CProgressCtrl &progressctrl,CString &oneline, TCHAR ch)\r
+{\r
+ //TRACE(_T("%c"),ch);\r
+ TRACE(_T("%c"),ch);\r
+ if( ch == _T('\r') || ch == _T('\n'))\r
+ {\r
+ TRACE(_T("End Char %s \r\n"),ch==_T('\r')?_T("lf"):_T(""));\r
+ TRACE(_T("End Char %s \r\n"),ch==_T('\n')?_T("cr"):_T(""));\r
+\r
+ int lines=log.GetLineCount();\r
+\r
+ if(ch == _T('\r'))\r
+ { \r
+ int start=log.LineIndex(lines-1);\r
+ int length=log.LineLength(lines-1);\r
+ log.SetSel( start,start+length);\r
+ log.ReplaceSel(oneline);\r
+\r
+ }else\r
+ {\r
+ log.SetSel(log.GetWindowTextLength(),\r
+ log.GetWindowTextLength());\r
+ log.ReplaceSel(CString(_T("\r\n"))+oneline);\r
+ }\r
+ \r
+ if( lines > 500 ) //limited log length\r
+ {\r
+ int end=log.LineIndex(1);\r
+ log.SetSel(0,end);\r
+ log.ReplaceSel(_T(""));\r
+ }\r
+ log.LineScroll(log.GetLineCount());\r
+\r
+ int s1=oneline.Find(_T(':'));\r
+ int s2=oneline.Find(_T('%'));\r
+ if(s1>0 && s2>0)\r
+ {\r
+ //this->m_CurrentWork.SetWindowTextW(m_LogText.Left(s1));\r
+ int pos=FindPercentage(oneline);\r
+ TRACE(_T("Pos %d\r\n"),pos);\r
+ if(pos>0)\r
+ progressctrl.SetPos(pos);\r
+ }\r
+\r
+ oneline=_T("");\r
+\r
+ }else\r
+ {\r
+ oneline+=ch;\r
+ }\r
+\r
+}\r
void CProgressDlg::RemoveLastLine(CString &str)\r
{\r
int start;\r
}\r
void CProgressDlg::OnCancel()\r
{\r
+ m_bAbort = true;\r
if(m_bDone)\r
{\r
CResizableStandAloneDialog::OnCancel();\r
return;\r
}\r
+\r
+ if( g_Git.m_CurrentGitPi.hProcess )\r
+ {\r
+ if(::GenerateConsoleCtrlEvent(CTRL_C_EVENT,0))\r
+ {\r
+ ::WaitForSingleObject(g_Git.m_CurrentGitPi.hProcess ,10000);\r
+ }else\r
+ {\r
+ int error=::GetLastError();\r
+ }\r
+\r
+ HANDLE hProcessHandle = ::OpenProcess( PROCESS_TERMINATE, FALSE,g_Git.m_CurrentGitPi.dwProcessId);\r
+ if( hProcessHandle )\r
+ if(!::TerminateProcess(hProcessHandle,-1) )\r
+ {\r
+ int error =::GetLastError();\r
+ }\r
+ }\r
\r
- m_bAbort = true;\r
+ ::WaitForSingleObject(g_Git.m_CurrentGitPi.hProcess ,10000);\r
+ CResizableStandAloneDialog::OnCancel();\r
+\r
}\r
+\r
+void CProgressDlg::InsertCRLF()\r
+{\r
+ for(int i=0;i<m_Databuf.size();i++)\r
+ {\r
+ if(m_Databuf[i]==_T('\n'))\r
+ {\r
+ if(i==0 || m_Databuf[i-1]!= _T('\r'))\r
+ {\r
+ m_Databuf.insert(m_Databuf.begin()+i,_T('\r'));\r
+ i++;\r
+ }\r
+ }\r
+ }\r
+}
\ No newline at end of file