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 "AppUtils.h"
\r
22 #include "StringUtils.h"
\r
23 #include ".\settingsprogsdiff.h"
\r
26 IMPLEMENT_DYNAMIC(CSettingsProgsDiff, ISettingsPropPage)
\r
27 CSettingsProgsDiff::CSettingsProgsDiff()
\r
28 : ISettingsPropPage(CSettingsProgsDiff::IDD)
\r
29 , m_dlgAdvDiff(_T("Diff"))
\r
31 , m_sDiffPath(_T(""))
\r
32 , m_iExtDiffProps(0)
\r
33 , m_sDiffPropsPath(_T(""))
\r
34 , m_regConvertBase(_T("Software\\TortoiseSVN\\ConvertBase"), TRUE)
\r
35 , m_bConvertBase(false)
\r
37 m_regDiffPath = CRegString(_T("Software\\TortoiseSVN\\Diff"));
\r
38 m_regDiffPropsPath = CRegString(_T("Software\\TortoiseSVN\\DiffProps"));
\r
41 CSettingsProgsDiff::~CSettingsProgsDiff()
\r
45 void CSettingsProgsDiff::DoDataExchange(CDataExchange* pDX)
\r
47 ISettingsPropPage::DoDataExchange(pDX);
\r
48 DDX_Text(pDX, IDC_EXTDIFF, m_sDiffPath);
\r
49 DDX_Radio(pDX, IDC_EXTDIFF_OFF, m_iExtDiff);
\r
50 DDX_Text(pDX, IDC_EXTDIFFPROPS, m_sDiffPropsPath);
\r
51 DDX_Radio(pDX, IDC_EXTDIFFPROPS_OFF, m_iExtDiffProps);
\r
52 DDX_Check(pDX, IDC_DONTCONVERT, m_bConvertBase);
\r
54 GetDlgItem(IDC_EXTDIFF)->EnableWindow(m_iExtDiff == 1);
\r
55 GetDlgItem(IDC_EXTDIFFBROWSE)->EnableWindow(m_iExtDiff == 1);
\r
56 GetDlgItem(IDC_EXTDIFFPROPS)->EnableWindow(m_iExtDiffProps == 1);
\r
57 GetDlgItem(IDC_EXTDIFFPROPSBROWSE)->EnableWindow(m_iExtDiffProps == 1);
\r
58 DDX_Control(pDX, IDC_EXTDIFF, m_cDiffEdit);
\r
59 DDX_Control(pDX, IDC_EXTDIFFPROPS, m_cDiffPropsEdit);
\r
63 BEGIN_MESSAGE_MAP(CSettingsProgsDiff, ISettingsPropPage)
\r
64 ON_BN_CLICKED(IDC_EXTDIFF_OFF, OnBnClickedExtdiffOff)
\r
65 ON_BN_CLICKED(IDC_EXTDIFF_ON, OnBnClickedExtdiffOn)
\r
66 ON_BN_CLICKED(IDC_EXTDIFFBROWSE, OnBnClickedExtdiffbrowse)
\r
67 ON_BN_CLICKED(IDC_EXTDIFFADVANCED, OnBnClickedExtdiffadvanced)
\r
68 ON_BN_CLICKED(IDC_EXTDIFFPROPS_OFF, OnBnClickedExtdiffpropsOff)
\r
69 ON_BN_CLICKED(IDC_EXTDIFFPROPS_ON, OnBnClickedExtdiffpropsOn)
\r
70 ON_BN_CLICKED(IDC_EXTDIFFPROPSBROWSE, OnBnClickedExtdiffpropsbrowse)
\r
71 ON_BN_CLICKED(IDC_DONTCONVERT, OnBnClickedDontconvert)
\r
72 ON_EN_CHANGE(IDC_EXTDIFF, OnEnChangeExtdiff)
\r
73 ON_EN_CHANGE(IDC_EXTDIFFPROPS, OnEnChangeExtdiffprops)
\r
77 BOOL CSettingsProgsDiff::OnInitDialog()
\r
81 m_sDiffPath = m_regDiffPath;
\r
82 m_iExtDiff = IsExternal(m_sDiffPath);
\r
84 m_sDiffPropsPath = m_regDiffPropsPath;
\r
85 m_iExtDiffProps = IsExternal(m_sDiffPropsPath);
\r
87 SHAutoComplete(::GetDlgItem(m_hWnd, IDC_EXTDIFF), SHACF_FILESYSTEM | SHACF_FILESYS_ONLY);
\r
89 m_bConvertBase = m_regConvertBase;
\r
91 m_tooltips.Create(this);
\r
92 m_tooltips.AddTool(IDC_EXTDIFF, IDS_SETTINGS_EXTDIFF_TT);
\r
93 m_tooltips.AddTool(IDC_DONTCONVERT, IDS_SETTINGS_CONVERTBASE_TT);
\r
99 BOOL CSettingsProgsDiff::PreTranslateMessage(MSG* pMsg)
\r
101 m_tooltips.RelayEvent(pMsg);
\r
102 return ISettingsPropPage::PreTranslateMessage(pMsg);
\r
105 BOOL CSettingsProgsDiff::OnApply()
\r
108 if (m_iExtDiff == 0 && !m_sDiffPath.IsEmpty() && m_sDiffPath.Left(1) != _T("#"))
\r
110 m_sDiffPath = _T("#") + m_sDiffPath;
\r
112 m_regDiffPath = m_sDiffPath;
\r
114 if (m_iExtDiffProps == 0 && !m_sDiffPropsPath.IsEmpty() && m_sDiffPropsPath.Left(1) != _T("#"))
\r
116 m_sDiffPropsPath = _T("#") + m_sDiffPropsPath;
\r
118 m_regDiffPropsPath = m_sDiffPropsPath;
\r
120 m_regConvertBase = m_bConvertBase;
\r
121 m_dlgAdvDiff.SaveData();
\r
122 SetModified(FALSE);
\r
123 return ISettingsPropPage::OnApply();
\r
126 void CSettingsProgsDiff::OnBnClickedExtdiffOff()
\r
130 GetDlgItem(IDC_EXTDIFF)->EnableWindow(false);
\r
131 GetDlgItem(IDC_EXTDIFFBROWSE)->EnableWindow(false);
\r
132 CheckProgComment();
\r
135 void CSettingsProgsDiff::OnBnClickedExtdiffpropsOff()
\r
137 m_iExtDiffProps = 0;
\r
139 GetDlgItem(IDC_EXTDIFFPROPS)->EnableWindow(false);
\r
140 GetDlgItem(IDC_EXTDIFFPROPSBROWSE)->EnableWindow(false);
\r
141 CheckProgCommentProps();
\r
144 void CSettingsProgsDiff::OnBnClickedExtdiffOn()
\r
148 GetDlgItem(IDC_EXTDIFF)->EnableWindow(true);
\r
149 GetDlgItem(IDC_EXTDIFFBROWSE)->EnableWindow(true);
\r
150 GetDlgItem(IDC_EXTDIFF)->SetFocus();
\r
151 CheckProgComment();
\r
154 void CSettingsProgsDiff::OnBnClickedExtdiffpropsOn()
\r
156 m_iExtDiffProps = 1;
\r
158 GetDlgItem(IDC_EXTDIFFPROPS)->EnableWindow(true);
\r
159 GetDlgItem(IDC_EXTDIFFPROPSBROWSE)->EnableWindow(true);
\r
160 GetDlgItem(IDC_EXTDIFFPROPS)->SetFocus();
\r
161 CheckProgCommentProps();
\r
164 void CSettingsProgsDiff::OnBnClickedExtdiffbrowse()
\r
166 if (CAppUtils::FileOpenSave(m_sDiffPath, NULL, IDS_SETTINGS_SELECTDIFF, IDS_PROGRAMSFILEFILTER, true, m_hWnd))
\r
173 void CSettingsProgsDiff::OnBnClickedExtdiffpropsbrowse()
\r
175 if (CAppUtils::FileOpenSave(m_sDiffPropsPath, NULL, IDS_SETTINGS_SELECTDIFF, IDS_PROGRAMSFILEFILTER, true, m_hWnd))
\r
182 void CSettingsProgsDiff::OnBnClickedExtdiffadvanced()
\r
184 if (m_dlgAdvDiff.DoModal() == IDOK)
\r
188 void CSettingsProgsDiff::OnBnClickedDontconvert()
\r
193 void CSettingsProgsDiff::OnEnChangeExtdiff()
\r
198 void CSettingsProgsDiff::OnEnChangeExtdiffprops()
\r
203 void CSettingsProgsDiff::CheckProgComment()
\r
206 if (m_iExtDiff == 0 && !m_sDiffPath.IsEmpty() && m_sDiffPath.Left(1) != _T("#"))
\r
207 m_sDiffPath = _T("#") + m_sDiffPath;
\r
208 else if (m_iExtDiff == 1)
\r
209 m_sDiffPath.TrimLeft('#');
\r
213 void CSettingsProgsDiff::CheckProgCommentProps()
\r
216 if (m_iExtDiffProps == 0 && !m_sDiffPropsPath.IsEmpty() && m_sDiffPropsPath.Left(1) != _T("#"))
\r
217 m_sDiffPropsPath = _T("#") + m_sDiffPropsPath;
\r
218 else if (m_iExtDiffProps == 1)
\r
219 m_sDiffPropsPath.TrimLeft('#');
\r