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
23 #include "TortoiseProc.h"
26 #include "BrowseFolder.h"
27 #include "MessageBox.h"
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
)
47 , m_strSVNTrunk(L
"trunk")
48 , m_strSVNTags(L
"tags")
49 , m_strSVNBranchs(L
"branches")
51 , m_bDepth(BST_UNCHECKED
)
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
);
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('\\');
152 dir
= dir
.Left(index
);
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
;
164 m_URLCombo
.SetCaseSensitive(TRUE
);
165 m_URLCombo
.SetURLHistory(TRUE
);
166 m_URLCombo
.LoadHistory(L
"Software\\TortoiseGit\\History\\repoURLS", L
"url");
169 CString str
= CAppUtils::GetClipboardLink(L
"git clone ");
171 if (str
.GetLength() > 2 && str
[0] == L
'"' && str
[str
.GetLength() - 1] == L
'"')
172 str
= str
.Mid(1, str
.GetLength() - 2);
174 m_URLCombo
.SetCurSel(0);
176 m_URLCombo
.SetWindowText(str
);
179 m_URLCombo
.SetWindowText(m_URL
);
181 CWnd
*window
=this->GetDlgItem(IDC_CLONE_DIR
);
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
)
229 // CCloneDlg message handlers
231 void CCloneDlg::OnOK()
234 this->m_URLCombo
.GetWindowTextW(m_URL
);
237 if(m_URL
.IsEmpty() || m_Directory
.IsEmpty())
239 CMessageBox::Show(GetSafeHwnd(), IDS_PROC_CLONE_URLDIREMPTY
, IDS_APPNAME
, MB_OK
| MB_ICONEXCLAMATION
);
244 if (m_bBranch
&& !g_Git
.IsBranchNameValid(m_strBranch
))
246 ShowEditBalloon(IDC_EDIT_BRANCH
, IDS_B_T_NOTEMPTY
, IDS_ERR_ERROR
, TTI_ERROR
);
251 if (m_bOrigin
&& m_strOrigin
.IsEmpty() && !m_bSVN
)
253 ShowEditBalloon(IDC_EDIT_ORIGIN
, IDS_B_T_NOTEMPTY
, IDS_ERR_ERROR
, TTI_ERROR
);
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();
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
;
286 m_URLCombo
.GetWindowText(str
);
290 CMessageBox::Show(GetSafeHwnd(), IDS_PROC_CLONE_URLDIREMPTY
, IDS_APPNAME
, MB_ICONEXCLAMATION
);
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
);
298 this->m_URLCombo
.GetWindowTextW(strCloneDirectory
);
299 if (browseFolder
.Show(GetSafeHwnd(), strCloneDirectory
) == CBrowseFolder::OK
)
301 this->m_URLCombo
.SetWindowTextW(strCloneDirectory
);
305 void CCloneDlg::OnBnClickedCloneDirBrowse()
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
;
318 void CCloneDlg::OnBnClickedPuttykeyfileBrowse()
322 m_PuttyKeyCombo
.GetWindowText(filename
);
323 if (!PathFileExists(filename
))
325 if (!CAppUtils::FileOpenSave(filename
, nullptr, 0, IDS_PUTTYKEYFILEFILTER
, true, GetSafeHwnd()))
328 m_PuttyKeyCombo
.SetWindowText(filename
);
331 void CCloneDlg::OnBnClickedPuttykeyAutoload()
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
)
346 m_URLCombo
.GetWindowText(url
);
360 url
.Replace(L
'\\', L
'/');
362 // add compatibility for Google Code git urls
365 int start
= url
.ReverseFind(L
'/');
368 start
= url
.ReverseFind(L
':');
370 start
= url
.ReverseFind(L
'@');
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
'\\');
388 start
= m_Directory
.ReverseFind(L
'/');
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;
405 m_bAutoloadPuttyKeyFile
= m_regUseSSHKey
&& CAppUtils::IsSSHPutty();
407 this->UpdateData(FALSE
);
410 void CCloneDlg::OnBnClickedCheckSvn()
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
;
423 this->m_bSVNBranch
=this->m_bSVNTags
=this->m_bSVNTrunk
= TRUE
;
426 m_bRecursive
= false;
428 m_bNoCheckout
= 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()
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()
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()
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()
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()
478 if (m_bRecursive
|| m_bNoCheckout
)
481 GetDlgItem(IDC_CHECK_BARE
)->EnableWindow(FALSE
);
485 GetDlgItem(IDC_CHECK_BARE
)->EnableWindow(TRUE
);
488 void CCloneDlg::OnBnClickedCheckBare()
493 m_bRecursive
= FALSE
;
494 m_bNoCheckout
= 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()
505 this->GetDlgItem(IDC_EDIT_DEPTH
)->EnableWindow(this->m_bDepth
);
508 void CCloneDlg::OnBnClickedCheckBranch()
511 this->GetDlgItem(IDC_EDIT_BRANCH
)->EnableWindow(this->m_bBranch
);
514 void CCloneDlg::OnBnClickedCheckOrigin()
517 this->GetDlgItem(IDC_EDIT_ORIGIN
)->EnableWindow(this->m_bOrigin
);
518 GetDlgItem(IDC_CHECK_BARE
)->EnableWindow(!m_bOrigin
);
521 void CCloneDlg::OnBnClickedCheckUsername()
524 this->GetDlgItem(IDC_CHECK_USERNAME
)->EnableWindow(this->m_bSVN
);
525 this->GetDlgItem(IDC_EDIT_USERNAME
)->EnableWindow(this->m_bSVNUserName
&& this->m_bSVN
);