Fixed issue #3678: Remove deprecated git lfs clone option from clone dialog
[TortoiseGit.git] / src / TortoiseProc / CloneDlg.cpp
blobe000abf8ecd3797b2de6b98f3d657cfb3456e0b5
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2017, 2019-2020 - TortoiseGit
5 // This program is free software; you can redistribute it and/or
6 // modify it under the terms of the GNU General Public License
7 // as published by the Free Software Foundation; either version 2
8 // of the License, or (at your option) any later version.
10 // This program is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
15 // You should have received a copy of the GNU General Public License
16 // along with this program; if not, write to the Free Software Foundation,
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 // CloneDlg.cpp : implementation file
22 #include "stdafx.h"
23 #include "TortoiseProc.h"
24 #include "Git.h"
25 #include "CloneDlg.h"
26 #include "BrowseFolder.h"
27 #include "MessageBox.h"
28 #include "AppUtils.h"
29 // CCloneDlg dialog
31 IMPLEMENT_DYNCREATE(CCloneDlg, CHorizontalResizableStandAloneDialog)
33 CCloneDlg::CCloneDlg(CWnd* pParent /*=nullptr*/)
34 : CHorizontalResizableStandAloneDialog(CCloneDlg::IDD, pParent)
35 , m_bRecursive(BST_UNCHECKED)
36 , m_bBare(BST_UNCHECKED)
37 , m_bBranch(BST_UNCHECKED)
38 , m_bOrigin(BST_UNCHECKED)
39 , m_bNoCheckout(BST_UNCHECKED)
40 , m_bSVN(BST_UNCHECKED)
41 , m_bSVNTrunk(BST_UNCHECKED)
42 , m_bSVNTags(BST_UNCHECKED)
43 , m_bSVNBranch(BST_UNCHECKED)
44 , m_bSVNFrom(BST_UNCHECKED)
45 , m_bSVNUserName(BST_UNCHECKED)
46 , m_bExactPath(FALSE)
47 , m_strSVNTrunk(L"trunk")
48 , m_strSVNTags(L"tags")
49 , m_strSVNBranchs(L"branches")
50 , m_nDepth(1)
51 , m_bDepth(BST_UNCHECKED)
52 , m_bSaving(false)
53 , m_nSVNFrom(0)
54 , m_bUseLFS(FALSE)
55 , m_regBrowseUrl(L"Software\\TortoiseGit\\TortoiseProc\\CloneBrowse", 0)
56 , m_regCloneDir(L"Software\\TortoiseGit\\TortoiseProc\\CloneDir")
57 , m_regCloneRecursive(L"Software\\TortoiseGit\\TortoiseProc\\CloneRecursive", FALSE)
58 , m_regUseSSHKey(L"Software\\TortoiseGit\\TortoiseProc\\CloneUseSSHKey", TRUE)
60 m_bAutoloadPuttyKeyFile = m_regUseSSHKey && CAppUtils::IsSSHPutty();
63 CCloneDlg::~CCloneDlg()
67 void CCloneDlg::DoDataExchange(CDataExchange* pDX)
69 CHorizontalResizableStandAloneDialog::DoDataExchange(pDX);
70 DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);
71 DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo);
72 DDX_Control(pDX, IDC_CLONE_BROWSE_URL, m_BrowseUrl);
73 DDX_Text(pDX, IDC_CLONE_DIR, m_Directory);
74 DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile);
76 DDX_Check(pDX,IDC_CHECK_SVN, m_bSVN);
77 DDX_Check(pDX,IDC_CHECK_SVN_TRUNK, m_bSVNTrunk);
78 DDX_Check(pDX,IDC_CHECK_SVN_TAG, m_bSVNTags);
79 DDX_Check(pDX,IDC_CHECK_SVN_BRANCH, m_bSVNBranch);
80 DDX_Check(pDX,IDC_CHECK_SVN_FROM, m_bSVNFrom);
81 DDX_Check(pDX,IDC_CHECK_USERNAME, m_bSVNUserName);
83 DDX_Text(pDX, IDC_EDIT_SVN_TRUNK, m_strSVNTrunk);
84 DDX_Text(pDX, IDC_EDIT_SVN_TAG, m_strSVNTags);
85 DDX_Text(pDX, IDC_EDIT_SVN_BRANCH, m_strSVNBranchs);
86 DDX_Text(pDX, IDC_EDIT_SVN_FROM, this->m_nSVNFrom);
87 DDX_Text(pDX, IDC_EDIT_USERNAME,m_strUserName);
89 DDX_Check(pDX, IDC_CHECK_DEPTH, m_bDepth);
90 DDX_Check(pDX, IDC_CHECK_BARE, m_bBare);
91 DDX_Check(pDX, IDC_CHECK_RECURSIVE, m_bRecursive);
92 DDX_Text(pDX, IDC_EDIT_DEPTH,m_nDepth);
93 DDX_Check(pDX,IDC_CHECK_BRANCH, m_bBranch);
94 DDX_Text(pDX, IDC_EDIT_BRANCH, m_strBranch);
95 DDX_Check(pDX, IDC_CHECK_ORIGIN, m_bOrigin);
96 DDX_Text(pDX, IDC_EDIT_ORIGIN, m_strOrigin);
97 DDX_Check(pDX,IDC_CHECK_NOCHECKOUT, m_bNoCheckout);
98 DDX_Check(pDX, IDC_CHECK_LFS, m_bUseLFS);
101 BOOL CCloneDlg::OnInitDialog()
103 CHorizontalResizableStandAloneDialog::OnInitDialog();
104 CAppUtils::MarkWindowAsUnpinnable(m_hWnd);
106 AdjustControlSize(IDC_CHECK_DEPTH);
107 AdjustControlSize(IDC_CHECK_RECURSIVE);
108 AdjustControlSize(IDC_CHECK_BARE);
109 AdjustControlSize(IDC_PUTTYKEY_AUTOLOAD);
110 AdjustControlSize(IDC_CHECK_SVN);
111 AdjustControlSize(IDC_CHECK_SVN_TRUNK);
112 AdjustControlSize(IDC_CHECK_SVN_TAG);
113 AdjustControlSize(IDC_CHECK_SVN_BRANCH);
114 AdjustControlSize(IDC_CHECK_SVN_FROM);
115 AdjustControlSize(IDC_CHECK_USERNAME);
116 AdjustControlSize(IDC_CHECK_LFS);
118 AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT);
119 AddAnchor(IDC_CLONE_BROWSE_URL, TOP_RIGHT);
120 AddAnchor(IDC_CLONE_DIR, TOP_LEFT,TOP_RIGHT);
121 AddAnchor(IDC_CLONE_DIR_BROWSE, TOP_RIGHT);
122 AddAnchor(IDOK,BOTTOM_RIGHT);
123 AddAnchor(IDCANCEL,BOTTOM_RIGHT);
125 AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,TOP_RIGHT);
126 AddAnchor(IDC_PUTTYKEYFILE_BROWSE,TOP_RIGHT);
127 AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT);
128 AddAnchor(IDC_PUTTYKEYFILE,TOP_LEFT,TOP_RIGHT);
129 AddAnchor(IDC_CLONE_GROUP_SVN,TOP_LEFT,TOP_RIGHT);
130 AddAnchor(IDHELP, BOTTOM_RIGHT);
132 CString tt;
133 tt.LoadString(IDS_CLONE_DEPTH_TT);
134 m_tooltips.AddTool(IDC_EDIT_DEPTH,tt);
135 m_tooltips.AddTool(IDC_CHECK_DEPTH,tt);
136 m_tooltips.AddTool(IDC_CHECK_RECURSIVE, IDS_CLONE_RECURSIVE_TT);
137 m_tooltips.AddTool(IDC_CHECK_BARE, IDS_CLONE_BARE_REPO_TT);
138 m_tooltips.AddTool(IDC_CHECK_NOCHECKOUT, IDS_CLONE_NO_CHECKOUT_TT);
139 m_tooltips.AddTool(IDC_CHECK_BRANCH, IDS_CLONE_BRANCH_TT);
140 m_tooltips.AddTool(IDC_EDIT_BRANCH, IDS_CLONE_BRANCH_TT);
141 m_tooltips.AddTool(IDC_CHECK_ORIGIN, IDS_CLONE_ORIGIN_NAME_TT);
142 m_tooltips.AddTool(IDC_EDIT_ORIGIN, IDS_CLONE_ORIGIN_NAME_TT);
143 m_tooltips.AddTool(IDC_CHECK_LFS, IDS_PROC_USELFS_TT);
145 this->AddOthersToAnchor();
147 if (m_Directory.IsEmpty())
149 CString dir = m_regCloneDir;
150 int index = dir.ReverseFind('\\');
151 if (index >= 0)
152 dir = dir.Left(index);
153 m_Directory = dir;
155 if (m_Directory.IsEmpty())
157 TCHAR szPath[MAX_PATH] = {0};
158 if (SUCCEEDED(SHGetFolderPath(nullptr, CSIDL_PERSONAL | CSIDL_FLAG_CREATE, nullptr, SHGFP_TYPE_CURRENT, szPath)))
159 m_Directory = szPath;
161 m_bRecursive = m_regCloneRecursive;
162 UpdateData(FALSE);
164 m_URLCombo.SetCaseSensitive(TRUE);
165 m_URLCombo.SetURLHistory(TRUE);
166 m_URLCombo.LoadHistory(L"Software\\TortoiseGit\\History\\repoURLS", L"url");
167 if(m_URL.IsEmpty())
169 CString str = CAppUtils::GetClipboardLink(L"git clone ");
170 str.Trim();
171 if (str.GetLength() > 2 && str[0] == L'"' && str[str.GetLength() - 1] == L'"')
172 str = str.Mid(1, str.GetLength() - 2);
173 if(str.IsEmpty())
174 m_URLCombo.SetCurSel(0);
175 else
176 m_URLCombo.SetWindowText(str);
178 else
179 m_URLCombo.SetWindowText(m_URL);
181 CWnd *window=this->GetDlgItem(IDC_CLONE_DIR);
182 if(window)
183 SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM);
185 this->m_BrowseUrl.AddEntry(CString(MAKEINTRESOURCE(IDS_PROC_CLONE_DIR)));
186 this->m_BrowseUrl.AddEntry(CString(MAKEINTRESOURCE(IDS_REPOBROWSE_OPEN)));
187 m_BrowseUrl.SetCurrentEntry(m_regBrowseUrl);
189 m_PuttyKeyCombo.SetPathHistory(TRUE);
190 m_PuttyKeyCombo.LoadHistory(L"Software\\TortoiseGit\\History\\puttykey", L"key");
191 m_PuttyKeyCombo.SetCurSel(0);
193 this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() );
194 this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);
195 this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);
197 EnableSaveRestore(L"CloneDlg");
199 DialogEnableWindow(IDC_CHECK_LFS, g_Git.ms_LastMsysGitVersion < ConvertVersionToInt(2, 15, 0));
201 OnBnClickedCheckSvn();
202 OnBnClickedCheckDepth();
203 OnBnClickedCheckBranch();
204 OnBnClickedCheckOrigin();
205 SetTheme(CTheme::Instance().IsDarkTheme());
206 return TRUE; // return TRUE unless you set the focus to a control
209 BEGIN_MESSAGE_MAP(CCloneDlg, CHorizontalResizableStandAloneDialog)
210 ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl)
211 ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse)
212 ON_BN_CLICKED(IDC_CHECK_BRANCH, &CCloneDlg::OnBnClickedCheckBranch)
213 ON_BN_CLICKED(IDC_CHECK_ORIGIN, &CCloneDlg::OnBnClickedCheckOrigin)
214 ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse)
215 ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload)
216 ON_CBN_EDITCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnEditchangeUrlcombo)
217 ON_BN_CLICKED(IDC_CHECK_SVN, &CCloneDlg::OnBnClickedCheckSvn)
218 ON_BN_CLICKED(IDC_CHECK_SVN_TRUNK, &CCloneDlg::OnBnClickedCheckSvnTrunk)
219 ON_BN_CLICKED(IDC_CHECK_SVN_TAG, &CCloneDlg::OnBnClickedCheckSvnTag)
220 ON_BN_CLICKED(IDC_CHECK_SVN_BRANCH, &CCloneDlg::OnBnClickedCheckSvnBranch)
221 ON_BN_CLICKED(IDC_CHECK_SVN_FROM, &CCloneDlg::OnBnClickedCheckSvnFrom)
222 ON_BN_CLICKED(IDC_CHECK_DEPTH, &CCloneDlg::OnBnClickedCheckDepth)
223 ON_BN_CLICKED(IDC_CHECK_BARE, &CCloneDlg::OnBnClickedCheckBare)
224 ON_BN_CLICKED(IDC_CHECK_RECURSIVE, &CCloneDlg::OnBnClickedCheckRecursive)
225 ON_BN_CLICKED(IDC_CHECK_NOCHECKOUT, &CCloneDlg::OnBnClickedCheckRecursive)
226 ON_BN_CLICKED(IDC_CHECK_USERNAME, &CCloneDlg::OnBnClickedCheckUsername)
227 END_MESSAGE_MAP()
229 // CCloneDlg message handlers
231 void CCloneDlg::OnOK()
233 m_bSaving = true;
234 this->m_URLCombo.GetWindowTextW(m_URL);
235 m_URL.Trim();
236 UpdateData(TRUE);
237 if(m_URL.IsEmpty() || m_Directory.IsEmpty())
239 CMessageBox::Show(GetSafeHwnd(), IDS_PROC_CLONE_URLDIREMPTY, IDS_APPNAME, MB_OK | MB_ICONEXCLAMATION);
240 m_bSaving = false;
241 return;
244 if (m_bBranch && !g_Git.IsBranchNameValid(m_strBranch))
246 ShowEditBalloon(IDC_EDIT_BRANCH, IDS_B_T_NOTEMPTY, IDS_ERR_ERROR, TTI_ERROR);
247 m_bSaving = false;
248 return;
251 if (m_bOrigin && m_strOrigin.IsEmpty() && !m_bSVN)
253 ShowEditBalloon(IDC_EDIT_ORIGIN, IDS_B_T_NOTEMPTY, IDS_ERR_ERROR, TTI_ERROR);
254 m_bSaving = false;
255 return;
258 m_URLCombo.SaveHistory();
259 m_PuttyKeyCombo.SaveHistory();
260 m_regCloneDir = m_Directory;
261 m_regUseSSHKey = m_bAutoloadPuttyKeyFile;
262 m_regCloneRecursive = m_bRecursive;
264 this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile);
265 CResizableDialog::OnOK();
266 m_bSaving = false;
269 void CCloneDlg::OnCancel()
271 CResizableDialog::OnCancel();
274 void CCloneDlg::OnBnClickedCloneBrowseUrl()
276 CBrowseFolder browseFolder;
277 browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
278 CString strCloneDirectory;
280 int sel = static_cast<int>(this->m_BrowseUrl.GetCurrentEntry());
281 this->m_regBrowseUrl = sel;
283 if( sel == 1 )
285 CString str;
286 m_URLCombo.GetWindowText(str);
287 str.Trim();
288 if (str.IsEmpty())
290 CMessageBox::Show(GetSafeHwnd(), IDS_PROC_CLONE_URLDIREMPTY, IDS_APPNAME, MB_ICONEXCLAMATION);
291 return;
293 if (CAppUtils::ExploreTo(GetSafeHwnd(), str) && reinterpret_cast<INT_PTR>(ShellExecute(nullptr, L"open", str, nullptr, nullptr, SW_SHOW)) <= 32)
294 MessageBox(CFormatMessageWrapper(), L"TortoiseGit", MB_ICONERROR);
295 return;
298 this->m_URLCombo.GetWindowTextW(strCloneDirectory);
299 if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK)
301 this->m_URLCombo.SetWindowTextW(strCloneDirectory);
305 void CCloneDlg::OnBnClickedCloneDirBrowse()
307 UpdateData(TRUE);
308 CBrowseFolder browseFolder;
309 browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
310 CString strCloneDirectory = this->m_Directory;
311 if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK)
313 m_Directory = strCloneDirectory;
314 UpdateData(FALSE);
318 void CCloneDlg::OnBnClickedPuttykeyfileBrowse()
320 UpdateData();
321 CString filename;
322 m_PuttyKeyCombo.GetWindowText(filename);
323 if (!PathFileExists(filename))
324 filename.Empty();
325 if (!CAppUtils::FileOpenSave(filename, nullptr, 0, IDS_PUTTYKEYFILEFILTER, true, GetSafeHwnd()))
326 return;
328 m_PuttyKeyCombo.SetWindowText(filename);
331 void CCloneDlg::OnBnClickedPuttykeyAutoload()
333 this->UpdateData();
334 this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);
335 this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);
338 void CCloneDlg::OnCbnEditchangeUrlcombo()
340 // do not update member variables from UI while saving
341 if (m_bSaving || m_bExactPath)
342 return;
344 this->UpdateData();
345 CString url;
346 m_URLCombo.GetWindowText(url);
347 url.Trim();
349 if(m_OldURL == url )
350 return;
352 m_OldURL=url;
354 //if(url.IsEmpty())
355 // return;
357 CString old;
358 old=m_ModuleName;
360 url.Replace(L'\\', L'/');
362 // add compatibility for Google Code git urls
363 url.TrimRight(L"/");
365 int start = url.ReverseFind(L'/');
366 if(start<0)
368 start = url.ReverseFind(L':');
369 if(start <0)
370 start = url.ReverseFind(L'@');
372 if(start<0)
373 start = 0;
375 CString temp;
376 temp=url.Mid(start+1);
378 temp=temp.MakeLower();
380 // we've to check whether the URL ends with .git (instead of using the first .git)
381 int end = CStringUtils::EndsWith(temp, L".git") ? (temp.GetLength() - 4) : temp.GetLength();
383 //CString modulename;
384 m_ModuleName=url.Mid(start+1,end);
386 start = m_Directory.ReverseFind(L'\\');
387 if(start <0 )
388 start = m_Directory.ReverseFind(L'/');
389 if(start <0 )
390 start =0;
392 int dirstart=m_Directory.Find(old,start);
393 if(dirstart>=0 && (dirstart+old.GetLength() == m_Directory.GetLength()) )
394 m_Directory=m_Directory.Left(dirstart);
396 m_Directory.TrimRight(L"\\/");
397 m_Directory += L'\\';
398 m_Directory += m_ModuleName;
400 // check if URL starts with http://, https:// or git:// in those cases loading putty keys is only
401 // asking for passwords for keys that are never used
402 if (url.Find(L"http://", 0) >= 0 || url.Find(L"https://", 0) >= 0 || url.Find(L"git://", 0) >= 0)
403 m_bAutoloadPuttyKeyFile = false;
404 else
405 m_bAutoloadPuttyKeyFile = m_regUseSSHKey && CAppUtils::IsSSHPutty();
407 this->UpdateData(FALSE);
410 void CCloneDlg::OnBnClickedCheckSvn()
412 this->UpdateData();
414 if(this->m_bSVN)
416 CString str;
417 m_URLCombo.GetWindowText(str);
419 str.TrimRight(L"\\/");
420 if (CStringUtils::EndsWithI(str, L"trunk"))
421 this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = FALSE;
422 else
423 this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = TRUE;
424 m_bDepth = false;
425 m_bBare = false;
426 m_bRecursive = false;
427 m_bBranch = FALSE;
428 m_bNoCheckout = FALSE;
429 m_bUseLFS = FALSE;
430 this->UpdateData(FALSE);
431 OnBnClickedCheckDepth();
433 this->GetDlgItem(IDC_CHECK_DEPTH)->EnableWindow(!m_bSVN);
434 this->GetDlgItem(IDC_CHECK_BARE)->EnableWindow(!m_bSVN);
435 this->GetDlgItem(IDC_CHECK_RECURSIVE)->EnableWindow(!m_bSVN);
436 this->GetDlgItem(IDC_CHECK_BRANCH)->EnableWindow(!m_bSVN);
437 this->GetDlgItem(IDC_EDIT_BRANCH)->EnableWindow(!m_bSVN);
438 this->GetDlgItem(IDC_CHECK_NOCHECKOUT)->EnableWindow(!m_bSVN);
439 this->GetDlgItem(IDC_CHECK_LFS)->EnableWindow(!m_bSVN && g_Git.ms_LastMsysGitVersion < ConvertVersionToInt(2, 15, 0));
440 OnBnClickedCheckSvnTrunk();
441 OnBnClickedCheckSvnTag();
442 OnBnClickedCheckSvnBranch();
443 OnBnClickedCheckSvnFrom();
444 OnBnClickedCheckUsername();
447 void CCloneDlg::OnBnClickedCheckSvnTrunk()
449 UpdateData(TRUE);
450 this->GetDlgItem(IDC_CHECK_SVN_TRUNK)->EnableWindow(this->m_bSVN);
451 this->GetDlgItem(IDC_EDIT_SVN_TRUNK)->EnableWindow(this->m_bSVNTrunk&&this->m_bSVN);
454 void CCloneDlg::OnBnClickedCheckSvnTag()
456 UpdateData(TRUE);
457 this->GetDlgItem(IDC_CHECK_SVN_TAG)->EnableWindow(this->m_bSVN);
458 this->GetDlgItem(IDC_EDIT_SVN_TAG)->EnableWindow(this->m_bSVNTags&&this->m_bSVN);
461 void CCloneDlg::OnBnClickedCheckSvnBranch()
463 UpdateData(TRUE);
464 this->GetDlgItem(IDC_CHECK_SVN_BRANCH)->EnableWindow(this->m_bSVN);
465 this->GetDlgItem(IDC_EDIT_SVN_BRANCH)->EnableWindow(this->m_bSVNBranch&&this->m_bSVN);
468 void CCloneDlg::OnBnClickedCheckSvnFrom()
470 UpdateData(TRUE);
471 this->GetDlgItem(IDC_CHECK_SVN_FROM)->EnableWindow(this->m_bSVN);
472 this->GetDlgItem(IDC_EDIT_SVN_FROM)->EnableWindow(this->m_bSVNFrom&&this->m_bSVN);
475 void CCloneDlg::OnBnClickedCheckRecursive()
477 UpdateData(TRUE);
478 if (m_bRecursive || m_bNoCheckout)
480 m_bBare = FALSE;
481 GetDlgItem(IDC_CHECK_BARE)->EnableWindow(FALSE);
482 UpdateData(FALSE);
484 else
485 GetDlgItem(IDC_CHECK_BARE)->EnableWindow(TRUE);
488 void CCloneDlg::OnBnClickedCheckBare()
490 UpdateData(TRUE);
491 if (m_bBare)
493 m_bRecursive = FALSE;
494 m_bNoCheckout = FALSE;
495 UpdateData(FALSE);
497 GetDlgItem(IDC_CHECK_RECURSIVE)->EnableWindow(!m_bBare);
498 GetDlgItem(IDC_CHECK_NOCHECKOUT)->EnableWindow(!m_bBare);
499 GetDlgItem(IDC_CHECK_ORIGIN)->EnableWindow(!m_bBare);
500 GetDlgItem(IDC_EDIT_ORIGIN)->EnableWindow(!m_bBare);
502 void CCloneDlg::OnBnClickedCheckDepth()
504 UpdateData(TRUE);
505 this->GetDlgItem(IDC_EDIT_DEPTH)->EnableWindow(this->m_bDepth);
508 void CCloneDlg::OnBnClickedCheckBranch()
510 UpdateData(TRUE);
511 this->GetDlgItem(IDC_EDIT_BRANCH)->EnableWindow(this->m_bBranch);
514 void CCloneDlg::OnBnClickedCheckOrigin()
516 UpdateData(TRUE);
517 this->GetDlgItem(IDC_EDIT_ORIGIN)->EnableWindow(this->m_bOrigin);
518 GetDlgItem(IDC_CHECK_BARE)->EnableWindow(!m_bOrigin);
521 void CCloneDlg::OnBnClickedCheckUsername()
523 UpdateData(TRUE);
524 this->GetDlgItem(IDC_CHECK_USERNAME)->EnableWindow(this->m_bSVN);
525 this->GetDlgItem(IDC_EDIT_USERNAME)->EnableWindow(this->m_bSVNUserName && this->m_bSVN);