#include "stdafx.h"\r
#include "TortoiseProc.h"\r
#include "CloneDlg.h"\r
-\r
-\r
+#include "BrowseFolder.h"\r
+#include "MessageBox.h"\r
+#include "AppUtils.h"\r
// CCloneDlg dialog\r
\r
-IMPLEMENT_DYNCREATE(CCloneDlg, CDHtmlDialog)\r
+IMPLEMENT_DYNCREATE(CCloneDlg, CResizableStandAloneDialog)\r
\r
CCloneDlg::CCloneDlg(CWnd* pParent /*=NULL*/)\r
- : CDHtmlDialog(CCloneDlg::IDD, CCloneDlg::IDH, pParent)\r
+ : CResizableStandAloneDialog(CCloneDlg::IDD, pParent)\r
+ , m_Directory(_T(""))\r
{\r
+ m_bAutoloadPuttyKeyFile = CAppUtils::IsSSHPutty();\r
+\r
+ m_bSVN = FALSE;\r
+ m_bSVNTrunk = FALSE;\r
+ m_bSVNTags = FALSE;\r
+ m_bSVNBranch = FALSE;;\r
+ m_strSVNTrunk = _T("trunk");\r
+ m_strSVNTags = _T("tags");\r
+ m_strSVNBranchs = _T("branches");\r
\r
+ m_nSVNFrom = 0;\r
}\r
\r
CCloneDlg::~CCloneDlg()\r
\r
void CCloneDlg::DoDataExchange(CDataExchange* pDX)\r
{\r
- CDHtmlDialog::DoDataExchange(pDX);\r
+ CResizableStandAloneDialog::DoDataExchange(pDX);\r
+ DDX_Control(pDX, IDC_URLCOMBO, m_URLCombo);\r
+ DDX_Control(pDX, IDC_PUTTYKEYFILE, m_PuttyKeyCombo);\r
+ DDX_Text(pDX, IDC_CLONE_DIR, m_Directory);\r
+ DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD, m_bAutoloadPuttyKeyFile);\r
+\r
+ DDX_Check(pDX,IDC_CHECK_SVN, m_bSVN);\r
+ DDX_Check(pDX,IDC_CHECK_SVN_TRUNK, m_bSVNTrunk);\r
+ DDX_Check(pDX,IDC_CHECK_SVN_TAG, m_bSVNTags);\r
+ DDX_Check(pDX,IDC_CHECK_SVN_BRANCH, m_bSVNBranch);\r
+ DDX_Check(pDX,IDC_CHECK_SVN_FROM, m_bSVNFrom);\r
+\r
+ DDX_Text(pDX, IDC_EDIT_SVN_TRUNK, m_strSVNTrunk);\r
+ DDX_Text(pDX, IDC_EDIT_SVN_TAG, m_strSVNTags);\r
+ DDX_Text(pDX, IDC_EDIT_SVN_BRANCH, m_strSVNBranchs);\r
+ DDX_Text(pDX, IDC_EDIT_SVN_FROM, this->m_nSVNFrom);\r
+\r
}\r
\r
BOOL CCloneDlg::OnInitDialog()\r
{\r
- CDHtmlDialog::OnInitDialog();\r
+ CResizableStandAloneDialog::OnInitDialog();\r
+ AddAnchor(IDC_URLCOMBO, TOP_LEFT, TOP_RIGHT);\r
+ AddAnchor(IDC_CLONE_BROWSE_URL, TOP_RIGHT);\r
+ AddAnchor(IDC_CLONE_DIR, TOP_LEFT,TOP_RIGHT);\r
+ AddAnchor(IDC_CLONE_DIR_BROWSE, TOP_RIGHT);\r
+ AddAnchor(IDOK,BOTTOM_RIGHT);\r
+ AddAnchor(IDCANCEL,BOTTOM_RIGHT);\r
+\r
+ AddAnchor(IDC_GROUP_CLONE,TOP_LEFT,TOP_RIGHT);\r
+ AddAnchor(IDC_PUTTYKEYFILE_BROWSE,TOP_RIGHT);\r
+ AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT);\r
+ AddAnchor(IDC_PUTTYKEYFILE,TOP_LEFT,TOP_RIGHT);\r
+ AddAnchor(IDC_CLONE_GROUP_SVN,TOP_LEFT,TOP_RIGHT);\r
+ AddAnchor(IDHELP, BOTTOM_RIGHT);\r
+\r
+ this->AddOthersToAnchor();\r
+\r
+ m_URLCombo.SetURLHistory(TRUE);\r
+ m_URLCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\repoURLS"), _T("url"));\r
+ if(m_URL.IsEmpty())\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
+ CWnd *window=this->GetDlgItem(IDC_CLONE_DIR);\r
+ if(window)\r
+ SHAutoComplete(window->m_hWnd, SHACF_FILESYSTEM);\r
+\r
+ m_PuttyKeyCombo.SetPathHistory(TRUE);\r
+ m_PuttyKeyCombo.LoadHistory(_T("Software\\TortoiseGit\\History\\puttykey"), _T("key"));\r
+ m_PuttyKeyCombo.SetCurSel(0);\r
+\r
+ this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow( CAppUtils::IsSSHPutty() );\r
+ this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+ this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+ \r
+ EnableSaveRestore(_T("CloneDlg"));\r
+ \r
+ OnBnClickedCheckSvn();\r
+\r
return TRUE; // return TRUE unless you set the focus to a control\r
}\r
\r
-BEGIN_MESSAGE_MAP(CCloneDlg, CDHtmlDialog)\r
+BEGIN_MESSAGE_MAP(CCloneDlg, CResizableStandAloneDialog)\r
ON_BN_CLICKED(IDC_CLONE_BROWSE_URL, &CCloneDlg::OnBnClickedCloneBrowseUrl)\r
ON_BN_CLICKED(IDC_CLONE_DIR_BROWSE, &CCloneDlg::OnBnClickedCloneDirBrowse)\r
+ ON_BN_CLICKED(IDC_PUTTYKEYFILE_BROWSE, &CCloneDlg::OnBnClickedPuttykeyfileBrowse)\r
+ ON_BN_CLICKED(IDC_PUTTYKEY_AUTOLOAD, &CCloneDlg::OnBnClickedPuttykeyAutoload)\r
+ ON_CBN_SELCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnSelchangeUrlcombo)\r
+ ON_NOTIFY(CBEN_BEGINEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenBegineditUrlcombo)\r
+ ON_NOTIFY(CBEN_ENDEDIT, IDC_URLCOMBO, &CCloneDlg::OnCbenEndeditUrlcombo)\r
+ ON_CBN_EDITCHANGE(IDC_URLCOMBO, &CCloneDlg::OnCbnEditchangeUrlcombo)\r
+ ON_BN_CLICKED(IDC_CHECK_SVN, &CCloneDlg::OnBnClickedCheckSvn)\r
+ ON_BN_CLICKED(IDC_CHECK_SVN_TRUNK, &CCloneDlg::OnBnClickedCheckSvnTrunk)\r
+ ON_BN_CLICKED(IDC_CHECK_SVN_TAG, &CCloneDlg::OnBnClickedCheckSvnTag)\r
+ ON_BN_CLICKED(IDC_CHECK_SVN_BRANCH, &CCloneDlg::OnBnClickedCheckSvnBranch)\r
+ ON_BN_CLICKED(IDC_CHECK_SVN_FROM, &CCloneDlg::OnBnClickedCheckSvnFrom)\r
END_MESSAGE_MAP()\r
\r
-BEGIN_DHTML_EVENT_MAP(CCloneDlg)\r
- DHTML_EVENT_ONCLICK(_T("ButtonOK"), OnButtonOK)\r
- DHTML_EVENT_ONCLICK(_T("ButtonCancel"), OnButtonCancel)\r
-END_DHTML_EVENT_MAP()\r
-\r
\r
\r
// CCloneDlg message handlers\r
\r
-HRESULT CCloneDlg::OnButtonOK(IHTMLElement* /*pElement*/)\r
+void CCloneDlg::OnOK()\r
{\r
- OnOK();\r
- return S_OK;\r
+ this->m_URLCombo.GetWindowTextW(m_URL);\r
+ m_URL.Trim();\r
+ UpdateData(TRUE);\r
+ if(m_URL.IsEmpty() || m_Directory.IsEmpty())\r
+ {\r
+ CMessageBox::Show(NULL, _T("URL or Directory can't be empty"), _T("TortoiseGit"), MB_OK);\r
+ return;\r
+ }\r
+\r
+ m_URLCombo.SaveHistory();\r
+ m_PuttyKeyCombo.SaveHistory();\r
+\r
+ this->m_PuttyKeyCombo.GetWindowText(m_strPuttyKeyFile);\r
+ CResizableDialog::OnOK();\r
+\r
}\r
\r
-HRESULT CCloneDlg::OnButtonCancel(IHTMLElement* /*pElement*/)\r
+void CCloneDlg::OnCancel()\r
{\r
- OnCancel();\r
- return S_OK;\r
+ CResizableDialog::OnCancel();\r
}\r
\r
void CCloneDlg::OnBnClickedCloneBrowseUrl()\r
{\r
// TODO: Add your control notification handler code here\r
+ CBrowseFolder browseFolder;\r
+ browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
+ CString strCloneDirectory;\r
+ this->m_URLCombo.GetWindowTextW(strCloneDirectory);\r
+ if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK) \r
+ {\r
+ this->m_URLCombo.SetWindowTextW(strCloneDirectory);\r
+ }\r
}\r
\r
void CCloneDlg::OnBnClickedCloneDirBrowse()\r
{\r
// TODO: Add your control notification handler code here\r
+ CBrowseFolder browseFolder;\r
+ browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;\r
+ CString strCloneDirectory = this->m_Directory;\r
+ if (browseFolder.Show(GetSafeHwnd(), strCloneDirectory) == CBrowseFolder::OK) \r
+ {\r
+ UpdateData(TRUE);\r
+ m_Directory = strCloneDirectory;\r
+ UpdateData(FALSE);\r
+ }\r
+}\r
+\r
+void CCloneDlg::OnEnChangeCloneDir()\r
+{\r
+ // TODO: If this is a RICHEDIT control, the control will not\r
+ // send this notification unless you override the CDHtmlDialog::OnInitDialog()\r
+ // function and call CRichEditCtrl().SetEventMask()\r
+ // with the ENM_CHANGE flag ORed into the mask.\r
+\r
+ // TODO: Add your control notification handler code here\r
+}\r
+\r
+void CCloneDlg::OnBnClickedPuttykeyfileBrowse()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ CFileDialog dlg(TRUE,NULL,\r
+ NULL,\r
+ OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,\r
+ _T("Putty Private Key(*.ppk)|*.ppk|All Files(*.*)|*.*||"));\r
+ \r
+ this->UpdateData();\r
+ if(dlg.DoModal()==IDOK)\r
+ {\r
+ this->m_PuttyKeyCombo.SetWindowText( dlg.GetPathName() );\r
+ }\r
+\r
+}\r
+\r
+void CCloneDlg::OnBnClickedPuttykeyAutoload()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ this->UpdateData();\r
+ this->GetDlgItem(IDC_PUTTYKEYFILE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+ this->GetDlgItem(IDC_PUTTYKEYFILE_BROWSE)->EnableWindow(m_bAutoloadPuttyKeyFile);\r
+\r
+}\r
+\r
+void CCloneDlg::OnCbnSelchangeUrlcombo()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+}\r
+\r
+void CCloneDlg::OnCbenBegineditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ *pResult = 0;\r
+}\r
+\r
+void CCloneDlg::OnCbenEndeditUrlcombo(NMHDR *pNMHDR, LRESULT *pResult)\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ *pResult = 0;\r
+}\r
+\r
+void CCloneDlg::OnCbnEditchangeUrlcombo()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ this->UpdateData();\r
+ CString url;\r
+ m_URLCombo.GetWindowText(url);\r
+\r
+ if(m_OldURL == url )\r
+ return;\r
+\r
+ m_OldURL=url;\r
+\r
+ //if(url.IsEmpty())\r
+ // return;\r
+\r
+ CString old;\r
+ old=m_ModuleName;\r
+\r
+ url.Replace(_T('\\'),_T('/'));\r
+ int start=url.ReverseFind(_T('/'));\r
+ if(start<0)\r
+ {\r
+ start = url.ReverseFind(_T(':'));\r
+ if(start <0)\r
+ start = url.ReverseFind(_T('@'));\r
+\r
+ if(start<0)\r
+ start = 0;\r
+ }\r
+ CString temp;\r
+ temp=url.Mid(start+1);\r
+ \r
+ temp=temp.MakeLower();\r
+\r
+ int end;\r
+ end=temp.Find(_T(".git"));\r
+ if(end<0)\r
+ end=temp.GetLength();\r
+\r
+ //CString modulename;\r
+ m_ModuleName=url.Mid(start+1,end);\r
+ \r
+ start = m_Directory.ReverseFind(_T('\\'));\r
+ if(start <0 )\r
+ start = m_Directory.ReverseFind(_T('/'));\r
+ if(start <0 )\r
+ start =0;\r
+\r
+ int dirstart=m_Directory.Find(old,start);\r
+ if(dirstart>=0 && (dirstart+old.GetLength() == m_Directory.GetLength()) )\r
+ {\r
+ m_Directory=m_Directory.Left(dirstart);\r
+ m_Directory+=m_ModuleName;\r
+\r
+ }else\r
+ {\r
+ if(m_Directory.GetLength()>0 && \r
+ (m_Directory[m_Directory.GetLength()-1] != _T('\\') ||\r
+ m_Directory[m_Directory.GetLength()-1] != _T('/') ) )\r
+ {\r
+ m_Directory+=_T('\\');\r
+ }\r
+ m_Directory += m_ModuleName;\r
+ }\r
+\r
+ if(m_Directory.GetLength()>0)\r
+ {\r
+ if( m_Directory[m_Directory.GetLength()-1] == _T('\\') ||\r
+ m_Directory[m_Directory.GetLength()-1] == _T('/')\r
+ )\r
+ {\r
+ m_Directory=m_Directory.Left(m_Directory.GetLength()-1);\r
+ }\r
+\r
+ }\r
+ this->UpdateData(FALSE);\r
+}\r
+\r
+void CCloneDlg::OnBnClickedCheckSvn()\r
+{\r
+ this->UpdateData();\r
+\r
+ if(this->m_bSVN)\r
+ {\r
+ CString str;\r
+ m_URLCombo.GetWindowText(str);\r
+\r
+ while(str.GetLength()>=1 && \r
+ str[str.GetLength()-1] == _T('\\') &&\r
+ str[str.GetLength()-1] == _T('/'))\r
+ {\r
+ str=str.Left(str.GetLength()-1);\r
+ }\r
+ if(str.GetLength()>=5 && (str.Right(5).MakeLower() == _T("trunk") ))\r
+ {\r
+ this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = FALSE;\r
+ this->UpdateData(FALSE);\r
+ }else\r
+ {\r
+ this->m_bSVNBranch=this->m_bSVNTags=this->m_bSVNTrunk = TRUE;\r
+ this->UpdateData(FALSE);\r
+ }\r
+\r
+ }\r
+\r
+ // TODO: Add your control notification handler code here\r
+ OnBnClickedCheckSvnTrunk();\r
+ OnBnClickedCheckSvnTag();\r
+ OnBnClickedCheckSvnBranch();\r
+ OnBnClickedCheckSvnFrom();\r
+}\r
+\r
+void CCloneDlg::OnBnClickedCheckSvnTrunk()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData(TRUE);\r
+ this->GetDlgItem(IDC_CHECK_SVN_TRUNK)->EnableWindow(this->m_bSVN);\r
+ this->GetDlgItem(IDC_EDIT_SVN_TRUNK)->EnableWindow(this->m_bSVNTrunk&&this->m_bSVN);\r
+}\r
+\r
+void CCloneDlg::OnBnClickedCheckSvnTag()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData(TRUE);\r
+ this->GetDlgItem(IDC_CHECK_SVN_TAG)->EnableWindow(this->m_bSVN);\r
+ this->GetDlgItem(IDC_EDIT_SVN_TAG)->EnableWindow(this->m_bSVNTags&&this->m_bSVN);\r
+}\r
+\r
+void CCloneDlg::OnBnClickedCheckSvnBranch()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData(TRUE);\r
+ this->GetDlgItem(IDC_CHECK_SVN_BRANCH)->EnableWindow(this->m_bSVN);\r
+ this->GetDlgItem(IDC_EDIT_SVN_BRANCH)->EnableWindow(this->m_bSVNBranch&&this->m_bSVN);\r
+}\r
+\r
+void CCloneDlg::OnBnClickedCheckSvnFrom()\r
+{\r
+ // TODO: Add your control notification handler code here\r
+ UpdateData(TRUE);\r
+ this->GetDlgItem(IDC_CHECK_SVN_FROM)->EnableWindow(this->m_bSVN);\r
+ this->GetDlgItem(IDC_EDIT_SVN_FROM)->EnableWindow(this->m_bSVNFrom&&this->m_bSVN);\r
}\r