1 // CloneDlg.cpp : implementation file
\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
12 IMPLEMENT_DYNCREATE(CCloneDlg, CResizableStandAloneDialog)
\r
14 CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/)
\r
15 : CResizableStandAloneDialog(CCloneDlg::IDD, pParent)
\r
16 , m_Directory(_T(""))
\r
18 m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty();
\r
21 m_bSVNTrunk = FALSE;
\r
23 m_bSVNBranch = FALSE;;
\r
24 m_strSVNTrunk = _T("trunk");
\r
25 m_strSVNTags = _T("tags");
\r
26 m_strSVNBranchs = _T("branches");
\r
28 m_regBrowseUrl = CRegDWORD(_T("Software\\TortoiseGit\\TortoiseProc\\CloneBrowse"),0);
\r
32 CCloneDlg::~CCloneDlg()
\r
36 void CCloneDlg::DoDataExchange(CDataExchange* pDX)
\r
38 CResizableStandAloneDialog::DoDataExchange(pDX);
\r
39 DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);
\r
40 DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo);
\r
41 DDX_Control(pDX, IDC_CLONE_BROWSE_URL, m_BrowseUrl);
\r
42 DDX_Text(pDX, IDC_CLONE_DIR, m_Directory);
\r
43 DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile);
\r
45 DDX_Check(pDX,IDC_CHECK_SVN, m_bSVN);
\r
46 DDX_Check(pDX,IDC_CHECK_SVN_TRUNK, m_bSVNTrunk);
\r
47 DDX_Check(pDX,IDC_CHECK_SVN_TAG, m_bSVNTags);
\r
48 DDX_Check(pDX,IDC_CHECK_SVN_BRANCH, m_bSVNBranch);
\r
49 DDX_Check(pDX,IDC_CHECK_SVN_FROM, m_bSVNFrom);
\r
51 DDX_Text(pDX, IDC_EDIT_SVN_TRUNK, m_strSVNTrunk);
\r
52 DDX_Text(pDX, IDC_EDIT_SVN_TAG, m_strSVNTags);
\r
53 DDX_Text(pDX, IDC_EDIT_SVN_BRANCH, m_strSVNBranchs);
\r
54 DDX_Text(pDX, IDC_EDIT_SVN_FROM, this->m_nSVNFrom);
\r
58 BOOL CCloneDlg::OnInitDialog()
\r
60 CResizableStandAloneDialog::OnInitDialog();
\r
61 AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT);
\r
62 AddAnchor(IDC_CLONE_BROWSE_URL, TOP_RIGHT);
\r
63 AddAnchor(IDC_CLONE_DIR, TOP_LEFT,TOP_RIGHT);
\r
64 AddAnchor(IDC_CLONE_DIR_BROWSE, TOP_RIGHT);
\r
65 AddAnchor(IDOK,BOTTOM_RIGHT);
\r
66 AddAnchor(IDCANCEL,BOTTOM_RIGHT);
\r
68 AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,TOP_RIGHT);
\r
69 AddAnchor(IDC_PUTTYKEYFILE_BROWSE,TOP_RIGHT);
\r
70 AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT);
\r
71 AddAnchor(IDC_PUTTYKEYFILE,TOP_LEFT,TOP_RIGHT);
\r
72 AddAnchor(IDC_CLONE_GROUP_SVN,TOP_LEFT,TOP_RIGHT);
\r
73 AddAnchor(IDHELP, BOTTOM_RIGHT);
\r
75 this->AddOthersToAnchor();
\r
77 m_URLCombo.SetURLHistory(TRUE);
\r
78 m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS"), _T("url"));
\r
81 CString str=CAppUtils::GetClipboardLink();
\r
83 m_URLCombo.SetCurSel(0);
\r
85 m_URLCombo.SetWindowText(str);
\r
88 m_URLCombo.SetWindowText(m_URL);
\r
90 CWnd *window=this->GetDlgItem(IDC_CLONE_DIR);
\r
92 SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM);
\r
94 this->m_BrowseUrl.AddEntry(CString(_T("Dir...")));
\r
95 this->m_BrowseUrl.AddEntry(CString(_T("Web")));
\r
96 m_BrowseUrl.SetCurrentEntry(m_regBrowseUrl);
\r
98 m_PuttyKeyCombo.SetPathHistory(TRUE);
\r
99 m_PuttyKeyCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\puttykey"), _T("key"));
\r
100 m_PuttyKeyCombo.SetCurSel(0);
\r
102 this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() );
\r
103 this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);
\r
104 this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);
\r
106 EnableSaveRestore(_T("CloneDlg"));
\r
108 OnBnClickedCheckSvn();
\r
110 return TRUE; // return TRUE unless you set the focus to a control
\r
113 BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog)
\r
114 ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl)
\r
115 ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse)
\r
116 ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse)
\r
117 ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload)
\r
118 ON_CBN_SELCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnSelchangeUrlcombo)
\r
119 ON_NOTIFY(CBEN_BEGINEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenBegineditUrlcombo)
\r
120 ON_NOTIFY(CBEN_ENDEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenEndeditUrlcombo)
\r
121 ON_CBN_EDITCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnEditchangeUrlcombo)
\r
122 ON_BN_CLICKED(IDC_CHECK_SVN, &CCloneDlg::OnBnClickedCheckSvn)
\r
123 ON_BN_CLICKED(IDC_CHECK_SVN_TRUNK, &CCloneDlg::OnBnClickedCheckSvnTrunk)
\r
124 ON_BN_CLICKED(IDC_CHECK_SVN_TAG, &CCloneDlg::OnBnClickedCheckSvnTag)
\r
125 ON_BN_CLICKED(IDC_CHECK_SVN_BRANCH, &CCloneDlg::OnBnClickedCheckSvnBranch)
\r
126 ON_BN_CLICKED(IDC_CHECK_SVN_FROM, &CCloneDlg::OnBnClickedCheckSvnFrom)
\r
131 // CCloneDlg message handlers
\r
133 void CCloneDlg::OnOK()
\r
135 this->m_URLCombo.GetWindowTextW(m_URL);
\r
138 if(m_URL.IsEmpty() || m_Directory.IsEmpty())
\r
140 CMessageBox::Show(NULL, _T("URL or Directory can't be empty"), _T("TortoiseGit"), MB_OK);
\r
144 m_URLCombo.SaveHistory();
\r
145 m_PuttyKeyCombo.SaveHistory();
\r
147 this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile);
\r
148 CResizableDialog::OnOK();
\r
152 void CCloneDlg::OnCancel()
\r
154 CResizableDialog::OnCancel();
\r
157 void CCloneDlg::OnBnClickedCloneBrowseUrl()
\r
159 // TODO: Add your control notification handler code here
\r
160 CBrowseFolder browseFolder;
\r
161 browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
\r
162 CString strCloneDirectory;
\r
164 int sel = this->m_BrowseUrl.GetCurrentEntry();
\r
165 this->m_regBrowseUrl = sel;
\r
170 m_URLCombo.GetWindowText(str);
\r
171 ShellExecute(NULL, _T("open"), str, NULL,NULL, SW_SHOW);
\r
175 this->m_URLCombo.GetWindowTextW(strCloneDirectory);
\r
176 if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK)
\r
178 this->m_URLCombo.SetWindowTextW(strCloneDirectory);
\r
182 void CCloneDlg::OnBnClickedCloneDirBrowse()
\r
184 // TODO: Add your control notification handler code here
\r
185 CBrowseFolder browseFolder;
\r
186 browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
\r
187 CString strCloneDirectory = this->m_Directory;
\r
188 if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK)
\r
191 m_Directory = strCloneDirectory;
\r
196 void CCloneDlg::OnEnChangeCloneDir()
\r
198 // TODO: If this is a RICHEDIT control, the control will not
\r
199 // send this notification unless you override the CDHtmlDialog::OnInitDialog()
\r
200 // function and call CRichEditCtrl().SetEventMask()
\r
201 // with the ENM_CHANGE flag ORed into the mask.
\r
203 // TODO: Add your control notification handler code here
\r
206 void CCloneDlg::OnBnClickedPuttykeyfileBrowse()
\r
208 // TODO: Add your control notification handler code here
\r
209 CFileDialog dlg(TRUE,NULL,
\r
211 OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
\r
212 _T("Putty Private Key(*.ppk)|*.ppk|All Files(*.*)|*.*||"));
\r
214 this->UpdateData();
\r
215 if(dlg.DoModal()==IDOK)
\r
217 this->m_PuttyKeyCombo.SetWindowText( dlg.GetPathName() );
\r
222 void CCloneDlg::OnBnClickedPuttykeyAutoload()
\r
224 // TODO: Add your control notification handler code here
\r
225 this->UpdateData();
\r
226 this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);
\r
227 this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);
\r
231 void CCloneDlg::OnCbnSelchangeUrlcombo()
\r
233 // TODO: Add your control notification handler code here
\r
236 void CCloneDlg::OnCbenBegineditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)
\r
238 // TODO: Add your control notification handler code here
\r
242 void CCloneDlg::OnCbenEndeditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)
\r
244 // TODO: Add your control notification handler code here
\r
248 void CCloneDlg::OnCbnEditchangeUrlcombo()
\r
250 // TODO: Add your control notification handler code here
\r
251 this->UpdateData();
\r
253 m_URLCombo.GetWindowText(url);
\r
255 if(m_OldURL == url )
\r
260 //if(url.IsEmpty())
\r
266 url.Replace(_T('\\'),_T('/'));
\r
267 int start=url.ReverseFind(_T('/'));
\r
270 start = url.ReverseFind(_T(':'));
\r
272 start = url.ReverseFind(_T('@'));
\r
278 temp=url.Mid(start+1);
\r
280 temp=temp.MakeLower();
\r
283 end=temp.Find(_T(".git"));
\r
285 end=temp.GetLength();
\r
287 //CString modulename;
\r
288 m_ModuleName=url.Mid(start+1,end);
\r
290 start = m_Directory.ReverseFind(_T('\\'));
\r
292 start = m_Directory.ReverseFind(_T('/'));
\r
296 int dirstart=m_Directory.Find(old,start);
\r
297 if(dirstart>=0 && (dirstart+old.GetLength() == m_Directory.GetLength()) )
\r
299 m_Directory=m_Directory.Left(dirstart);
\r
300 m_Directory+=m_ModuleName;
\r
304 if(m_Directory.GetLength()>0 &&
\r
305 (m_Directory[m_Directory.GetLength()-1] != _T('\\') ||
\r
306 m_Directory[m_Directory.GetLength()-1] != _T('/') ) )
\r
308 m_Directory+=_T('\\');
\r
310 m_Directory += m_ModuleName;
\r
313 if(m_Directory.GetLength()>0)
\r
315 if( m_Directory[m_Directory.GetLength()-1] == _T('\\') ||
\r
316 m_Directory[m_Directory.GetLength()-1] == _T('/')
\r
319 m_Directory=m_Directory.Left(m_Directory.GetLength()-1);
\r
323 this->UpdateData(FALSE);
\r
326 void CCloneDlg::OnBnClickedCheckSvn()
\r
328 this->UpdateData();
\r
333 m_URLCombo.GetWindowText(str);
\r
335 while(str.GetLength()>=1 &&
\r
336 str[str.GetLength()-1] == _T('\\') &&
\r
337 str[str.GetLength()-1] == _T('/'))
\r
339 str=str.Left(str.GetLength()-1);
\r
341 if(str.GetLength()>=5 && (str.Right(5).MakeLower() == _T("trunk") ))
\r
343 this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = FALSE;
\r
344 this->UpdateData(FALSE);
\r
347 this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = TRUE;
\r
348 this->UpdateData(FALSE);
\r
353 // TODO: Add your control notification handler code here
\r
354 OnBnClickedCheckSvnTrunk();
\r
355 OnBnClickedCheckSvnTag();
\r
356 OnBnClickedCheckSvnBranch();
\r
357 OnBnClickedCheckSvnFrom();
\r
360 void CCloneDlg::OnBnClickedCheckSvnTrunk()
\r
362 // TODO: Add your control notification handler code here
\r
364 this->GetDlgItem(IDC_CHECK_SVN_TRUNK)->EnableWindow(this->m_bSVN);
\r
365 this->GetDlgItem(IDC_EDIT_SVN_TRUNK)->EnableWindow(this->m_bSVNTrunk&&this->m_bSVN);
\r
368 void CCloneDlg::OnBnClickedCheckSvnTag()
\r
370 // TODO: Add your control notification handler code here
\r
372 this->GetDlgItem(IDC_CHECK_SVN_TAG)->EnableWindow(this->m_bSVN);
\r
373 this->GetDlgItem(IDC_EDIT_SVN_TAG)->EnableWindow(this->m_bSVNTags&&this->m_bSVN);
\r
376 void CCloneDlg::OnBnClickedCheckSvnBranch()
\r
378 // TODO: Add your control notification handler code here
\r
380 this->GetDlgItem(IDC_CHECK_SVN_BRANCH)->EnableWindow(this->m_bSVN);
\r
381 this->GetDlgItem(IDC_EDIT_SVN_BRANCH)->EnableWindow(this->m_bSVNBranch&&this->m_bSVN);
\r
384 void CCloneDlg::OnBnClickedCheckSvnFrom()
\r
386 // TODO: Add your control notification handler code here
\r
388 this->GetDlgItem(IDC_CHECK_SVN_FROM)->EnableWindow(this->m_bSVN);
\r
389 this->GetDlgItem(IDC_EDIT_SVN_FROM)->EnableWindow(this->m_bSVNFrom&&this->m_bSVN);
\r