OSDN Git Service

Add auto load putty key option at clone, pull and push dialog.
authorFrank Li <lznuaa@gmail.com>
Thu, 2 Apr 2009 06:19:55 +0000 (14:19 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 2 Apr 2009 06:19:55 +0000 (14:19 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/Resources/TortoiseProcENG.rc
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/CloneDlg.cpp
src/TortoiseProc/CloneDlg.h
src/TortoiseProc/PullFetchDlg.cpp
src/TortoiseProc/PullFetchDlg.h
src/TortoiseProc/PushDlg.cpp
src/TortoiseProc/PushDlg.h
src/TortoiseProc/resource.h
src/Utils/MiscUI/HyperLink.cpp

index 53e1d52..67ce23f 100644 (file)
Binary files a/src/Resources/TortoiseProcENG.rc and b/src/Resources/TortoiseProcENG.rc differ
index fe90817..1fc8517 100644 (file)
@@ -615,6 +615,15 @@ bool CAppUtils::LaunchApplication(const CString& sCommandLine, UINT idErrMessage
        return true;\r
 }\r
 \r
+bool CAppUtils::LaunchRemoteSetting()\r
+{\r
+    CString proc=CPathUtils::GetAppDirectory();\r
+    proc += _T("TortoiseProc.exe /command:settings");\r
+    proc += _T(" /path:\"");\r
+    proc += g_Git.m_CurrentDir;\r
+    proc += _T("\" /page:remote");\r
+    return LaunchApplication(proc, IDS_ERR_EXTDIFFSTART, false);\r
+}\r
 /**\r
 * Launch the external blame viewer\r
 */\r
@@ -1819,3 +1828,13 @@ CString CAppUtils::ExpandRelativeTime( int count, UINT format_1, UINT format_n )
        return answer;\r
 }\r
 \r
+bool CAppUtils::IsSSHPutty()\r
+{\r
+    CString sshclient=CRegString(_T("Software\\TortoiseGit\\SSH"));\r
+    sshclient=sshclient.MakeLower();\r
+    if(sshclient.Find(_T("plink.exe"),0)>=0)\r
+    {\r
+        return true;\r
+    }\r
+    return false;\r
+}\r
index efde195..7b6a645 100644 (file)
@@ -184,6 +184,11 @@ public:
 \r
        static CString GetMergeTempFile(CString str,CTGitPath &merge);\r
        static int         StashApply(CString ref);\r
+\r
+    static bool IsSSHPutty();\r
+\r
+    static bool LaunchRemoteSetting();\r
+\r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
        static bool GetMimeType(const CTGitPath& file, CString& mimetype);\r
index 2207031..eea84de 100644 (file)
@@ -6,7 +6,7 @@
 #include "CloneDlg.h"\r
 #include "BrowseFolder.h"\r
 #include "MessageBox.h"\r
-\r
+#include "AppUtils.h"\r
 // CCloneDlg dialog\r
 \r
 IMPLEMENT_DYNCREATE(CCloneDlg, CResizableStandAloneDialog)\r
@@ -15,7 +15,7 @@ CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/)
        : CResizableStandAloneDialog(CCloneDlg::IDD, pParent)\r
        , m_Directory(_T(""))\r
 {\r
-\r
+    m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty();\r
 }\r
 \r
 CCloneDlg::~CCloneDlg()\r
@@ -26,7 +26,10 @@ void CCloneDlg::DoDataExchange(CDataExchange* pDX)
 {\r
        CResizableStandAloneDialog::DoDataExchange(pDX);\r
        DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);\r
+    DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo);\r
        DDX_Text(pDX, IDC_CLONE_DIR, m_Directory);\r
+    DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile);\r
+\r
 }\r
 \r
 BOOL CCloneDlg::OnInitDialog()\r
@@ -39,6 +42,11 @@ BOOL CCloneDlg::OnInitDialog()
        AddAnchor(IDOK,BOTTOM_RIGHT);\r
        AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
 \r
