1 // PushDlg.cpp : implementation file
\r
5 #include "TortoiseProc.h"
\r
9 #include "registry.h"
\r
10 #include "AppUtils.h"
\r
11 #include "BrowseRefsDlg.h"
\r
15 IMPLEMENT_DYNAMIC(CPushDlg, CResizableStandAloneDialog)
\r
17 CPushDlg::CPushDlg(CWnd* pParent /*=NULL*/)
\r
18 : CResizableStandAloneDialog(CPushDlg::IDD, pParent)
\r
20 m_bAutoLoad = CAppUtils::IsSSHPutty();
\r
23 CPushDlg::~CPushDlg()
\r
27 void CPushDlg::DoDataExchange(CDataExchange* pDX)
\r
29 CResizableStandAloneDialog::DoDataExchange(pDX);
\r
30 DDX_Control(pDX, IDC_BRANCH_REMOTE, this->m_BranchRemote);
\r
31 DDX_Control(pDX, IDC_BRANCH_SOURCE, this->m_BranchSource);
\r
32 DDX_Control(pDX, IDC_REMOTE, this->m_Remote);
\r
33 DDX_Control(pDX, IDC_URL, this->m_RemoteURL);
\r
34 DDX_Check(pDX,IDC_FORCE,this->m_bForce);
\r
35 DDX_Check(pDX,IDC_PACK,this->m_bPack);
\r
36 DDX_Check(pDX,IDC_TAGS,this->m_bTags);
\r
37 DDX_Check(pDX,IDC_PUTTYKEY_AUTOLOAD,this->m_bAutoLoad);
\r
42 BEGIN_MESSAGE_MAP(CPushDlg, CResizableStandAloneDialog)
\r
43 ON_BN_CLICKED(IDC_RD_REMOTE, &CPushDlg::OnBnClickedRd)
\r
44 ON_BN_CLICKED(IDC_RD_URL, &CPushDlg::OnBnClickedRd)
\r
45 ON_CBN_SELCHANGE(IDC_BRANCH_SOURCE, &CPushDlg::OnCbnSelchangeBranchSource)
\r
46 ON_BN_CLICKED(IDOK, &CPushDlg::OnBnClickedOk)
\r
47 ON_BN_CLICKED(IDC_REMOTE_MANAGE, &CPushDlg::OnBnClickedRemoteManage)
\r
48 ON_BN_CLICKED(IDC_BUTTON_BROWSE_SOURCE_BRANCH, &CPushDlg::OnBnClickedButtonBrowseSourceBranch)
\r
49 ON_BN_CLICKED(IDC_BUTTON_BROWSE_DEST_BRANCH, &CPushDlg::OnBnClickedButtonBrowseDestBranch)
\r
52 BOOL CPushDlg::OnInitDialog()
\r
54 CResizableStandAloneDialog::OnInitDialog();
\r
56 AddAnchor(IDOK,BOTTOM_RIGHT);
\r
57 AddAnchor(IDCANCEL,BOTTOM_RIGHT);
\r
58 AddAnchor(IDC_BRANCH_GROUP, TOP_LEFT,TOP_RIGHT);
\r
59 AddAnchor(IDC_STATIC_REMOTE, TOP_RIGHT);
\r
60 AddAnchor(IDC_STATIC_SOURCE, TOP_LEFT);
\r
62 AddAnchor(IDC_BRANCH_REMOTE, TOP_RIGHT);
\r
63 AddAnchor(IDC_BUTTON_BROWSE_DEST_BRANCH, TOP_RIGHT);
\r
64 AddAnchor(IDC_BRANCH_SOURCE, TOP_LEFT);
\r
65 AddAnchor(IDC_BUTTON_BROWSE_SOURCE_BRANCH, TOP_LEFT);
\r
67 AddAnchor(IDC_URL_GROUP, TOP_LEFT,TOP_RIGHT);
\r
68 AddAnchor(IDC_RD_REMOTE, TOP_LEFT);
\r
69 AddAnchor(IDC_RD_URL, TOP_LEFT);
\r
71 AddAnchor(IDC_REMOTE, TOP_LEFT, TOP_RIGHT);
\r
73 AddAnchor(IDC_URL, TOP_LEFT,TOP_RIGHT);
\r
75 AddAnchor(IDC_OPTION_GROUP, TOP_LEFT,TOP_RIGHT);
\r
77 AddAnchor(IDC_FORCE, TOP_LEFT);
\r
78 AddAnchor(IDC_PACK, TOP_LEFT);
\r
79 AddAnchor(IDC_TAGS, TOP_LEFT);
\r
80 AddAnchor(IDC_PUTTYKEY_AUTOLOAD,TOP_LEFT);
\r
82 AddAnchor(IDC_REMOTE_MANAGE,TOP_RIGHT);
\r
83 AddAnchor(IDHELP, BOTTOM_RIGHT);
\r
85 AddOthersToAnchor();
\r
87 this->GetDlgItem(IDC_PUTTYKEY_AUTOLOAD)->EnableWindow(m_bAutoLoad);
\r
89 EnableSaveRestore(_T("PushDlg"));
\r
91 m_RemoteURL.SetURLHistory(TRUE);
\r
93 CString WorkingDir=g_Git.m_CurrentDir;
\r
94 WorkingDir.Replace(_T(':'),_T('_'));
\r
95 m_RemoteURL.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\PushURLS\\"))+WorkingDir, _T("url"));
\r
96 CString clippath=CAppUtils::GetClipboardLink();
\r
97 if(clippath.IsEmpty())
\r
98 m_RemoteURL.SetCurSel(0);
\r
100 m_RemoteURL.SetWindowText(clippath);
\r
102 m_RemoteURL.EnableWindow(FALSE);
\r
103 CheckRadioButton(IDC_RD_REMOTE,IDC_RD_URL,IDC_RD_REMOTE);
\r
105 STRING_VECTOR list;
\r
106 CRegString remote(CString(_T("Software\\TortoiseGit\\History\\PushRemote\\")+WorkingDir));
\r
107 m_RemoteReg = remote;
\r
110 if(!g_Git.GetRemoteList(list))
\r
112 for(unsigned int i=0;i<list.size();i++)
\r
114 m_Remote.AddString(list[i]);
\r
115 if(list[i] == remote)
\r
119 m_Remote.SetCurSel(sel);
\r
123 if(!g_Git.GetBranchList(list,¤t))
\r
125 for(unsigned int i=0;i<list.size();i++)
\r
126 m_BranchSource.AddString(list[i]);
\r
128 m_BranchSource.SetCurSel(current);
\r
130 m_BranchRemote.LoadHistory(CString(_T("Software\\TortoiseGit\\History\\RemoteBranch\\"))+WorkingDir, _T("branch"));
\r
131 m_BranchRemote.SetCurSel(0);
\r
133 //m_BranchRemote.SetWindowTextW(m_BranchSource.GetString());
\r
139 // CPushDlg message handlers
\r
141 void CPushDlg::OnBnClickedRd()
\r
143 // TODO: Add your control notification handler code here
\r
144 // TODO: Add your control notification handler code here
\r
145 if( GetCheckedRadioButton(IDC_RD_REMOTE,IDC_RD_URL) == IDC_RD_REMOTE)
\r
147 m_Remote.EnableWindow(TRUE);
\r
148 m_RemoteURL.EnableWindow(FALSE);;
\r
150 if( GetCheckedRadioButton(IDC_RD_REMOTE,IDC_RD_URL) == IDC_RD_URL)
\r
152 m_Remote.EnableWindow(FALSE);
\r
153 m_RemoteURL.EnableWindow(TRUE);
\r
158 void CPushDlg::OnCbnSelchangeBranchSource()
\r
160 // TODO: Add your control notification handler code here
\r
161 m_BranchRemote.AddString(m_BranchSource.GetString());
\r
164 void CPushDlg::OnBnClickedOk()
\r
166 // TODO: Add your control notification handler code here
\r
167 CResizableStandAloneDialog::UpdateData(TRUE);
\r
169 if( GetCheckedRadioButton(IDC_RD_REMOTE,IDC_RD_URL) == IDC_RD_REMOTE)
\r
171 m_URL=m_Remote.GetString();
\r
173 if( GetCheckedRadioButton(IDC_RD_REMOTE,IDC_RD_URL) == IDC_RD_URL)
\r
175 m_URL=m_RemoteURL.GetString();
\r
178 this->m_BranchRemoteName=m_BranchRemote.GetString();
\r
179 this->m_BranchSourceName=m_BranchSource.GetString();
\r
181 this->m_RemoteURL.SaveHistory();
\r
182 this->m_BranchRemote.SaveHistory();
\r
184 m_RemoteReg = m_Remote.GetString();
\r
186 CResizableStandAloneDialog::OnOK();
\r
189 void CPushDlg::OnBnClickedRemoteManage()
\r
191 // TODO: Add your control notification handler code here
\r
192 CAppUtils::LaunchRemoteSetting();
\r
195 void CPushDlg::OnBnClickedButtonBrowseSourceBranch()
\r
197 if(CBrowseRefsDlg::PickRefForCombo(&m_BranchSource, gPickRef_Head))
\r
198 OnCbnSelchangeBranchSource();
\r
201 void CPushDlg::OnBnClickedButtonBrowseDestBranch()
\r
203 CString remoteBranchName;
\r
204 CString remoteName;
\r
205 m_BranchRemote.GetWindowText(remoteBranchName);
\r
206 remoteName = m_Remote.GetString();
\r
207 remoteBranchName = remoteName + '/' + remoteBranchName;
\r
208 remoteBranchName = CBrowseRefsDlg::PickRef(false, remoteBranchName, gPickRef_Remote);
\r
209 if(remoteBranchName.IsEmpty())
\r
211 remoteBranchName = remoteBranchName.Mid(13);//Strip 'refs/remotes/'
\r
212 int slashPlace = remoteBranchName.Find('/');
\r
213 remoteName = remoteBranchName.Left(slashPlace);
\r
214 remoteBranchName = remoteBranchName.Mid(slashPlace + 1); //Strip remote name (for example 'origin/')
\r
217 int remoteSel = m_Remote.FindStringExact(0,remoteName);
\r
219 m_Remote.SetCurSel(remoteSel);
\r
222 m_BranchRemote.AddString(remoteBranchName);
\r