OSDN Git Service

Fixed issue #88: Ambiguous dialog message
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Settings / SettingGitRemote.cpp
index d71f45c..227d83e 100644 (file)
@@ -4,19 +4,24 @@
 #include "stdafx.h"\r
 #include "TortoiseProc.h"\r
 #include "SettingGitRemote.h"\r
-\r
+#include "Settings.h"\r
+#include "GitAdminDir.h"\r
+#include "MessageBox.h"\r
+#include "git.h"\r
 \r
 // CSettingGitRemote dialog\r
 \r
 IMPLEMENT_DYNAMIC(CSettingGitRemote, ISettingsPropPage)\r
 \r
-CSettingGitRemote::CSettingGitRemote()\r
+CSettingGitRemote::CSettingGitRemote(CString cmdPath)\r
        : ISettingsPropPage(CSettingGitRemote::IDD)\r
     , m_strRemote(_T(""))\r
     , m_strUrl(_T(""))\r
     , m_strPuttyKeyfile(_T(""))\r
+       , m_cmdPath(cmdPath)\r
 {\r
 \r
+       m_ChangedMask = 0;\r
 }\r
 \r
 CSettingGitRemote::~CSettingGitRemote()\r
@@ -29,7 +34,6 @@ void CSettingGitRemote::DoDataExchange(CDataExchange* pDX)
     DDX_Control(pDX, IDC_LIST_REMOTE, m_ctrlRemoteList);\r
     DDX_Text(pDX, IDC_EDIT_REMOTE, m_strRemote);\r
     DDX_Text(pDX, IDC_EDIT_URL, m_strUrl);\r
-    DDX_Control(pDX, IDC_CHECK_ISAUTOLOADPUTTYKEY, m_bAutoLoad);\r
     DDX_Text(pDX, IDC_EDIT_PUTTY_KEY, m_strPuttyKeyfile);\r
 }\r
 \r
@@ -40,26 +44,129 @@ BEGIN_MESSAGE_MAP(CSettingGitRemote, CPropertyPage)
     ON_LBN_SELCHANGE(IDC_LIST_REMOTE, &CSettingGitRemote::OnLbnSelchangeListRemote)\r
     ON_EN_CHANGE(IDC_EDIT_REMOTE, &CSettingGitRemote::OnEnChangeEditRemote)\r
     ON_EN_CHANGE(IDC_EDIT_URL, &CSettingGitRemote::OnEnChangeEditUrl)\r
-    ON_BN_CLICKED(IDC_CHECK_ISAUTOLOADPUTTYKEY, &CSettingGitRemote::OnBnClickedCheckIsautoloadputtykey)\r
     ON_EN_CHANGE(IDC_EDIT_PUTTY_KEY, &CSettingGitRemote::OnEnChangeEditPuttyKey)\r
 END_MESSAGE_MAP()\r
 \r
+BOOL CSettingGitRemote::OnInitDialog()\r
+{\r
+       ISettingsPropPage::OnInitDialog();\r
+\r
+       //CString str=((CSettings*)GetParent())->m_CmdPath.GetWinPath();\r
+       CString proj;\r
+       if(     g_GitAdminDir.HasAdminDir(m_cmdPath,&proj) )\r
+       {\r
+               this->SetWindowText(CString(_T("Config - "))+proj);\r
+       }\r
+\r
+       CString cmd,out;\r
+       cmd=_T("git.exe remote");\r
+       if(g_Git.Run(cmd,&out,CP_ACP))\r
+       {\r
+               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+               return FALSE;\r
+       }\r
+       int start =0;\r
+       m_ctrlRemoteList.ResetContent();\r
+       do\r
+       {\r
+               CString one;\r
+               one=out.Tokenize(_T("\n"),start);\r
+               if(!one.IsEmpty())\r
+                       this->m_ctrlRemoteList.AddString(one);\r
 \r
+       }while(start>=0);\r
+       \r
+       this->GetDlgItem(IDC_EDIT_REMOTE)->EnableWindow(FALSE);\r
+       this->UpdateData(FALSE);\r
+       return TRUE;\r
+}\r
 // CSettingGitRemote message handlers\r
 \r
 void CSettingGitRemote::OnBnClickedButtonBrowse()\r
 {\r
     // TODO: Add your control notification handler code here\r
+       CFileDialog dlg(TRUE,NULL,\r
+                                       NULL,\r
+                                       OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\r
+                                       _T("Putty Private Key(*.ppk)|*.ppk|All Files(*.*)|*.*||"));\r
+       \r
+       this->UpdateData();\r
+       if(dlg.DoModal()==IDOK)\r
+       {\r
+               this->m_strPuttyKeyfile = dlg.GetPathName();\r
+               this->UpdateData(FALSE);\r
+               OnEnChangeEditPuttyKey();\r
+       }\r
+       \r
+\r
 }\r
 \r
 void CSettingGitRemote::OnBnClickedButtonAdd()\r
 {\r
     // TODO: Add your control notification handler code here\r
+       this->m_strRemote.Empty();\r
+       this->m_strUrl.Empty();\r
+       this->m_strPuttyKeyfile.Empty();\r
+       this->UpdateData(FALSE);\r
+       this->GetDlgItem(IDC_EDIT_REMOTE)->EnableWindow(TRUE);\r
+       this->m_ChangedMask |= REMOTE_NAME;\r
+       this->m_ctrlRemoteList.SetCurSel(-1);\r
+       GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(FALSE);\r
 }\r
 \r
 void CSettingGitRemote::OnLbnSelchangeListRemote()\r
 {\r
     // TODO: Add your control notification handler code here\r
+       CWaitCursor wait;\r
+\r
+       if(m_ChangedMask)\r
+       {\r
+               if(CMessageBox::Show(NULL,_T("Remote Config Changed\nDo you want to save change now or discard change"),\r
+                                                                _T("TortoiseGit"),1,NULL,_T("Save"),_T("Discard")) == 1)\r
+               {\r
+                       OnApply();\r
+               }\r
+       }\r
+       SetModified(FALSE);\r
+       \r
+       CString cmd,output;\r
+       int index;\r
+       index = this->m_ctrlRemoteList.GetCurSel();\r
+       if(index<0)\r
+               return;\r
+\r
+       CString remote;\r
+       m_ctrlRemoteList.GetText(index,remote);\r
+       this->m_strRemote=remote;\r
+\r
+       cmd.Format(_T("git.exe config remote.%s.url"),remote);\r
+       m_strUrl.Empty();\r
+       if( g_Git.Run(cmd,&m_strUrl,CP_ACP) )\r
+       {\r
+               //CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+               //return;\r
+       }\r
+       \r
+       int start=0;\r
+       m_strUrl = m_strUrl.Tokenize(_T("\n"),start);\r
+\r
+\r
+       cmd.Format(_T("git.exe config remote.%s.puttykeyfile"),remote);\r
+       this->m_strPuttyKeyfile.Empty();\r
+       if( g_Git.Run(cmd,&m_strPuttyKeyfile,CP_ACP) )\r
+       {\r
+               //CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+               //return;\r
+       }\r
+       start=0;\r
+       m_strPuttyKeyfile = m_strPuttyKeyfile.Tokenize(_T("\n"),start);\r
+       \r
+\r
+       m_ChangedMask=0;\r
+\r
+       GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(TRUE);\r
+       this->UpdateData(FALSE);\r
+\r
 }\r
 \r
 void CSettingGitRemote::OnEnChangeEditRemote()\r