+    AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_PUTTYKEYFILE_BROWSE,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT);\r
+    AddAnchor(IDC_PUTTYKEYFILE,BOTTOM_LEFT,BOTTOM_RIGHT);\r
+\r
        this->AddOthersToAnchor();\r
 \r
        m_URLCombo.SetURLHistory(TRUE);\r
@@ -46,19 +54,29 @@ BOOL CCloneDlg::OnInitDialog()
        if(m_URL.IsEmpty())\r
                m_URLCombo.SetCurSel(0);\r
        else\r
-               m_URLCombo.SetWindowTextW(m_URL);\r
+               m_URLCombo.SetWindowText(m_URL);\r
 \r
        CWnd *window=this->GetDlgItem(IDC_CLONE_DIR);\r
        if(window)\r
                SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM);\r
 \r
-       EnableSaveRestore(_T("CloneDlg"));\r
+    m_PuttyKeyCombo.SetPathHistory(TRUE);\r
+    m_PuttyKeyCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\puttykey"), _T("key"));\r
+    m_PuttyKeyCombo.SetCurSel(0);\r
+\r
+    this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() );\r
+    this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+    this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+       \r
+    EnableSaveRestore(_T("CloneDlg"));\r
        return TRUE;  // return TRUE  unless you set the focus to a control\r
 }\r
 \r
 BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog)\r
        ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl)\r
        ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse)\r
+    ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse)\r
+    ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload)\r
 END_MESSAGE_MAP()\r
 \r
 \r
@@ -75,7 +93,11 @@ void CCloneDlg::OnOK()
                CMessageBox::Show(NULL,_T("URL or Dir can't empty"),_T("TortiseGit"),MB_OK);\r
                return;\r
        }\r
+\r
        m_URLCombo.SaveHistory();\r
+    m_PuttyKeyCombo.SaveHistory();\r
+\r
+    this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile );\r
        CResizableDialog::OnOK();\r
 \r
 }\r
@@ -121,3 +143,28 @@ void CCloneDlg::OnEnChangeCloneDir()
 \r
        // TODO:  Add your control notification handler code here\r
 }\r
+\r
+void CCloneDlg::OnBnClickedPuttykeyfileBrowse()\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_PuttyKeyCombo.SetWindowText( dlg.GetPathName() );\r
+       }\r
+\r
+}\r
+\r
+void CCloneDlg::OnBnClickedPuttykeyAutoload()\r
+{\r
+    // TODO: Add your control notification handler code here\r
+    this->UpdateData();\r
+    this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+    this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+\r
+}\r
index 2c4f387..4c55791 100644 (file)
@@ -33,5 +33,10 @@ public:
        afx_msg void OnEnChangeCloneDir();\r
        CString m_Directory;\r
        CHistoryCombo   m_URLCombo;\r
+    CHistoryCombo   m_PuttyKeyCombo;\r
+    CString m_strPuttyKeyFile;\r
        CString m_URL;\r
+    BOOL    m_bAutoloadPuttyKeyFile;\r
+    afx_msg void OnBnClickedPuttykeyfileBrowse();\r
+    afx_msg void OnBnClickedPuttykeyAutoload();\r
 };\r
index 38f993b..ef8a0f0 100644 (file)
@@ -5,6 +5,7 @@
 #include "TortoiseProc.h"\r
 #include "PullFetchDlg.h"\r
 #include "Git.h"\r
+#include "AppUtils.h"\r
 \r
 // CPullFetchDlg dialog\r
 \r
@@ -14,6 +15,8 @@ CPullFetchDlg::CPullFetchDlg(CWnd* pParent /*=NULL*/)
        : CResizableStandAloneDialog(CPullFetchDlg::IDD, pParent)\r
 {\r
        m_IsPull=TRUE;\r
+    m_bAutoLoad = CAppUtils::IsSSHPutty();\r
+    m_bAutoLoadEnable=true;\r
 }\r
 \r
 CPullFetchDlg::~CPullFetchDlg()\r
@@ -26,6 +29,8 @@ void CPullFetchDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Control(pDX, IDC_REMOTE_COMBO, this->m_Remote);\r
        DDX_Control(pDX, IDC_OTHER, this->m_Other);\r
        DDX_Control(pDX, IDC_REMOTE_BRANCH, this->m_RemoteBranch);\r
