1 // TortoiseSVN - a Windows shell extension for easy version control
\r
3 // Copyright (C) 2003-2007 - TortoiseSVN
\r
5 // This program is free software; you can redistribute it and/or
\r
6 // modify it under the terms of the GNU General Public License
\r
7 // as published by the Free Software Foundation; either version 2
\r
8 // of the License, or (at your option) any later version.
\r
10 // This program is distributed in the hope that it will be useful,
\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
\r
13 // GNU General Public License for more details.
\r
15 // You should have received a copy of the GNU General Public License
\r
16 // along with this program; if not, write to the Free Software Foundation,
\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
\r
20 #include "TortoiseProc.h"
\r
21 #include "SetProxyPage.h"
\r
22 #include "AppUtils.h"
\r
23 #include "StringUtils.h"
\r
25 #include ".\setproxypage.h"
\r
26 #include "MessageBox.h"
\r
28 IMPLEMENT_DYNAMIC(CSetProxyPage, ISettingsPropPage)
\r
29 CSetProxyPage::CSetProxyPage()
\r
30 : ISettingsPropPage(CSetProxyPage::IDD)
\r
31 , m_serveraddress(_T(""))
\r
33 , m_username(_T(""))
\r
34 , m_password(_T(""))
\r
36 , m_isEnabled(FALSE)
\r
37 , m_SSHClient(_T(""))
\r
38 , m_Exceptions(_T(""))
\r
40 m_regServeraddress = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-host"), _T(""));
\r
41 m_regServerport = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-port"), _T(""));
\r
42 m_regUsername = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-username"), _T(""));
\r
43 m_regPassword = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-password"), _T(""));
\r
44 m_regTimeout = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-timeout"), _T(""));
\r
45 m_regSSHClient = CRegString(_T("Software\\TortoiseSVN\\SSH"));
\r
46 m_SSHClient = m_regSSHClient;
\r
47 m_regExceptions = CRegString(_T("Software\\Tigris.org\\Subversion\\Servers\\global\\http-proxy-exceptions"), _T(""));
\r
49 m_regServeraddress_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-host"), _T(""));
\r
50 m_regServerport_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-port"), _T(""));
\r
51 m_regUsername_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-username"), _T(""));
\r
52 m_regPassword_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-password"), _T(""));
\r
53 m_regTimeout_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-timeout"), _T(""));
\r
54 m_regExceptions_copy = CRegString(_T("Software\\TortoiseSVN\\Servers\\global\\http-proxy-exceptions"), _T(""));
\r
57 CSetProxyPage::~CSetProxyPage()
\r
61 void CSetProxyPage::DoDataExchange(CDataExchange* pDX)
\r
63 ISettingsPropPage::DoDataExchange(pDX);
\r
64 DDX_Text(pDX, IDC_SERVERADDRESS, m_serveraddress);
\r
65 DDX_Text(pDX, IDC_SERVERPORT, m_serverport);
\r
66 DDX_Text(pDX, IDC_USERNAME, m_username);
\r
67 DDX_Text(pDX, IDC_PASSWORD, m_password);
\r
68 DDX_Text(pDX, IDC_TIMEOUT, m_timeout);
\r
69 DDX_Text(pDX, IDC_EXCEPTIONS, m_Exceptions);
\r
70 DDX_Check(pDX, IDC_ENABLE, m_isEnabled);
\r
71 DDX_Text(pDX, IDC_SSHCLIENT, m_SSHClient);
\r
72 DDX_Control(pDX, IDC_SSHCLIENT, m_cSSHClientEdit);
\r
76 BEGIN_MESSAGE_MAP(CSetProxyPage, ISettingsPropPage)
\r
77 ON_EN_CHANGE(IDC_SERVERADDRESS, OnChange)
\r
78 ON_EN_CHANGE(IDC_SERVERPORT, OnChange)
\r
79 ON_EN_CHANGE(IDC_USERNAME, OnChange)
\r
80 ON_EN_CHANGE(IDC_PASSWORD, OnChange)
\r
81 ON_EN_CHANGE(IDC_TIMEOUT, OnChange)
\r
82 ON_EN_CHANGE(IDC_SSHCLIENT, OnChange)
\r
83 ON_EN_CHANGE(IDC_EXCEPTIONS, OnChange)
\r
84 ON_BN_CLICKED(IDC_ENABLE, OnBnClickedEnable)
\r
85 ON_BN_CLICKED(IDC_SSHBROWSE, OnBnClickedSshbrowse)
\r
86 ON_BN_CLICKED(IDC_EDITSERVERS, OnBnClickedEditservers)
\r
91 BOOL CSetProxyPage::OnInitDialog()
\r
93 ISettingsPropPage::OnInitDialog();
\r
95 m_tooltips.Create(this);
\r
96 m_tooltips.AddTool(IDC_SERVERADDRESS, IDS_SETTINGS_PROXYSERVER_TT);
\r
97 m_tooltips.AddTool(IDC_EXCEPTIONS, IDS_SETTINGS_PROXYEXCEPTIONS_TT);
\r
99 m_SSHClient = m_regSSHClient;
\r
100 m_serveraddress = m_regServeraddress;
\r
101 m_serverport = _ttoi((LPCTSTR)(CString)m_regServerport);
\r
102 m_username = m_regUsername;
\r
103 m_password = m_regPassword;
\r
104 m_Exceptions = m_regExceptions;
\r
105 m_timeout = _ttoi((LPCTSTR)(CString)m_regTimeout);
\r
107 if (m_serveraddress.IsEmpty())
\r
109 m_isEnabled = FALSE;
\r
110 EnableGroup(FALSE);
\r
111 // now since we already created our registry entries
\r
112 // we delete them here again...
\r
113 m_regServeraddress.removeValue();
\r
114 m_regServerport.removeValue();
\r
115 m_regUsername.removeValue();
\r
116 m_regPassword.removeValue();
\r
117 m_regTimeout.removeValue();
\r
118 m_regExceptions.removeValue();
\r
122 m_isEnabled = TRUE;
\r
125 if (m_serveraddress.IsEmpty())
\r
126 m_serveraddress = m_regServeraddress_copy;
\r
127 if (m_serverport==0)
\r
128 m_serverport = _ttoi((LPCTSTR)(CString)m_regServerport_copy);
\r
129 if (m_username.IsEmpty())
\r
130 m_username = m_regUsername_copy;
\r
131 if (m_password.IsEmpty())
\r
132 m_password = m_regPassword_copy;
\r
133 if (m_Exceptions.IsEmpty())
\r
134 m_Exceptions = m_regExceptions_copy;
\r
135 if (m_timeout == 0)
\r
136 m_timeout = _ttoi((LPCTSTR)(CString)m_regTimeout_copy);
\r
138 SHAutoComplete(::GetDlgItem(m_hWnd, IDC_SSHCLIENT), SHACF_FILESYSTEM | SHACF_FILESYS_ONLY);
\r
145 void CSetProxyPage::OnBnClickedEnable()
\r
154 EnableGroup(FALSE);
\r
159 void CSetProxyPage::EnableGroup(BOOL b)
\r
161 GetDlgItem(IDC_SERVERADDRESS)->EnableWindow(b);
\r
162 GetDlgItem(IDC_SERVERPORT)->EnableWindow(b);
\r
163 GetDlgItem(IDC_USERNAME)->EnableWindow(b);
\r
164 GetDlgItem(IDC_PASSWORD)->EnableWindow(b);
\r
165 GetDlgItem(IDC_TIMEOUT)->EnableWindow(b);
\r
166 GetDlgItem(IDC_EXCEPTIONS)->EnableWindow(b);
\r
167 GetDlgItem(IDC_PROXYLABEL1)->EnableWindow(b);
\r
168 GetDlgItem(IDC_PROXYLABEL2)->EnableWindow(b);
\r
169 GetDlgItem(IDC_PROXYLABEL3)->EnableWindow(b);
\r
170 GetDlgItem(IDC_PROXYLABEL4)->EnableWindow(b);
\r
171 GetDlgItem(IDC_PROXYLABEL5)->EnableWindow(b);
\r
172 GetDlgItem(IDC_PROXYLABEL6)->EnableWindow(b);
\r
175 BOOL CSetProxyPage::PreTranslateMessage(MSG* pMsg)
\r
177 m_tooltips.RelayEvent(pMsg);
\r
178 return ISettingsPropPage::PreTranslateMessage(pMsg);
\r
181 void CSetProxyPage::OnChange()
\r
186 BOOL CSetProxyPage::OnApply()
\r
192 Store (m_serveraddress, m_regServeraddress);
\r
193 m_regServeraddress_copy = m_serveraddress;
\r
194 temp.Format(_T("%d"), m_serverport);
\r
195 Store (temp, m_regServerport);
\r
196 m_regServerport_copy = temp;
\r
197 Store (m_username, m_regUsername);
\r
198 m_regUsername_copy = m_username;
\r
199 Store (m_password, m_regPassword);
\r
200 m_regPassword_copy = m_password;
\r
201 temp.Format(_T("%d"), m_timeout);
\r
202 Store (temp, m_regTimeout);
\r
203 m_regTimeout_copy = temp;
\r
204 Store (m_Exceptions, m_regExceptions);
\r
205 m_regExceptions_copy = m_Exceptions;
\r
209 m_regServeraddress.removeValue();
\r
210 m_regServerport.removeValue();
\r
211 m_regUsername.removeValue();
\r
212 m_regPassword.removeValue();
\r
213 m_regTimeout.removeValue();
\r
214 m_regExceptions.removeValue();
\r
217 m_regServeraddress_copy = m_serveraddress;
\r
218 temp.Format(_T("%d"), m_serverport);
\r
219 m_regServerport_copy = temp;
\r
220 m_regUsername_copy = m_username;
\r
221 m_regPassword_copy = m_password;
\r
222 temp.Format(_T("%d"), m_timeout);
\r
223 m_regTimeout_copy = temp;
\r
224 m_regExceptions_copy = m_Exceptions;
\r
226 m_regSSHClient = m_SSHClient;
\r
227 SetModified(FALSE);
\r
228 return ISettingsPropPage::OnApply();
\r
232 void CSetProxyPage::OnBnClickedSshbrowse()
\r
235 if (CAppUtils::FileOpenSave(openPath, NULL, IDS_SETTINGS_SELECTSSH, IDS_PROGRAMSFILEFILTER, true, m_hWnd))
\r
238 m_SSHClient = openPath;
\r
244 void CSetProxyPage::OnBnClickedEditservers()
\r
246 TCHAR buf[MAX_PATH];
\r
247 SVN::EnsureConfigFile();
\r
248 SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, buf);
\r
249 CString path = buf;
\r
250 path += _T("\\Subversion\\servers");
\r
251 CAppUtils::StartTextViewer(path);
\r