OSDN Git Service

Unified SyncDlg and progressdlg log handle
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / SyncDlg.cpp
index 342cfbb..3869925 100644 (file)
@@ -58,7 +58,7 @@ void CSyncDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_STATIC_STATUS, m_ctrlStatus);\r
        DDX_Control(pDX, IDC_PROGRESS_SYNC, m_ctrlProgress);\r
        DDX_Control(pDX, IDC_ANIMATE_SYNC, m_ctrlAnimate);\r
-\r
+       DDX_Control(pDX, IDC_BUTTON_SUBMODULE,m_ctrlSubmodule);\r
        BRANCH_COMBOX_DDX;\r
 }\r
 \r
@@ -74,6 +74,7 @@ BEGIN_MESSAGE_MAP(CSyncDlg, CResizableStandAloneDialog)
        ON_CBN_EDITCHANGE(IDC_COMBOBOXEX_URL, &CSyncDlg::OnCbnEditchangeComboboxexUrl)\r
        ON_MESSAGE(MSG_PROGRESSDLG_UPDATE_UI, OnProgressUpdateUI)\r
        ON_BN_CLICKED(IDC_BUTTON_COMMIT, &CSyncDlg::OnBnClickedButtonCommit)\r
+       ON_BN_CLICKED(IDC_BUTTON_SUBMODULE, &CSyncDlg::OnBnClickedButtonSubmodule)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -84,6 +85,7 @@ void CSyncDlg::EnableControlButton(bool bEnabled)
        GetDlgItem(IDC_BUTTON_APPLY)->EnableWindow(bEnabled);\r
        GetDlgItem(IDC_BUTTON_EMAIL)->EnableWindow(bEnabled);\r
        GetDlgItem(IDOK)->EnableWindow(bEnabled);\r
+       GetDlgItem(IDC_BUTTON_SUBMODULE)->EnableWindow(bEnabled);\r
 }\r
 // CSyncDlg message handlers\r
 \r