+    DDX_Control(pDX,IDC_REMOTE_MANAGE, this->m_RemoteManage);\r
+    DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,m_bAutoLoad);\r
 \r
 }\r
 \r
@@ -34,6 +39,7 @@ BEGIN_MESSAGE_MAP(CPullFetchDlg,CResizableStandAloneDialog )
        ON_BN_CLICKED(IDC_REMOTE_RD, &CPullFetchDlg::OnBnClickedRd)\r
        ON_BN_CLICKED(IDC_OTHER_RD, &CPullFetchDlg::OnBnClickedRd)\r
        ON_BN_CLICKED(IDOK, &CPullFetchDlg::OnBnClickedOk)\r
+    ON_STN_CLICKED(IDC_REMOTE_MANAGE, &CPullFetchDlg::OnStnClickedRemoteManage)\r
 END_MESSAGE_MAP()\r
 \r
 BOOL CPullFetchDlg::OnInitDialog()\r
@@ -46,8 +52,13 @@ BOOL CPullFetchDlg::OnInitDialog()
        \r
        AddAnchor(IDOK,BOTTOM_RIGHT);\r
        AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_GROUPT_REMOTE,TOP_LEFT,BOTTOM_RIGHT);\r
+    AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT);\r
+    AddAnchor(IDC_REMOTE_MANAGE,BOTTOM_LEFT);\r
 \r
-       this->AddOthersToAnchor();\r
+    this->AddOthersToAnchor();\r
+\r
+    this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoadEnable);\r
 \r
        CheckRadioButton(IDC_REMOTE_RD,IDC_OTHER_RD,IDC_REMOTE_RD);\r
        m_Remote.EnableWindow(TRUE);\r
@@ -74,6 +85,7 @@ BOOL CPullFetchDlg::OnInitDialog()
                        m_Remote.AddString(list[i]);\r
        }\r
        EnableSaveRestore(_T("PullFetchDlg"));\r
+    this->m_RemoteManage.SetURL(CString());\r
        return TRUE;\r
 }\r
 // CPullFetchDlg message handlers\r
@@ -119,3 +131,9 @@ void CPullFetchDlg::OnBnClickedOk()
        m_RemoteBranch.SaveHistory();\r
        this->OnOK();\r
 }\r
+\r
+void CPullFetchDlg::OnStnClickedRemoteManage()\r
+{\r
+    // TODO: Add your control notification handler code here\r
+    CAppUtils::LaunchRemoteSetting();\r
+}\r
index d1cd109..f8f5184 100644 (file)
@@ -2,6 +2,7 @@
 \r
 #include "StandAloneDlg.h"\r
 #include "HistoryCombo.h"\r
+#include "HyperLink.h"\r
 // CPullFetchDlg dialog\r
 \r
 class CPullFetchDlg : public CResizableStandAloneDialog\r
@@ -25,9 +26,14 @@ protected:
        \r
        DECLARE_MESSAGE_MAP()\r
 public:\r
-       BOOL m_IsPull;\r
+       BOOL        m_IsPull;\r
+    BOOL        m_bAutoLoad;\r
+    BOOL        m_bAutoLoadEnable;\r
+    CHyperLink  m_RemoteManage;\r
+\r
        afx_msg void OnBnClickedRd();\r
        afx_msg void OnBnClickedOk();\r
        CString m_RemoteURL;\r
        CString m_RemoteBranchName;\r
+    afx_msg void OnStnClickedRemoteManage();\r
 };\r
index 4aa0418..8f181be 100644 (file)
@@ -7,6 +7,8 @@
 \r
 #include "Git.h"\r
 #include "registry.h"\r
+#include "AppUtils.h"\r
+\r
 // CPushDlg dialog\r
 \r
 IMPLEMENT_DYNAMIC(CPushDlg, CResizableStandAloneDialog)\r
