OSDN Git Service

Add Many Help button at dialog
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / CloneDlg.cpp
1 // CloneDlg.cpp : implementation file\r
2 //\r
3 \r
4 #include "stdafx.h"\r
5 #include "TortoiseProc.h"\r
6 #include "CloneDlg.h"\r
7 #include "BrowseFolder.h"\r
8 #include "MessageBox.h"\r
9 #include "AppUtils.h"\r
10 // CCloneDlg dialog\r
11 \r
12 IMPLEMENT_DYNCREATE(CCloneDlg, CResizableStandAloneDialog)\r
13 \r
14 CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/)\r
15         : CResizableStandAloneDialog(CCloneDlg::IDD, pParent)\r
16         , m_Directory(_T(""))\r
17 {\r
18     m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty();\r
19 }\r
20 \r
21 CCloneDlg::~CCloneDlg()\r
22 {\r
23 }\r
24 \r
25 void CCloneDlg::DoDataExchange(CDataExchange* pDX)\r
26 {\r
27         CResizableStandAloneDialog::DoDataExchange(pDX);\r
28         DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);\r
29     DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo);\r
30         DDX_Text(pDX, IDC_CLONE_DIR, m_Directory);\r
31     DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile);\r
32 \r
33 }\r
34 \r
35 BOOL CCloneDlg::OnInitDialog()\r
36 {\r
37         CResizableStandAloneDialog::OnInitDialog();\r
38         AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT);\r
39         AddAnchor(IDC_CLONE_BROWSE_URL, TOP_RIGHT);\r
40         AddAnchor(IDC_CLONE_DIR, TOP_LEFT,TOP_RIGHT);\r
41         AddAnchor(IDC_CLONE_DIR_BROWSE, TOP_RIGHT);\r
42         AddAnchor(IDOK,BOTTOM_RIGHT);\r
43         AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
44 \r
45     AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,BOTTOM_RIGHT);\r
46     AddAnchor(IDC_PUTTYKEYFILE_BROWSE,BOTTOM_RIGHT);\r
47     AddAnchor(IDC_PUTTYKEY_AUTOLOAD,BOTTOM_LEFT);\r
48     AddAnchor(IDC_PUTTYKEYFILE,BOTTOM_LEFT,BOTTOM_RIGHT);\r
49         AddAnchor(IDHELP, BOTTOM_RIGHT);\r
50 \r
51         this->AddOthersToAnchor();\r
52 \r
53         m_URLCombo.SetURLHistory(TRUE);\r
54         m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS"), _T("url"));\r
55         if(m_URL.IsEmpty())\r
56         {\r
57                 CString str=CAppUtils::GetClipboardLink();\r
58                 if(str.IsEmpty())\r
59                         m_URLCombo.SetCurSel(0);\r
60                 else\r
61                         m_URLCombo.SetWindowText(str);\r
62         }\r
63         else\r
64                 m_URLCombo.SetWindowText(m_URL);\r
65 \r
66         CWnd *window=this->GetDlgItem(IDC_CLONE_DIR);\r
67         if(window)\r
68                 SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM);\r
69 \r
70     m_PuttyKeyCombo.SetPathHistory(TRUE);\r
71     m_PuttyKeyCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\puttykey"), _T("key"));\r
72     m_PuttyKeyCombo.SetCurSel(0);\r
73 \r
74     this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() );\r
75     this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
76     this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
77        \r
78     EnableSaveRestore(_T("CloneDlg"));\r
79         return TRUE;  // return TRUE  unless you set the focus to a control\r
80 }\r
81 \r
82 BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog)\r
83         ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl)\r
84         ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse)\r
85     ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse)\r
86     ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload)\r
87         ON_CBN_SELCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnSelchangeUrlcombo)\r
88         ON_NOTIFY(CBEN_BEGINEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenBegineditUrlcombo)\r
89         ON_NOTIFY(CBEN_ENDEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenEndeditUrlcombo)\r
90         ON_CBN_EDITCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnEditchangeUrlcombo)\r
91 END_MESSAGE_MAP()\r
92 \r
93 \r
94 \r
95 // CCloneDlg message handlers\r
96 \r
97 void CCloneDlg::OnOK()\r
98 {\r
99         this->m_URLCombo.GetWindowTextW(m_URL);\r
100         m_URL.Trim();\r
101         UpdateData(TRUE);\r
102         if(m_URL.IsEmpty() || m_Directory.IsEmpty())\r
103         {\r
104                 CMessageBox::Show(NULL, _T("URL or Directory can't be empty"), _T("TortoiseGit"), MB_OK);\r
105                 return;\r
106         }\r
107 \r
108         m_URLCombo.SaveHistory();\r
109     m_PuttyKeyCombo.SaveHistory();\r
110 \r
111     this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile);\r
112         CResizableDialog::OnOK();\r
113 \r
114 }\r
115 \r
116 void CCloneDlg::OnCancel()\r
117 {\r
118         CResizableDialog::OnCancel();\r
119 }\r
120 \r
121 void CCloneDlg::OnBnClickedCloneBrowseUrl()\r
122 {\r
123         // TODO: Add your control notification handler code here\r
124         CBrowseFolder browseFolder;\r
125         browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
126         CString strCloneDirectory;\r
127         this->m_URLCombo.GetWindowTextW(strCloneDirectory);\r
128         if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK) \r
129         {\r
130                 this->m_URLCombo.SetWindowTextW(strCloneDirectory);\r
131         }\r
132 }\r
133 \r
134 void CCloneDlg::OnBnClickedCloneDirBrowse()\r
135 {\r
136         // TODO: Add your control notification handler code here\r
137         CBrowseFolder browseFolder;\r
138         browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
139         CString strCloneDirectory = this->m_Directory;\r
140         if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK) \r
141         {\r
142                 UpdateData(TRUE);\r
143                 m_Directory = strCloneDirectory;\r
144                 UpdateData(FALSE);\r
145         }\r
146 }\r
147 \r
148 void CCloneDlg::OnEnChangeCloneDir()\r
149 {\r
150         // TODO:  If this is a RICHEDIT control, the control will not\r
151         // send this notification unless you override the CDHtmlDialog::OnInitDialog()\r
152         // function and call CRichEditCtrl().SetEventMask()\r
153         // with the ENM_CHANGE flag ORed into the mask.\r
154 \r
155         // TODO:  Add your control notification handler code here\r
156 }\r
157 \r
158 void CCloneDlg::OnBnClickedPuttykeyfileBrowse()\r
159 {\r
160     // TODO: Add your control notification handler code here\r
161     CFileDialog dlg(TRUE,NULL,\r
162                                         NULL,\r
163                                         OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\r
164                                         _T("Putty Private Key(*.ppk)|*.ppk|All Files(*.*)|*.*||"));\r
165         \r
166         this->UpdateData();\r
167         if(dlg.DoModal()==IDOK)\r
168         {\r
169         this->m_PuttyKeyCombo.SetWindowText( dlg.GetPathName() );\r
170         }\r
171 \r
172 }\r
173 \r
174 void CCloneDlg::OnBnClickedPuttykeyAutoload()\r
175 {\r
176     // TODO: Add your control notification handler code here\r
177     this->UpdateData();\r
178     this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
179     this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
180 \r
181 }\r
182 \r
183 void CCloneDlg::OnCbnSelchangeUrlcombo()\r
184 {\r
185         // TODO: Add your control notification handler code here\r
186 }\r
187 \r
188 void CCloneDlg::OnCbenBegineditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)\r
189 {\r
190         // TODO: Add your control notification handler code here\r
191         *pResult = 0;\r
192 }\r
193 \r
194 void CCloneDlg::OnCbenEndeditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)\r
195 {\r
196         // TODO: Add your control notification handler code here\r
197         *pResult = 0;\r
198 }\r
199 \r
200 void CCloneDlg::OnCbnEditchangeUrlcombo()\r
201 {\r
202         // TODO: Add your control notification handler code here\r
203         this->UpdateData();\r
204         CString url;\r
205         m_URLCombo.GetWindowText(url);\r
206         if(m_OldURL == url )\r
207                 return;\r
208 \r
209         m_OldURL=url;\r
210 \r
211         //if(url.IsEmpty())\r
212         //      return;\r
213 \r
214         CString old;\r
215         old=m_ModuleName;\r
216 \r
217         url.Replace(_T('\\'),_T('/'));\r
218         int start=url.ReverseFind(_T('/'));\r
219         if(start<0)\r
220         {\r
221                 start = url.ReverseFind(_T(':'));\r
222                 if(start <0)\r
223                         start = url.ReverseFind(_T('@'));\r
224 \r
225                 if(start<0)\r
226                         start = 0;\r
227         }\r
228         CString temp;\r
229         temp=url.Mid(start+1);\r
230         \r
231         temp=temp.MakeLower();\r
232 \r
233         int end;\r
234         end=temp.Find(_T(".git"));\r
235         if(end<0)\r
236                 end=temp.GetLength();\r
237 \r
238         //CString modulename;\r
239         m_ModuleName=url.Mid(start+1,end);\r
240         \r
241         start = m_Directory.ReverseFind(_T('\\'));\r
242         if(start <0 )\r
243                 start = m_Directory.ReverseFind(_T('/'));\r
244         if(start <0 )\r
245                 start =0;\r
246 \r
247         int dirstart=m_Directory.Find(old,start);\r
248         if(dirstart>=0 && (dirstart+old.GetLength() == m_Directory.GetLength()) )\r
249         {\r
250                 m_Directory=m_Directory.Left(dirstart);\r
251                 m_Directory+=m_ModuleName;\r
252 \r
253         }else\r
254         {\r
255                 if(m_Directory.GetLength()>0 && \r
256                         (m_Directory[m_Directory.GetLength()-1] != _T('\\') ||\r
257                         m_Directory[m_Directory.GetLength()-1] != _T('/') ) )\r
258                 {\r
259                         m_Directory+=_T('\\');\r
260                 }\r
261                 m_Directory += m_ModuleName;\r
262         }\r
263 \r
264         if(m_Directory.GetLength()>0)\r
265         {\r
266                 if( m_Directory[m_Directory.GetLength()-1] == _T('\\') ||\r
267                         m_Directory[m_Directory.GetLength()-1] == _T('/')\r
268                    )\r
269                 {\r
270                         m_Directory=m_Directory.Left(m_Directory.GetLength()-1);\r
271                 }\r
272 \r
273         }\r
274         this->UpdateData(FALSE);\r
275 }\r