@@ -70,6 +177,10 @@ void CSettingGitRemote::OnEnChangeEditRemote()
     // with the ENM_CHANGE flag ORed into the mask.\r
 \r
     // TODO:  Add your control notification handler code here\r
+\r
+       m_ChangedMask|=REMOTE_NAME;\r
+\r
+       this->SetModified();\r
 }\r
 \r
 void CSettingGitRemote::OnEnChangeEditUrl()\r
@@ -80,11 +191,8 @@ void CSettingGitRemote::OnEnChangeEditUrl()
     // with the ENM_CHANGE flag ORed into the mask.\r
 \r
     // TODO:  Add your control notification handler code here\r
-}\r
-\r
-void CSettingGitRemote::OnBnClickedCheckIsautoloadputtykey()\r
-{\r
-    // TODO: Add your control notification handler code here\r
+       m_ChangedMask|=REMOTE_URL;\r
+       this->SetModified();\r
 }\r
 \r
 void CSettingGitRemote::OnEnChangeEditPuttyKey()\r
@@ -95,4 +203,55 @@ void CSettingGitRemote::OnEnChangeEditPuttyKey()
     // with the ENM_CHANGE flag ORed into the mask.\r
 \r
     // TODO:  Add your control notification handler code here\r
+       m_ChangedMask|=REMOTE_PUTTYKEY;\r
+       this->SetModified();\r
 }\r
+void CSettingGitRemote::Save(CString key,CString value)\r
+{\r
+       CString cmd,out;\r
+       cmd.Format(_T("git.exe config remote.%s.%s \"%s\""),this->m_strRemote,key,value);\r
+       if(g_Git.Run(cmd,&out,CP_ACP))\r
+       {\r
+               CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+       }\r
+}\r
+BOOL CSettingGitRemote::OnApply()\r
+{\r
+       CWaitCursor wait;\r
+       this->UpdateData();\r
+       if(m_ChangedMask & REMOTE_NAME)\r
+       {\r
+               //Add Remote\r
+               if( this->m_strRemote.IsEmpty() || this->m_strUrl.IsEmpty() )\r
+               {\r
+                       CMessageBox::Show(NULL,_T("Remote Name and URL can't be Empty"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);\r
+                       return FALSE;\r
+               }\r
+               CString cmd,out;\r
+               cmd.Format(_T("git.exe remote add \"%s\" \"%s\""),m_strRemote,m_strUrl);\r
+               if(g_Git.Run(cmd,&out,CP_ACP))\r
+               {\r
+                       CMessageBox::Show(NULL,out,_T("TorotiseGit"),MB_OK|MB_ICONERROR);\r
+                       return FALSE;\r
+               }\r
+               m_ChangedMask &= ~REMOTE_URL;\r
+\r
+               this->m_ctrlRemoteList.AddString(m_strRemote);\r
+               GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(TRUE);\r
+       }\r
+       if(m_ChangedMask & REMOTE_URL)\r
+       {\r
+               Save(_T("url"),this->m_strUrl);\r
+       }\r
+\r
+       if(m_ChangedMask & REMOTE_PUTTYKEY)\r
+       {\r
+               Save(_T("puttykeyfile"),this->m_strPuttyKeyfile);\r
+       }\r
+\r
+       this->GetDlgItem(IDC_EDIT_REMOTE)->EnableWindow(FALSE);\r
+    SetModified(FALSE);\r
+\r
+       m_ChangedMask = 0;\r
+       return ISettingsPropPage::OnApply();\r
+}
\ No newline at end of file