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
}\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
CProgressCtrl m_Progress;\r
\r
- CEdit m_Log;\r
+ CRichEditCtrl m_Log;\r
CString m_Title;\r
CAnimateCtrl m_Animate;\r
CStatic m_CurrentWork;\r
UINT ProgressThread();\r
\r
void ParserCmdOutput(TCHAR ch);\r
- \r
void RemoveLastLine(CString &str);\r
\r
LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
\r
//Share with Sync Dailog\r
static int FindPercentage(CString &log);\r
+ static void ParserCmdOutput(CRichEditCtrl &log,CProgressCtrl &progressctrl,CString &oneline, TCHAR ch);\r
+\r
static UINT RunCmdList(CWnd *pWnd,std::vector<CString> &cmdlist,bool bShowCommand,CString *pfilename,bool *bAbort,std::vector<TCHAR> *pdata=NULL);\r
\r
afx_msg void OnBnClickedOk();\r
\r
void CSyncDlg::ParserCmdOutput(TCHAR ch)\r
{\r
- //TRACE(_T("%c"),ch);\r
- int linenum;\r
- int index;\r
- linenum = this->m_ctrlCmdOut.GetLineCount();\r
-\r
- if( ch == _T('\r') )\r
- {\r
- if(linenum>0)\r
- m_CmdOutCurrentPos = this->m_ctrlCmdOut.LineIndex(linenum-1);\r
- else\r
- m_CmdOutCurrentPos = 0;\r
-\r
- //TRACE(_T("line %d - %d\n"),index,m_ctrlCmdOut.GetTextLength());\r
- }else\r
- m_CmdOutCurrentPos++;\r
- \r
- this->m_ctrlCmdOut.SetSel(m_CmdOutCurrentPos,m_CmdOutCurrentPos+1);\r
- \r
- if( ch != _T('\r') )\r
- this->m_ctrlCmdOut.ReplaceSel(CString(ch));\r
- \r
- int firstline = m_ctrlCmdOut.GetFirstVisibleLine();\r
- if( linenum - firstline > 4 )\r
- this->m_ctrlCmdOut.LineScroll(linenum - firstline -4);\r
-\r
- if( ch == _T('\r') || ch == _T('\n') )\r
- {\r
- int s1=m_LogText.Find(_T(':'));\r
- int s2=m_LogText.Find(_T('%'));\r
- if(s1>0 && s2>0)\r
- {\r
- // this->m_CurrentWork.SetWindowTextW(m_LogText.Left(s1));\r
- int pos=CProgressDlg::FindPercentage(m_LogText);\r
- TRACE(_T("Pos %d\r\n"),pos);\r
- if(pos>0)\r
- this->m_ctrlProgress.SetPos(pos);\r
- }\r
- m_LogText=_T(""); \r
- }\r
- m_LogText+=ch;\r
-\r
+ CProgressDlg::ParserCmdOutput(m_ctrlCmdOut,m_ctrlProgress,m_LogText,ch);\r
}\r
void CSyncDlg::OnBnClickedButtonCommit()\r
{\r