@@ -14,7 +16,7 @@ IMPLEMENT_DYNAMIC(CPushDlg, CResizableStandAloneDialog)
 CPushDlg::CPushDlg(CWnd* pParent /*=NULL*/)\r
        : CResizableStandAloneDialog(CPushDlg::IDD, pParent)\r
 {\r
-\r
+    m_bAutoLoad = CAppUtils::IsSSHPutty();\r
 }\r
 \r
 CPushDlg::~CPushDlg()\r
@@ -31,6 +33,7 @@ void CPushDlg::DoDataExchange(CDataExchange* pDX)
        DDX_Check(pDX,IDC_FORCE,this->m_bForce);\r
        DDX_Check(pDX,IDC_PACK,this->m_bPack);\r
        DDX_Check(pDX,IDC_TAGS,this->m_bTags);\r
+    DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,this->m_bAutoLoad);\r
 \r
 }\r
 \r
@@ -40,6 +43,7 @@ BEGIN_MESSAGE_MAP(CPushDlg, CResizableStandAloneDialog)
        ON_BN_CLICKED(IDC_RD_URL, &CPushDlg::OnBnClickedRd)\r
        ON_CBN_SELCHANGE(IDC_BRANCH_SOURCE, &CPushDlg::OnCbnSelchangeBranchSource)\r
        ON_BN_CLICKED(IDOK, &CPushDlg::OnBnClickedOk)\r
+    ON_BN_CLICKED(IDC_REMOTE_MANAGE, &CPushDlg::OnBnClickedRemoteManage)\r
 END_MESSAGE_MAP()\r
 \r
 BOOL CPushDlg::OnInitDialog()\r
@@ -68,10 +72,13 @@ BOOL CPushDlg::OnInitDialog()
        AddAnchor(IDC_FORCE, TOP_LEFT);\r
        AddAnchor(IDC_PACK, TOP_LEFT);\r
        AddAnchor(IDC_TAGS, TOP_LEFT);\r
+    AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT);\r
 \r
+    AddAnchor(IDC_REMOTE_MANAGE,TOP_RIGHT);\r
 \r
        AddOthersToAnchor();\r
 \r
+    this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoad);\r
 \r
        EnableSaveRestore(_T("PushDlg"));\r
 \r
@@ -168,3 +175,9 @@ void CPushDlg::OnBnClickedOk()
 \r
        CResizableStandAloneDialog::OnOK();\r
 }\r
+\r
+void CPushDlg::OnBnClickedRemoteManage()\r
+{\r
+    // TODO: Add your control notification handler code here\r
+    CAppUtils::LaunchRemoteSetting();\r
+}\r
index 586a0ba..e753a66 100644 (file)
@@ -26,6 +26,7 @@ public:
        BOOL                    m_bTags;\r
        BOOL                    m_bForce;\r
        BOOL                    m_bPack;\r
+    BOOL            m_bAutoLoad;\r
 \r
        virtual BOOL OnInitDialog();\r
 // Dialog Data\r
@@ -39,4 +40,5 @@ public:
        afx_msg void OnBnClickedRd();\r
        afx_msg void OnCbnSelchangeBranchSource();\r
        afx_msg void OnBnClickedOk();\r
+    afx_msg void OnBnClickedRemoteManage();\r
 };\r
index 7a9cbaf..be3ec7b 100644 (file)
Binary files a/src/TortoiseProc/resource.h and b/src/TortoiseProc/resource.h differ
index cf7ff33..37e1e8b 100644 (file)
@@ -116,7 +116,14 @@ END_MESSAGE_MAP()
 \r
 void CHyperLink::OnClicked()\r
 {\r
-    GotoURL(m_strURL);\r
+    if(!m_strURL.IsEmpty())\r
+    {\r
+        GotoURL(m_strURL);\r
+    }\r
+    else\r
+    {\r
+        ::SendMessage(this->GetParent()->m_hWnd,WM_COMMAND,this->GetDlgCtrlID(),0);\r
+    }\r
 }\r
 \r
 HBRUSH CHyperLink::CtlColor(CDC* pDC, UINT /*nCtlColor*/) \r