OSDN Git Service

Unified SyncDlg and progressdlg log handle
authorFrank Li <lznuaa@gmail.com>
Thu, 29 Oct 2009 14:06:06 +0000 (22:06 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 29 Oct 2009 14:06:06 +0000 (22:06 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/ProgressDlg.cpp
src/TortoiseProc/ProgressDlg.h
src/TortoiseProc/SyncDlg.cpp

index 03e0c27..f3a4f51 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index 577f149..f7ab402 100644 (file)
@@ -264,6 +264,7 @@ int CProgressDlg::FindPercentage(CString &log)
        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
@@ -315,6 +316,64 @@ void CProgressDlg::ParserCmdOutput(TCHAR ch)
        }\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
index 4941958..7c4f1ab 100644 (file)
@@ -28,7 +28,7 @@ public:
 \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
@@ -49,7 +49,6 @@ protected:
        UINT            ProgressThread();\r
 \r
        void            ParserCmdOutput(TCHAR ch);\r
-       \r
        void        RemoveLastLine(CString &str);\r
 \r
        LRESULT CProgressDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
@@ -66,6 +65,8 @@ public:
 \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
index 53624d9..3869925 100644 (file)
@@ -848,47 +848,7 @@ LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)
 \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