#include "stdafx.h"\r
#include "TortoiseProc.h"\r
#include "SyncDlg.h"\r
-\r
+#include "progressdlg.h"\r
\r
// CSyncDlg dialog\r
\r
BRANCH_COMBOX_EVENT\r
ON_NOTIFY(CBEN_ENDEDIT, IDC_COMBOBOXEX_URL, &CSyncDlg::OnCbenEndeditComboboxexUrl)\r
ON_CBN_EDITCHANGE(IDC_COMBOBOXEX_URL, &CSyncDlg::OnCbnEditchangeComboboxexUrl)\r
+ ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI)\r
END_MESSAGE_MAP()\r
\r
\r
+void CSyncDlg::EnableControlButton(bool bEnabled)\r
+{\r
+ GetDlgItem(IDC_BUTTON_PULL)->EnableWindow(bEnabled);\r
+ GetDlgItem(IDC_BUTTON_PUSH)->EnableWindow(bEnabled);\r
+ GetDlgItem(IDC_BUTTON_APPLY)->EnableWindow(bEnabled);\r
+ GetDlgItem(IDC_BUTTON_EMAIL)->EnableWindow(bEnabled);\r
+ GetDlgItem(IDOK)->EnableWindow(bEnabled);\r
+}\r
// CSyncDlg message handlers\r
\r
void CSyncDlg::OnBnClickedButtonPull()\r
// TODO: Add your control notification handler code here\r
this->m_regPushButton=this->m_ctrlPush.GetCurrentEntry();\r
this->SwitchToRun();\r
+ this->m_bAbort=false;\r
+ this->m_GitCmdList.clear();\r
+\r
+ CString cmd;\r
+ CString tags;\r
+ CString force;\r
+ this->m_strLocalBranch = this->m_ctrlLocalBranch.GetString();\r
+ this->m_ctrlRemoteBranch.GetWindowText(this->m_strRemoteBranch);\r
+ this->m_ctrlURL.GetWindowText(this->m_strURL);\r
+ m_strRemoteBranch=m_strRemoteBranch.Trim();\r
+ \r
+ cmd.Format(_T("git.exe push %s %s \"%s\" %s"),\r
+ tags,force,\r
+ m_strURL,\r
+ m_strLocalBranch);\r
+\r
+ if (!m_strRemoteBranch.IsEmpty())\r
+ {\r
+ cmd += _T(":") + m_strRemoteBranch;\r
+ }\r
+ \r
+ m_GitCmdList.push_back(cmd);\r
+\r
+ m_pThread = AfxBeginThread(ProgressThreadEntry, this, THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);\r
+ if (m_pThread==NULL)\r
+ {\r
+// ReportError(CString(MAKEINTRESOURCE(IDS_ERR_THREADSTARTFAILED)));\r
+ }\r
+ else\r
+ {\r
+ m_pThread->m_bAutoDelete = TRUE;\r
+ m_pThread->ResumeThread();\r
+ }\r
+ \r
}\r
\r
void CSyncDlg::OnBnClickedButtonApply()\r
this->FetchOutList();\r
// TODO: Add your control notification handler code here\r
}\r
+\r
+UINT CSyncDlg::ProgressThread()\r
+{\r
+ m_GitCmdStatus=CProgressDlg::RunCmdList(this,m_GitCmdList,true,NULL,&this->m_bAbort);\r
+ return 0;\r
+}\r
+\r
+\r
+LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)\r
+{\r
+ if(wParam == MSG_PROGRESSDLG_END || wParam == MSG_PROGRESSDLG_FAILED)\r
+ {\r
+ //m_bDone = true;\r
+ m_ctrlAnimate.Stop();\r
+ m_ctrlProgress.SetPos(100);\r
+ //this->DialogEnableWindow(IDOK,TRUE);\r
+\r
+ if(wParam == MSG_PROGRESSDLG_END)\r
+ {\r
+ EnableControlButton(true);\r
+ SwitchToInput();\r
+ }\r
+ }\r
+\r
+ if(lParam != 0)\r
+ ParserCmdOutput((TCHAR)lParam);\r
+\r
+ return 0;\r
+}\r
+\r
+void CSyncDlg::ParserCmdOutput(TCHAR ch)\r
+{\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 linenum = this->m_ctrlCmdOut.GetLineCount();\r
+ int index = this->m_ctrlCmdOut.LineIndex(linenum-1);\r
+ if(linenum == 0)\r
+ index = 0;\r
+\r
+ this->m_ctrlCmdOut.SetSel(index,-1);\r
+ \r
+ this->m_ctrlCmdOut.ReplaceSel(m_LogText);\r
+ \r
+ this->m_ctrlCmdOut.LineScroll(linenum-1);\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
+\r
+ m_LogText=_T("");\r
+\r
+ }else\r
+ {\r
+ m_LogText+=ch;\r
+ }\r
+}
\ No newline at end of file
\r
CTGitPathList m_arOutChangeList;\r
\r
+ CWinThread* m_pThread; \r
+\r
+ void ParserCmdOutput(TCHAR ch);\r
+\r
virtual void LocalBranchChange(){FetchOutList();};\r
virtual void RemoteBranchChange(){FetchOutList();};\r
\r
this->m_ctrlURL.AddString(remote);\r
}\r
}\r
+\r
+ std::vector<CString> m_GitCmdList;\r
+ bool m_bAbort;\r
+ int m_GitCmdStatus;\r
\r
+ CString m_LogText;\r
CString m_OutLocalBranch;\r
CString m_OutRemoteBranch;\r
\r
void ShowInputCtrl(bool bShow=true);\r
void SwitchToRun(){ShowProgressCtrl(true);ShowInputCtrl(false);}\r
void SwitchToInput(){ShowProgressCtrl(false);ShowInputCtrl(true);}\r
+ LRESULT OnProgressUpdateUI(WPARAM wParam,LPARAM lParam);\r
+\r
\r
DECLARE_MESSAGE_MAP()\r
public:\r
BOOL m_bAutoLoadPuttyKey;\r
+ CString m_strURL;\r
+\r
+ static UINT ProgressThreadEntry(LPVOID pVoid){ return ((CSyncDlg*)pVoid) ->ProgressThread(); };\r
+ UINT ProgressThread();\r
\r
CHistoryCombo m_ctrlURL;\r
CButton m_ctrlDumyButton;\r
virtual BOOL PreTranslateMessage(MSG* pMsg);\r
afx_msg void OnCbenEndeditComboboxexUrl(NMHDR *pNMHDR, LRESULT *pResult);\r
afx_msg void OnCbnEditchangeComboboxexUrl();\r
+\r
+ void EnableControlButton(bool bEnabled=true);\r
};\r