From 1b775bade9358d4ae3c3ce9d24110749ac10b4c3 Mon Sep 17 00:00:00 2001 From: Frank Li Date: Thu, 2 Apr 2009 14:19:55 +0800 Subject: [PATCH] Add auto load putty key option at clone, pull and push dialog. Signed-off-by: Frank Li --- src/Resources/TortoiseProcENG.rc | Bin 415176 -> 416726 bytes src/TortoiseProc/AppUtils.cpp | 19 +++++++++++++ src/TortoiseProc/AppUtils.h | 5 ++++ src/TortoiseProc/CloneDlg.cpp | 55 +++++++++++++++++++++++++++++++++++--- src/TortoiseProc/CloneDlg.h | 5 ++++ src/TortoiseProc/PullFetchDlg.cpp | 20 +++++++++++++- src/TortoiseProc/PullFetchDlg.h | 8 +++++- src/TortoiseProc/PushDlg.cpp | 15 ++++++++++- src/TortoiseProc/PushDlg.h | 2 ++ src/TortoiseProc/resource.h | Bin 154274 -> 154882 bytes src/Utils/MiscUI/HyperLink.cpp | 9 ++++++- 11 files changed, 130 insertions(+), 8 deletions(-) diff --git a/src/Resources/TortoiseProcENG.rc b/src/Resources/TortoiseProcENG.rc index 53e1d5234430c85bb864729d8289a9208bcdc52b..67ce23f852be6ab5b245962046d03d97ad69f094 100644 GIT binary patch delta 1024 zcwUuLT}V_x6rMS=yRKzFChPi}KM{$n>)!S5-Q7yjBp1uyFd`x~3m-(Z9ttXgvOpq` zY;=zXnro!e4+%y$NeD3^UqWB%p&sfbD1zEvg6N^Mvr-g26qh-3=WxFH&iBpCvpeZ8 z%=GE!Me;#bsw_{_<%gmGTE;D#y6xt1;xDu#oR0?hPGqE%QTDv zpU1IEVZ){Ym`K!EkZH`tg7U(dmP9YpnSXVaDUTn`$3Peg6TB=yNlhjn_Tgw4bfL2# z9{B=J`Q~IHrXr+K#*Z4p2yysu1>qcJ46|_vtUQ@gF*q@msM(M!-!*J-3k!~i#3tNM zA-jR?XHE1SWP90eiY=@{W$IZCtH%@RuuYzS=S~RH4u0yd=vBHb@6nxq!m3y`0d~t1 zJt+>KQs!5Rh*d=&=3V9*-X4UV*!2>Uaw=o{vpNF1R!ck-ODM)P8yL-kQpaCe@a;#a z##q|29%ZjB;^U^Rpw2Bg@Bd(6!F19EdjeY>rU)tihVCO@!V@yVMf8NxA1& z)Gors51Nd}=u;@Q*0Lk4OEz9j!Hx*5KWIvOE`(x^`R$>(Dwn7qWZ@!cq7;GPL^ zlLH?71bhL@CgCo^Ahco46xd^bS?2L6XtmK*^I+Z%krK`ZH?|%Eo0)MRbj}U=c0n`G zPXh>Cz6XWM5z);$@kU5E{=<_EaZh4LtCZnrE}jgNNiK z!m~Rn6 z%ku%|;x6PhaJZDjB7Y5V54qs7V7yO`#v$W1O>%1d4jN)uqsVje&-P^49#e&7d~Q${ z3aT68MIqDOz5LR|V}=V^Fy(l6Odk1_mbXsDc%gv_PS)_OF12aWlzLjjvLGAs%BkZO zG3oxOkA`Tb>dc>5uK8qvQf=TWcT~z9(l4gU9pm)f-&quz AVgLXD diff --git a/src/TortoiseProc/AppUtils.cpp b/src/TortoiseProc/AppUtils.cpp index fe90817c9..1fc85175b 100644 --- a/src/TortoiseProc/AppUtils.cpp +++ b/src/TortoiseProc/AppUtils.cpp @@ -615,6 +615,15 @@ bool CAppUtils::LaunchApplication(const CString& sCommandLine, UINT idErrMessage return true; } +bool CAppUtils::LaunchRemoteSetting() +{ + CString proc=CPathUtils::GetAppDirectory(); + proc += _T("TortoiseProc.exe /command:settings"); + proc += _T(" /path:\""); + proc += g_Git.m_CurrentDir; + proc += _T("\" /page:remote"); + return LaunchApplication(proc, IDS_ERR_EXTDIFFSTART, false); +} /** * Launch the external blame viewer */ @@ -1819,3 +1828,13 @@ CString CAppUtils::ExpandRelativeTime( int count, UINT format_1, UINT format_n ) return answer; } +bool CAppUtils::IsSSHPutty() +{ + CString sshclient=CRegString(_T("Software\\TortoiseGit\\SSH")); + sshclient=sshclient.MakeLower(); + if(sshclient.Find(_T("plink.exe"),0)>=0) + { + return true; + } + return false; +} diff --git a/src/TortoiseProc/AppUtils.h b/src/TortoiseProc/AppUtils.h index efde19536..7b6a6450f 100644 --- a/src/TortoiseProc/AppUtils.h +++ b/src/TortoiseProc/AppUtils.h @@ -184,6 +184,11 @@ public: static CString GetMergeTempFile(CString str,CTGitPath &merge); static int StashApply(CString ref); + + static bool IsSSHPutty(); + + static bool LaunchRemoteSetting(); + private: static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2); static bool GetMimeType(const CTGitPath& file, CString& mimetype); diff --git a/src/TortoiseProc/CloneDlg.cpp b/src/TortoiseProc/CloneDlg.cpp index 2207031b6..eea84de0a 100644 --- a/src/TortoiseProc/CloneDlg.cpp +++ b/src/TortoiseProc/CloneDlg.cpp @@ -6,7 +6,7 @@ #include "CloneDlg.h" #include "BrowseFolder.h" #include "MessageBox.h" - +#include "AppUtils.h" // CCloneDlg dialog IMPLEMENT_DYNCREATE(CCloneDlg, CResizableStandAloneDialog) @@ -15,7 +15,7 @@ CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/) : CResizableStandAloneDialog(CCloneDlg::IDD, pParent) , m_Directory(_T("")) { - + m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty(); } CCloneDlg::~CCloneDlg() @@ -26,7 +26,10 @@ void CCloneDlg::DoDataExchange(CDataExchange* pDX) { CResizableStandAloneDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo); + DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo); DDX_Text(pDX, IDC_CLONE_DIR, m_Directory); + DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile); + } BOOL CCloneDlg::OnInitDialog() @@ -39,6 +42,11 @@ BOOL CCloneDlg::OnInitDialog() AddAnchor(IDOK,BOTTOM_RIGHT); AddAnchor(IDCANCEL,BOTTOM_RIGHT); + AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,BOTTOM_RIGHT); + AddAnchor(IDC_PUTTYKEYFILE_BROWSE,BOTTOM_RIGHT); + AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT); + AddAnchor(IDC_PUTTYKEYFILE,BOTTOM_LEFT,BOTTOM_RIGHT); + this->AddOthersToAnchor(); m_URLCombo.SetURLHistory(TRUE); @@ -46,19 +54,29 @@ BOOL CCloneDlg::OnInitDialog() if(m_URL.IsEmpty()) m_URLCombo.SetCurSel(0); else - m_URLCombo.SetWindowTextW(m_URL); + m_URLCombo.SetWindowText(m_URL); CWnd *window=this->GetDlgItem(IDC_CLONE_DIR); if(window) SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM); - EnableSaveRestore(_T("CloneDlg")); + m_PuttyKeyCombo.SetPathHistory(TRUE); + m_PuttyKeyCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\puttykey"), _T("key")); + m_PuttyKeyCombo.SetCurSel(0); + + this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() ); + this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile); + this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile); + + EnableSaveRestore(_T("CloneDlg")); return TRUE; // return TRUE unless you set the focus to a control } BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog) ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl) ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse) + ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse) + ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload) END_MESSAGE_MAP() @@ -75,7 +93,11 @@ void CCloneDlg::OnOK() CMessageBox::Show(NULL,_T("URL or Dir can't empty"),_T("TortiseGit"),MB_OK); return; } + m_URLCombo.SaveHistory(); + m_PuttyKeyCombo.SaveHistory(); + + this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile ); CResizableDialog::OnOK(); } @@ -121,3 +143,28 @@ void CCloneDlg::OnEnChangeCloneDir() // TODO: Add your control notification handler code here } + +void CCloneDlg::OnBnClickedPuttykeyfileBrowse() +{ + // TODO: Add your control notification handler code here + CFileDialog dlg(TRUE,NULL, + NULL, + OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, + _T("Putty Private Key(*.ppk)|*.ppk|All Files(*.*)|*.*||")); + + this->UpdateData(); + if(dlg.DoModal()==IDOK) + { + this->m_PuttyKeyCombo.SetWindowText( dlg.GetPathName() ); + } + +} + +void CCloneDlg::OnBnClickedPuttykeyAutoload() +{ + // TODO: Add your control notification handler code here + this->UpdateData(); + this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile); + this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile); + +} diff --git a/src/TortoiseProc/CloneDlg.h b/src/TortoiseProc/CloneDlg.h index 2c4f38709..4c5579180 100644 --- a/src/TortoiseProc/CloneDlg.h +++ b/src/TortoiseProc/CloneDlg.h @@ -33,5 +33,10 @@ public: afx_msg void OnEnChangeCloneDir(); CString m_Directory; CHistoryCombo m_URLCombo; + CHistoryCombo m_PuttyKeyCombo; + CString m_strPuttyKeyFile; CString m_URL; + BOOL m_bAutoloadPuttyKeyFile; + afx_msg void OnBnClickedPuttykeyfileBrowse(); + afx_msg void OnBnClickedPuttykeyAutoload(); }; diff --git a/src/TortoiseProc/PullFetchDlg.cpp b/src/TortoiseProc/PullFetchDlg.cpp index 38f993b04..ef8a0f081 100644 --- a/src/TortoiseProc/PullFetchDlg.cpp +++ b/src/TortoiseProc/PullFetchDlg.cpp @@ -5,6 +5,7 @@ #include "TortoiseProc.h" #include "PullFetchDlg.h" #include "Git.h" +#include "AppUtils.h" // CPullFetchDlg dialog @@ -14,6 +15,8 @@ CPullFetchDlg::CPullFetchDlg(CWnd* pParent /*=NULL*/) : CResizableStandAloneDialog(CPullFetchDlg::IDD, pParent) { m_IsPull=TRUE; + m_bAutoLoad = CAppUtils::IsSSHPutty(); + m_bAutoLoadEnable=true; } CPullFetchDlg::~CPullFetchDlg() @@ -26,6 +29,8 @@ void CPullFetchDlg::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_REMOTE_COMBO, this->m_Remote); DDX_Control(pDX, IDC_OTHER, this->m_Other); DDX_Control(pDX, IDC_REMOTE_BRANCH, this->m_RemoteBranch); + DDX_Control(pDX,IDC_REMOTE_MANAGE, this->m_RemoteManage); + DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,m_bAutoLoad); } @@ -34,6 +39,7 @@ BEGIN_MESSAGE_MAP(CPullFetchDlg,CResizableStandAloneDialog ) ON_BN_CLICKED(IDC_REMOTE_RD, &CPullFetchDlg::OnBnClickedRd) ON_BN_CLICKED(IDC_OTHER_RD, &CPullFetchDlg::OnBnClickedRd) ON_BN_CLICKED(IDOK, &CPullFetchDlg::OnBnClickedOk) + ON_STN_CLICKED(IDC_REMOTE_MANAGE, &CPullFetchDlg::OnStnClickedRemoteManage) END_MESSAGE_MAP() BOOL CPullFetchDlg::OnInitDialog() @@ -46,8 +52,13 @@ BOOL CPullFetchDlg::OnInitDialog() AddAnchor(IDOK,BOTTOM_RIGHT); AddAnchor(IDCANCEL,BOTTOM_RIGHT); + AddAnchor(IDC_GROUPT_REMOTE,TOP_LEFT,BOTTOM_RIGHT); + AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT); + AddAnchor(IDC_REMOTE_MANAGE,BOTTOM_LEFT); - this->AddOthersToAnchor(); + this->AddOthersToAnchor(); + + this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoadEnable); CheckRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD,IDC_REMOTE_RD); m_Remote.EnableWindow(TRUE); @@ -74,6 +85,7 @@ BOOL CPullFetchDlg::OnInitDialog() m_Remote.AddString(list[i]); } EnableSaveRestore(_T("PullFetchDlg")); + this->m_RemoteManage.SetURL(CString()); return TRUE; } // CPullFetchDlg message handlers @@ -119,3 +131,9 @@ void CPullFetchDlg::OnBnClickedOk() m_RemoteBranch.SaveHistory(); this->OnOK(); } + +void CPullFetchDlg::OnStnClickedRemoteManage() +{ + // TODO: Add your control notification handler code here + CAppUtils::LaunchRemoteSetting(); +} diff --git a/src/TortoiseProc/PullFetchDlg.h b/src/TortoiseProc/PullFetchDlg.h index d1cd10979..f8f5184c2 100644 --- a/src/TortoiseProc/PullFetchDlg.h +++ b/src/TortoiseProc/PullFetchDlg.h @@ -2,6 +2,7 @@ #include "StandAloneDlg.h" #include "HistoryCombo.h" +#include "HyperLink.h" // CPullFetchDlg dialog class CPullFetchDlg : public CResizableStandAloneDialog @@ -25,9 +26,14 @@ protected: DECLARE_MESSAGE_MAP() public: - BOOL m_IsPull; + BOOL m_IsPull; + BOOL m_bAutoLoad; + BOOL m_bAutoLoadEnable; + CHyperLink m_RemoteManage; + afx_msg void OnBnClickedRd(); afx_msg void OnBnClickedOk(); CString m_RemoteURL; CString m_RemoteBranchName; + afx_msg void OnStnClickedRemoteManage(); }; diff --git a/src/TortoiseProc/PushDlg.cpp b/src/TortoiseProc/PushDlg.cpp index 4aa041828..8f181be56 100644 --- a/src/TortoiseProc/PushDlg.cpp +++ b/src/TortoiseProc/PushDlg.cpp @@ -7,6 +7,8 @@ #include "Git.h" #include "registry.h" +#include "AppUtils.h" + // CPushDlg dialog IMPLEMENT_DYNAMIC(CPushDlg, CResizableStandAloneDialog) @@ -14,7 +16,7 @@ IMPLEMENT_DYNAMIC(CPushDlg, CResizableStandAloneDialog) CPushDlg::CPushDlg(CWnd* pParent /*=NULL*/) : CResizableStandAloneDialog(CPushDlg::IDD, pParent) { - + m_bAutoLoad = CAppUtils::IsSSHPutty(); } CPushDlg::~CPushDlg() @@ -31,6 +33,7 @@ void CPushDlg::DoDataExchange(CDataExchange* pDX) DDX_Check(pDX,IDC_FORCE,this->m_bForce); DDX_Check(pDX,IDC_PACK,this->m_bPack); DDX_Check(pDX,IDC_TAGS,this->m_bTags); + DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,this->m_bAutoLoad); } @@ -40,6 +43,7 @@ BEGIN_MESSAGE_MAP(CPushDlg, CResizableStandAloneDialog) ON_BN_CLICKED(IDC_RD_URL, &CPushDlg::OnBnClickedRd) ON_CBN_SELCHANGE(IDC_BRANCH_SOURCE, &CPushDlg::OnCbnSelchangeBranchSource) ON_BN_CLICKED(IDOK, &CPushDlg::OnBnClickedOk) + ON_BN_CLICKED(IDC_REMOTE_MANAGE, &CPushDlg::OnBnClickedRemoteManage) END_MESSAGE_MAP() BOOL CPushDlg::OnInitDialog() @@ -68,10 +72,13 @@ BOOL CPushDlg::OnInitDialog() AddAnchor(IDC_FORCE, TOP_LEFT); AddAnchor(IDC_PACK, TOP_LEFT); AddAnchor(IDC_TAGS, TOP_LEFT); + AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT); + AddAnchor(IDC_REMOTE_MANAGE,TOP_RIGHT); AddOthersToAnchor(); + this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoad); EnableSaveRestore(_T("PushDlg")); @@ -168,3 +175,9 @@ void CPushDlg::OnBnClickedOk() CResizableStandAloneDialog::OnOK(); } + +void CPushDlg::OnBnClickedRemoteManage() +{ + // TODO: Add your control notification handler code here + CAppUtils::LaunchRemoteSetting(); +} diff --git a/src/TortoiseProc/PushDlg.h b/src/TortoiseProc/PushDlg.h index 586a0ba95..e753a6623 100644 --- a/src/TortoiseProc/PushDlg.h +++ b/src/TortoiseProc/PushDlg.h @@ -26,6 +26,7 @@ public: BOOL m_bTags; BOOL m_bForce; BOOL m_bPack; + BOOL m_bAutoLoad; virtual BOOL OnInitDialog(); // Dialog Data @@ -39,4 +40,5 @@ public: afx_msg void OnBnClickedRd(); afx_msg void OnCbnSelchangeBranchSource(); afx_msg void OnBnClickedOk(); + afx_msg void OnBnClickedRemoteManage(); }; diff --git a/src/TortoiseProc/resource.h b/src/TortoiseProc/resource.h index 7a9cbaf7a224639ae24ca9675b3946e3e8c65591..be3ec7b05c3eda29abe6c49f26e41b97f6303a18 100644 GIT binary patch delta 278 zcwSqym9uFV=LR{~$tpT(lP9>aOwWj95}W*hk7KfztI%{i7e=+|4t`85)3@|6%1w4~ z?{A2-nmdR!myQMPP Ve4jocnNe)|y=W$p>1$$`!T@ZsEgt{? diff --git a/src/Utils/MiscUI/HyperLink.cpp b/src/Utils/MiscUI/HyperLink.cpp index cf7ff330f..37e1e8bde 100644 --- a/src/Utils/MiscUI/HyperLink.cpp +++ b/src/Utils/MiscUI/HyperLink.cpp @@ -116,7 +116,14 @@ END_MESSAGE_MAP() void CHyperLink::OnClicked() { - GotoURL(m_strURL); + if(!m_strURL.IsEmpty()) + { + GotoURL(m_strURL); + } + else + { + ::SendMessage(this->GetParent()->m_hWnd,WM_COMMAND,this->GetDlgCtrlID(),0); + } } HBRUSH CHyperLink::CtlColor(CDC* pDC, UINT /*nCtlColor*/) -- 2.11.4.GIT