@@ -265,7 +267,7 @@ void CSyncDlg::FetchComplete()
        if( (!this->m_GitCmdStatus) && this->m_CurrentCmd == GIT_COMMAND_FETCHANDREBASE)\r
        {\r
                CRebaseDlg dlg;\r
-               dlg.m_PostButtonText=_T("Email &Patch...");\r
+               dlg.m_PostButtonTexts.Add(_T("Email &Patch..."));\r
                int response = dlg.DoModal();\r
                if(response == IDOK)\r
                {\r
@@ -293,6 +295,7 @@ void CSyncDlg::OnBnClickedButtonPush()
 {\r
        // TODO: Add your control notification handler code here\r
        this->UpdateData();\r
+       UpdateCombox();\r
 \r
        if(this->m_strURL.IsEmpty())\r
        {\r
@@ -312,7 +315,7 @@ void CSyncDlg::OnBnClickedButtonPush()
        CString force;\r
        CString all;\r
 \r
-       UpdateCombox();\r
+\r
 \r
        switch (m_ctrlPush.GetCurrentEntry())\r
        {\r
@@ -599,15 +602,16 @@ BOOL CSyncDlg::OnInitDialog()
        AddAnchor(IDC_BUTTON_MANAGE,TOP_RIGHT);\r
        AddAnchor(IDC_BUTTON_PULL,BOTTOM_LEFT);\r
        AddAnchor(IDC_BUTTON_PUSH,BOTTOM_LEFT);\r
-       AddAnchor(IDC_BUTTON_APPLY,BOTTOM_LEFT);\r
-       AddAnchor(IDC_BUTTON_EMAIL,BOTTOM_LEFT);\r
+       AddAnchor(IDC_BUTTON_SUBMODULE,BOTTOM_LEFT);\r
+       AddAnchor(IDC_BUTTON_APPLY,BOTTOM_RIGHT);\r
+       AddAnchor(IDC_BUTTON_EMAIL,BOTTOM_RIGHT);\r
        AddAnchor(IDC_PROGRESS_SYNC,TOP_LEFT,TOP_RIGHT);\r
        AddAnchor(IDOK,BOTTOM_RIGHT);\r
        AddAnchor(IDHELP,BOTTOM_RIGHT);\r
        AddAnchor(IDC_STATIC_STATUS,BOTTOM_LEFT);\r
        AddAnchor(IDC_ANIMATE_SYNC,TOP_LEFT);\r
        AddAnchor(IDC_BUTTON_COMMIT,BOTTOM_LEFT);\r
-       \r
+\r
        BRANCH_COMBOX_ADD_ANCHOR();\r
 \r
        this->GetDlgItem(IDC_BUTTON_COMMIT)->ShowWindow(SW_HIDE);\r
@@ -628,6 +632,9 @@ BOOL CSyncDlg::OnInitDialog()
        this->m_ctrlPull.AddEntry(CString(_T("Fetc&h")));\r
        this->m_ctrlPull.AddEntry(CString(_T("Fetch&&Re&base")));\r
 \r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Update")));\r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Init")));\r
+       this->m_ctrlSubmodule.AddEntry(CString(_T("Submodule Sync")));\r
        \r
        WorkingDir.Replace(_T(':'),_T('_'));\r
 \r
@@ -636,9 +643,11 @@ BOOL CSyncDlg::OnInitDialog()
 \r
        this->m_regPullButton = CRegDWORD(regkey+_T("\\Pull"),0);\r
        this->m_regPushButton = CRegDWORD(regkey+_T("\\Push"),0);\r
+       this->m_regSubmoduleButton = CRegDWORD(regkey+_T("\\Submodule"));\r
 \r
        this->m_ctrlPull.SetCurrentEntry(this->m_regPullButton);\r
        this->m_ctrlPush.SetCurrentEntry(this->m_regPushButton);\r
+       this->m_ctrlSubmodule.SetCurrentEntry(this->m_regSubmoduleButton);\r
 \r
        CString str;\r
        this->GetWindowText(str);\r
@@ -648,10 +657,20 @@ BOOL CSyncDlg::OnInitDialog()
        EnableSaveRestore(_T("SyncDlg"));\r
 \r
        this->m_ctrlURL.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\SyncURL\\"))+WorkingDir, _T("url"));\r
-               \r
+\r
+       STRING_VECTOR list;\r
+       \r
+       if(!g_Git.GetRemoteList(list))\r
+       {       \r
+               for(unsigned int i=0;i<list.size();i++)\r
+               {\r
+                       m_ctrlURL.AddString(list[i]);\r
+               }\r
+       }       \r
        m_ctrlURL.SetCurSel(0);\r
        m_ctrlRemoteBranch.SetCurSel(0);\r
-\r
+       m_ctrlURL.SetURLHistory(true);\r
+       \r
        this->LoadBranchInfo();\r
 \r
        this->m_bInited=true;\r
@@ -810,6 +829,14 @@ LRESULT CSyncDlg::OnProgressUpdateUI(WPARAM wParam,LPARAM lParam)
                {\r
                        FetchComplete();\r
                }\r
+               if(this->m_CurrentCmd == GIT_COMMAND_SUBMODULE)\r
+               {\r
+                       //this->m_ctrlCmdOut.SetSel(-1,-1);\r
+                       //this->m_ctrlCmdOut.ReplaceSel(_T("Done\r\n"));\r
+                       //this->m_ctrlCmdOut.SetSel(-1,-1);\r
+                       EnableControlButton(true);\r
+                       SwitchToInput();\r
+               }\r
        }\r
 \r
        if(lParam != 0)\r
@@ -821,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
@@ -882,3 +869,52 @@ void CSyncDlg::OnOK()
        SaveHistory();\r
        __super::OnOK();\r
 }\r
+\r
+void CSyncDlg::OnBnClickedButtonSubmodule()\r
+{\r
+       // TODO: Add your control notification handler code here\r
+               // TODO: Add your control notification handler code here\r
+       this->UpdateData();\r
+       UpdateCombox();\r
+\r
+       this->m_regSubmoduleButton = this->m_ctrlSubmodule.GetCurrentEntry();\r
+\r
+       this->SwitchToRun();\r
+       \r
+       this->m_bAbort=false;\r
+       this->m_GitCmdList.clear();\r
+\r
+       ShowTab(IDC_CMD_LOG);\r
+\r
+       CString cmd;\r
+\r
+       switch (m_ctrlSubmodule.GetCurrentEntry())\r
+       {\r
+       case 0:\r
+               cmd=_T("git.exe submodule update");\r
+               break;\r
+       case 1:\r
+               cmd=_T("git.exe submodule init");\r
+               break;\r
+       case 2:\r
+               cmd=_T("git.exe submodule sync");\r
+               break;\r
+       }\r
+\r
+       \r
+       m_GitCmdList.push_back(cmd);\r
+\r
+       m_CurrentCmd = GIT_COMMAND_SUBMODULE;\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