From 022fe3e489b1788ca63f53b48fdee393de583966 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Wed, 1 Apr 2009 17:47:40 +0800 Subject: [PATCH] Setting dialog, remote list work. When click remote list, show url and puttykey file. Signed-off-by: Frank Li --- src/TortoiseProc/Commands/SettingsCommand.cpp | 4 +- src/TortoiseProc/Settings/SettingGitRemote.cpp | 108 ++++++++++++++++++++++++- src/TortoiseProc/Settings/SettingGitRemote.h | 6 ++ src/TortoiseProc/Settings/Settings.cpp | 13 ++- src/TortoiseProc/Settings/Settings.h | 2 +- src/TortoiseProc/TortoiseProc.vcproj | 24 +++--- 6 files changed, 136 insertions(+), 21 deletions(-) diff --git a/src/TortoiseProc/Commands/SettingsCommand.cpp b/src/TortoiseProc/Commands/SettingsCommand.cpp index db52fe3c3..8458a511f 100644 --- a/src/TortoiseProc/Commands/SettingsCommand.cpp +++ b/src/TortoiseProc/Commands/SettingsCommand.cpp @@ -23,10 +23,10 @@ bool SettingsCommand::Execute() { - CSettings dlg(IDS_PROC_SETTINGS_TITLE); + CSettings dlg(IDS_PROC_SETTINGS_TITLE,&orgCmdLinePath); dlg.SetTreeViewMode(TRUE, TRUE, TRUE); dlg.SetTreeWidth(220); - dlg.m_CmdPath = this->orgCmdLinePath ; + dlg.DoModal(); dlg.HandleRestart(); return true; diff --git a/src/TortoiseProc/Settings/SettingGitRemote.cpp b/src/TortoiseProc/Settings/SettingGitRemote.cpp index d71f45cf2..7c51ad89a 100644 --- a/src/TortoiseProc/Settings/SettingGitRemote.cpp +++ b/src/TortoiseProc/Settings/SettingGitRemote.cpp @@ -4,7 +4,10 @@ #include "stdafx.h" #include "TortoiseProc.h" #include "SettingGitRemote.h" - +#include "Settings.h" +#include "GitAdminDir.h" +#include "MessageBox.h" +#include "git.h" // CSettingGitRemote dialog @@ -16,7 +19,7 @@ CSettingGitRemote::CSettingGitRemote() , m_strUrl(_T("")) , m_strPuttyKeyfile(_T("")) { - + m_bChanged=FALSE; } CSettingGitRemote::~CSettingGitRemote() @@ -44,7 +47,38 @@ BEGIN_MESSAGE_MAP(CSettingGitRemote, CPropertyPage) ON_EN_CHANGE(IDC_EDIT_PUTTY_KEY, &CSettingGitRemote::OnEnChangeEditPuttyKey) END_MESSAGE_MAP() - +BOOL CSettingGitRemote::OnInitDialog() +{ + ISettingsPropPage::OnInitDialog(); + + CString str=((CSettings*)GetParent())->m_CmdPath.GetWinPath(); + CString proj; + if( g_GitAdminDir.HasAdminDir(str,&proj) ) + { + this->SetWindowText(CString(_T("Config - "))+proj); + } + + CString cmd,out; + cmd=_T("git.exe remote"); + if(g_Git.Run(cmd,&out,CP_ACP)) + { + CMessageBox::Show(NULL,out,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + return FALSE; + } + int start =0; + m_ctrlRemoteList.ResetContent(); + do + { + CString one; + one=out.Tokenize(_T("\n"),start); + if(!one.IsEmpty()) + this->m_ctrlRemoteList.AddString(one); + + }while(start>=0); + + this->UpdateData(FALSE); + return TRUE; +} // CSettingGitRemote message handlers void CSettingGitRemote::OnBnClickedButtonBrowse() @@ -60,6 +94,67 @@ void CSettingGitRemote::OnBnClickedButtonAdd() void CSettingGitRemote::OnLbnSelchangeListRemote() { // TODO: Add your control notification handler code here + if(m_bChanged) + { + if(CMessageBox::Show(NULL,_T("Remote Config Changed\nDo you want to save change now or discard change"), + _T("TortoiseGit"),MB_YESNO) == IDYES) + { + OnApply(); + } + } + SetModified(FALSE); + + CString cmd,output; + int index; + index = this->m_ctrlRemoteList.GetCurSel(); + if(index<0) + return; + + CString remote; + m_ctrlRemoteList.GetText(index,remote); + this->m_strRemote=remote; + + cmd.Format(_T("git.exe config remote.%s.url"),remote); + m_strUrl.Empty(); + if( g_Git.Run(cmd,&m_strUrl,CP_ACP) ) + { + //CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + //return; + } + + int start=0; + m_strUrl = m_strUrl.Tokenize(_T("\n"),start); + + + cmd.Format(_T("git.exe config remote.%s.puttykey"),remote); + this->m_strPuttyKeyfile.Empty(); + if( g_Git.Run(cmd,&m_strPuttyKeyfile,CP_ACP) ) + { + //CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + //return; + } + start=0; + m_strPuttyKeyfile = m_strPuttyKeyfile.Tokenize(_T("\n"),start); + + + cmd.Format(_T("git.exe config remote.%s.puttykeyautoload"),remote); + CString autoload; + if( g_Git.Run(cmd,&autoload,CP_ACP) ) + { + //CMessageBox::Show(NULL,output,_T("TortoiseGit"),MB_OK|MB_ICONERROR); + //return; + } + + start=0; + autoload = autoload.Tokenize(_T("\n"),start); + m_bAutoLoad.SetCheck(false); + if( autoload == _T("true")) + { + m_bAutoLoad.SetCheck(true); + } + + this->UpdateData(FALSE); + } void CSettingGitRemote::OnEnChangeEditRemote() @@ -96,3 +191,10 @@ void CSettingGitRemote::OnEnChangeEditPuttyKey() // TODO: Add your control notification handler code here } + +BOOL CSettingGitRemote::OnApply() +{ + + SetModified(FALSE); + return ISettingsPropPage::OnApply(); +} \ No newline at end of file diff --git a/src/TortoiseProc/Settings/SettingGitRemote.h b/src/TortoiseProc/Settings/SettingGitRemote.h index ba6c5cfbf..e4a7c626f 100644 --- a/src/TortoiseProc/Settings/SettingGitRemote.h +++ b/src/TortoiseProc/Settings/SettingGitRemote.h @@ -22,6 +22,12 @@ protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support DECLARE_MESSAGE_MAP() + + BOOL OnInitDialog(); + BOOL OnApply(); + + BOOL m_bChanged; + public: CListBox m_ctrlRemoteList; CString m_strRemote; diff --git a/src/TortoiseProc/Settings/Settings.cpp b/src/TortoiseProc/Settings/Settings.cpp index 1a08e0ce3..98c2a3884 100644 --- a/src/TortoiseProc/Settings/Settings.cpp +++ b/src/TortoiseProc/Settings/Settings.cpp @@ -22,12 +22,15 @@ #include "MessageBox.h" #include "..\..\TGitCache\CacheInterface.h" #include "CommonResource.h" - +#include "GitAdminDir.h" IMPLEMENT_DYNAMIC(CSettings, CTreePropSheet) -CSettings::CSettings(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) +CSettings::CSettings(UINT nIDCaption,CTGitPath *cmdPath, CWnd* pParentWnd, UINT iSelectPage) :CTreePropSheet(nIDCaption, pParentWnd, iSelectPage) { + if(cmdPath) + this->m_CmdPath=*cmdPath; + m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); AddPropPages(); } @@ -105,7 +108,11 @@ void CSettings::AddPropPages() AddPage(m_pSavedPage); AddPage(m_pGitConfig); - AddPage(m_pGitRemote); + + if( g_GitAdminDir.HasAdminDir(this->m_CmdPath.GetWinPath()) ) + { + AddPage(m_pGitRemote); + } // AddPage(m_pGitRemotem_pLogCachePage); // AddPage(m_pLogCacheListPage); // AddPage(m_pHooksPage); diff --git a/src/TortoiseProc/Settings/Settings.h b/src/TortoiseProc/Settings/Settings.h index 812d67244..d2551e674 100644 --- a/src/TortoiseProc/Settings/Settings.h +++ b/src/TortoiseProc/Settings/Settings.h @@ -93,7 +93,7 @@ private: HICON m_hIcon; public: - CSettings(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); + CSettings(UINT nIDCaption,CTGitPath *CmdPath=NULL, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); virtual ~CSettings(); CTGitPath m_CmdPath; /** diff --git a/src/TortoiseProc/TortoiseProc.vcproj b/src/TortoiseProc/TortoiseProc.vcproj index 9b996e395..ced05ccec 100644 --- a/src/TortoiseProc/TortoiseProc.vcproj +++ b/src/TortoiseProc/TortoiseProc.vcproj @@ -588,11 +588,11 @@ >