OSDN Git Service

Detect clipboard URL at clone and push and pull dialog URL input box.
authorFrank Li <lznuaa@gmail.com>
Thu, 9 Apr 2009 14:19:28 +0000 (22:19 +0800)
committerFrank Li <lznuaa@gmail.com>
Thu, 9 Apr 2009 14:19:28 +0000 (22:19 +0800)
Signed-off-by: Frank Li <lznuaa@gmail.com>
src/TortoiseProc/AppUtils.cpp
src/TortoiseProc/AppUtils.h
src/TortoiseProc/CloneDlg.cpp
src/TortoiseProc/PullFetchDlg.cpp
src/TortoiseProc/PullFetchDlg.h
src/TortoiseProc/PushDlg.cpp
src/TortoiseProc/TortoiseProc.vcproj

index 7feffa1..38a9846 100644 (file)
@@ -1868,3 +1868,52 @@ bool CAppUtils::IsSSHPutty()
     }\r
     return false;\r
 }\r
+\r
+CString CAppUtils::GetClipboardLink()\r
+{\r
+       if (!OpenClipboard(NULL))\r
+               return CString();\r
+\r
+       CString sClipboardText;\r
+       HGLOBAL hglb = GetClipboardData(CF_TEXT);\r
+       if (hglb)\r
+       {\r
+               LPCSTR lpstr = (LPCSTR)GlobalLock(hglb);\r
+               sClipboardText = CString(lpstr);\r
+               GlobalUnlock(hglb); \r
+       }\r
+       hglb = GetClipboardData(CF_UNICODETEXT);\r
+       if (hglb)\r
+       {\r
+               LPCTSTR lpstr = (LPCTSTR)GlobalLock(hglb);\r
+               sClipboardText = lpstr;\r
+               GlobalUnlock(hglb); \r
+       }\r
+       CloseClipboard();\r
+\r
+       if(!sClipboardText.IsEmpty())\r
+       {\r
+               if(sClipboardText[0] == _T('\"') && sClipboardText[sClipboardText.GetLength()-1] == _T('\"'))\r
+                       sClipboardText=sClipboardText.Mid(1,sClipboardText.GetLength()-2);\r
+\r
+               if(sClipboardText.Find( _T("http://")) == 0)\r
+                       return sClipboardText;\r
+               \r
+               if(sClipboardText.Find( _T("https://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.Find( _T("git://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.Find( _T("ssh://")) == 0)\r
+                       return sClipboardText;\r
+\r
+               if(sClipboardText.GetLength()>=2)\r
+                       if( sClipboardText[1] == _T(':') )\r
+                               if( (sClipboardText[0] >= 'A' &&  sClipboardText[0] <= 'Z') \r
+                                       || (sClipboardText[0] >= 'a' &&  sClipboardText[0] <= 'z') )\r
+                                       return sClipboardText;\r
+       }\r
+\r
+       return CString(_T(""));\r
+}
\ No newline at end of file
index bdd1363..69aec1b 100644 (file)
@@ -191,6 +191,8 @@ public:
 \r
        static bool LaunchPAgent(CString *keyfile=NULL,CString * pRemote=NULL);\r
 \r
+       static CString GetClipboardLink();\r
+\r
 private:\r
        static CString PickDiffTool(const CTGitPath& file1, const CTGitPath& file2);\r
        static bool GetMimeType(const CTGitPath& file, CString& mimetype);\r
index eea84de..25b5826 100644 (file)
@@ -52,7 +52,13 @@ BOOL CCloneDlg::OnInitDialog()
        m_URLCombo.SetURLHistory(TRUE);\r
        m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS"), _T("url"));\r
        if(m_URL.IsEmpty())\r
-               m_URLCombo.SetCurSel(0);\r
+       {\r
+               CString str=CAppUtils::GetClipboardLink();\r
+               if(str.IsEmpty())\r
+                       m_URLCombo.SetCurSel(0);\r
+               else\r
+                       m_URLCombo.SetWindowText(str);\r
+       }\r
        else\r
                m_URLCombo.SetWindowText(m_URL);\r
 \r
index ef8a0f0..5e2f3e6 100644 (file)
@@ -67,23 +67,39 @@ BOOL CPullFetchDlg::OnInitDialog()
 \r
        m_Other.SetURLHistory(TRUE);\r
        m_Other.LoadHistory(_T("Software\\TortoiseGit\\History\\PullURLS"), _T("url"));\r
-       m_Other.SetCurSel(0);\r
+       CString clippath=CAppUtils::GetClipboardLink();\r
+       if(clippath.IsEmpty())\r
+               m_Other.SetCurSel(0);\r
+       else\r
+               m_Other.SetWindowText(clippath);\r
 \r
        m_RemoteBranch.LoadHistory(_T("Software\\TortoiseGit\\History\\PullRemoteBranch"), _T("br"));\r
        m_RemoteBranch.SetCurSel(0);\r
 \r
+       CString WorkingDir=g_Git.m_CurrentDir;\r
+\r
        if(m_IsPull)\r
-               this->SetWindowTextW(_T("Pull"));\r
+               this->SetWindowTextW(CString(_T("Pull - "))+WorkingDir);\r
        else\r
-               this->SetWindowTextW(_T("Fetch"));\r
+               this->SetWindowTextW(CString(_T("Fetch - "))+WorkingDir);\r
 \r
        STRING_VECTOR list;\r
+       \r
+       CRegString remote(CString(_T("Software\\TortoiseGit\\History\\PullRemote\\")+WorkingDir));\r
+       m_RemoteReg = remote;\r
+       int sel=0;\r
 \r
        if(!g_Git.GetRemoteList(list))\r
        {       \r
                for(unsigned int i=0;i<list.size();i++)\r
+               {\r
                        m_Remote.AddString(list[i]);\r
+                       if(list[i] == remote)\r
+                               sel = i;\r
+               }\r
        }\r
+       m_Remote.SetCurSel(sel);\r
+\r
        EnableSaveRestore(_T("PullFetchDlg"));\r
     this->m_RemoteManage.SetURL(CString());\r
        return TRUE;\r
@@ -127,6 +143,8 @@ void CPullFetchDlg::OnBnClickedOk()
                \r
        }\r
 \r
+       m_RemoteReg = m_Remote.GetString();\r
+\r
        m_Other.SaveHistory();\r
        m_RemoteBranch.SaveHistory();\r
        this->OnOK();\r
index f8f5184..3297236 100644 (file)
@@ -3,6 +3,7 @@
 #include "StandAloneDlg.h"\r
 #include "HistoryCombo.h"\r
 #include "HyperLink.h"\r
+#include "registry.h"\r
 // CPullFetchDlg dialog\r
 \r
 class CPullFetchDlg : public CResizableStandAloneDialog\r
@@ -22,7 +23,7 @@ protected:
        CHistoryCombo   m_Other;\r
        CHistoryCombo   m_RemoteBranch;\r
        virtual BOOL OnInitDialog();\r
-\r
+       CRegString m_RemoteReg;\r
        \r
        DECLARE_MESSAGE_MAP()\r
 public:\r
index 8f181be..7022c2a 100644 (file)
@@ -87,7 +87,11 @@ BOOL CPushDlg::OnInitDialog()
        CString WorkingDir=g_Git.m_CurrentDir;\r
        WorkingDir.Replace(_T(':'),_T('_'));\r
        m_RemoteURL.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\PushURLS\\"))+WorkingDir, _T("url"));\r
-       m_RemoteURL.SetCurSel(0);\r
+       CString clippath=CAppUtils::GetClipboardLink();\r
+       if(clippath.IsEmpty())\r
+               m_RemoteURL.SetCurSel(0);\r
+       else\r
+               m_RemoteURL.SetWindowText(clippath);\r
 \r
        m_RemoteURL.EnableWindow(FALSE);\r
        CheckRadioButton(IDC_RD_REMOTE,IDC_RD_URL,IDC_RD_REMOTE);\r
index ced05cc..4209ea9 100644 (file)
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\copy.ico"\r
+                               RelativePath="..\Resources\copy.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\copy.ico"\r
+                               RelativePath=".\copy.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\explorer.ico"\r
+                               RelativePath=".\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\explorer.ico"\r
+                               RelativePath="..\Resources\explorer.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
+                               RelativePath="..\Resources\gitconfig.ico"\r
+                               >\r
+                       </File>\r
+                       <File\r
+                               RelativePath="..\Resources\gitremote.ico"\r
+                               >\r
+                       </File>\r
+                       <File\r
                                RelativePath="..\Resources\graph-bar-stacked.ico"\r
                                >\r
                        </File>\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\open.ico"\r
+                               RelativePath=".\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\open.ico"\r
+                               RelativePath="..\Resources\open.ico"\r
                                >\r
                        </File>\r
                        <File\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\save.ico"\r
+                               RelativePath=".\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\save.ico"\r
+                               RelativePath="..\Resources\save.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath="..\Resources\saveas.ico"\r
+                               RelativePath=".\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r
-                               RelativePath=".\saveas.ico"\r
+                               RelativePath="..\Resources\saveas.ico"\r
                                >\r
                        </File>\r
                        <File\r