Cleanup: Drop unnecessary method definitions
[TortoiseGit.git] / src / TortoiseProc / Settings / SetProgsAdvDlg.cpp
blobb4421971875b3d25a65116ab8a3e332ab965b2c0
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
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 #include "stdafx.h"
20 #include "TortoiseProc.h"
21 #include "ToolAssocDlg.h"
22 #include "SetProgsAdvDlg.h"
23 #include "PathUtils.h"
24 #include "DirFileEnum.h"
26 IMPLEMENT_DYNAMIC(CSetProgsAdvDlg, CDialog)
27 CSetProgsAdvDlg::CSetProgsAdvDlg(const CString& type, CWnd* pParent /*=NULL*/)
28 : CDialog(CSetProgsAdvDlg::IDD, pParent)
29 , m_sType(type)
30 , m_regToolKey(_T("Software\\TortoiseGit\\") + type + _T("Tools"))
31 , m_ToolsValid(false)
35 CSetProgsAdvDlg::~CSetProgsAdvDlg()
39 void CSetProgsAdvDlg::LoadData()
41 if (!m_ToolsValid)
43 m_Tools.clear();
45 CStringList values;
46 if (m_regToolKey.getValues(values))
48 for (POSITION pos = values.GetHeadPosition(); pos != NULL; )
50 CString ext = values.GetNext(pos);
51 m_Tools[ext] = CRegString(m_regToolKey.m_path + _T("\\") + ext);
55 m_ToolsValid = true;
59 int CSetProgsAdvDlg::SaveData()
61 if (m_ToolsValid)
63 // Remove all registry values which are no longer in the list
64 CStringList values;
65 if (m_regToolKey.getValues(values))
67 for (POSITION pos = values.GetHeadPosition(); pos != NULL; )
69 CString ext = values.GetNext(pos);
70 if (m_Tools.find(ext) == m_Tools.end())
72 CRegString to_remove(m_regToolKey.m_path + _T("\\") + ext);
73 to_remove.removeValue();
78 // Add or update new or changed values
79 for (TOOL_MAP::iterator it = m_Tools.begin(); it != m_Tools.end() ; it++)
81 CString ext = it->first;
82 CString new_value = it->second;
83 CRegString reg_value(m_regToolKey.m_path + _T("\\") + ext);
84 if (reg_value != new_value)
85 reg_value = new_value;
88 return 0;
91 void CSetProgsAdvDlg::DoDataExchange(CDataExchange* pDX)
93 CDialog::DoDataExchange(pDX);
94 DDX_Control(pDX, IDC_TOOLLISTCTRL, m_ToolListCtrl);
96 if (pDX->m_bSaveAndValidate)
98 m_Tools.clear();
99 int count = m_ToolListCtrl.GetItemCount();
100 for (int i = 0; i < count; i++)
102 CString ext = m_ToolListCtrl.GetItemText(i, 0);
103 CString value = m_ToolListCtrl.GetItemText(i, 1);
104 m_Tools[ext] = value;
107 else
109 m_ToolListCtrl.DeleteAllItems();
110 for (TOOL_MAP::iterator it = m_Tools.begin(); it != m_Tools.end() ; it++)
112 CString ext = it->first;
113 CString value = it->second;
114 AddExtension(ext, value);
120 BEGIN_MESSAGE_MAP(CSetProgsAdvDlg, CDialog)
121 ON_BN_CLICKED(IDC_ADDTOOL, OnBnClickedAddtool)
122 ON_BN_CLICKED(IDC_REMOVETOOL, OnBnClickedRemovetool)
123 ON_BN_CLICKED(IDC_EDITTOOL, OnBnClickedEdittool)
124 ON_NOTIFY(NM_DBLCLK, IDC_TOOLLISTCTRL, OnNMDblclkToollistctrl)
125 ON_NOTIFY(LVN_ITEMCHANGED, IDC_TOOLLISTCTRL, &CSetProgsAdvDlg::OnLvnItemchangedToollistctrl)
126 ON_BN_CLICKED(IDC_RESTOREDEFAULTS, &CSetProgsAdvDlg::OnBnClickedRestoredefaults)
127 END_MESSAGE_MAP()
130 BOOL CSetProgsAdvDlg::OnInitDialog()
132 CDialog::OnInitDialog();
134 m_ToolListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
136 m_ToolListCtrl.DeleteAllItems();
137 int c = ((CHeaderCtrl*)(m_ToolListCtrl.GetDlgItem(0)))->GetItemCount()-1;
138 while (c>=0)
139 m_ToolListCtrl.DeleteColumn(c--);
141 SetWindowTheme(m_hWnd, L"Explorer", NULL);
143 CString temp;
144 temp.LoadString(IDS_PROGS_EXTCOL);
145 m_ToolListCtrl.InsertColumn(0, temp);
146 temp.LoadString(IDS_PROGS_TOOLCOL);
147 m_ToolListCtrl.InsertColumn(1, temp);
149 m_ToolListCtrl.SetRedraw(FALSE);
150 int mincol = 0;
151 int maxcol = ((CHeaderCtrl*)(m_ToolListCtrl.GetDlgItem(0)))->GetItemCount()-1;
152 int col;
153 for (col = mincol; col <= maxcol; col++)
155 m_ToolListCtrl.SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
157 m_ToolListCtrl.SetRedraw(TRUE);
159 temp.LoadString(m_sType == _T("Diff") ? IDS_DLGTITLE_ADV_DIFF : IDS_DLGTITLE_ADV_MERGE);
160 SetWindowText(temp);
162 LoadData();
163 UpdateData(FALSE);
164 EnableBtns();
165 return TRUE;
168 int CSetProgsAdvDlg::AddExtension(const CString& ext, const CString& tool)
170 // Note: list control automatically sorts entries
171 int index = m_ToolListCtrl.InsertItem(0, ext);
172 if (index >= 0)
174 m_ToolListCtrl.SetItemText(index, 1, tool);
176 return index;
179 int CSetProgsAdvDlg::FindExtension(const CString& ext)
181 int count = m_ToolListCtrl.GetItemCount();
183 for (int i = 0; i < count; i++)
185 if (m_ToolListCtrl.GetItemText(i, 0) == ext)
186 return i;
189 return -1;
192 void CSetProgsAdvDlg::EnableBtns()
194 bool enable_btns = m_ToolListCtrl.GetSelectedCount() > 0;
195 GetDlgItem(IDC_EDITTOOL)->EnableWindow(enable_btns);
196 GetDlgItem(IDC_REMOVETOOL)->EnableWindow(enable_btns);
200 // CSetProgsPage message handlers
202 void CSetProgsAdvDlg::OnBnClickedAddtool()
204 CToolAssocDlg dlg(m_sType, true);;
205 dlg.m_sExtension = _T("");
206 dlg.m_sTool = _T("");
207 if (dlg.DoModal() == IDOK)
209 int index = AddExtension(dlg.m_sExtension, dlg.m_sTool);
210 m_ToolListCtrl.SetItemState(index, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
211 m_ToolListCtrl.SetSelectionMark(index);
214 EnableBtns();
215 m_ToolListCtrl.SetFocus();
218 void CSetProgsAdvDlg::OnBnClickedEdittool()
220 int selected = m_ToolListCtrl.GetSelectionMark();
221 if (selected >= 0)
223 CToolAssocDlg dlg(m_sType, false);;
224 dlg.m_sExtension = m_ToolListCtrl.GetItemText(selected, 0);
225 dlg.m_sTool = m_ToolListCtrl.GetItemText(selected, 1);
226 if (dlg.DoModal() == IDOK)
228 if (m_ToolListCtrl.DeleteItem(selected))
230 selected = AddExtension(dlg.m_sExtension, dlg.m_sTool);
231 m_ToolListCtrl.SetItemState(selected, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
232 m_ToolListCtrl.SetSelectionMark(selected);
237 EnableBtns();
238 m_ToolListCtrl.SetFocus();
241 void CSetProgsAdvDlg::OnBnClickedRemovetool()
243 int selected = m_ToolListCtrl.GetSelectionMark();
244 if (selected >= 0)
246 m_ToolListCtrl.SetRedraw(FALSE);
247 if (m_ToolListCtrl.DeleteItem(selected))
249 if (m_ToolListCtrl.GetItemCount() <= selected)
250 --selected;
251 if (selected >= 0)
253 m_ToolListCtrl.SetItemState(selected, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
254 m_ToolListCtrl.SetSelectionMark(selected);
257 m_ToolListCtrl.SetRedraw(TRUE);
260 EnableBtns();
261 m_ToolListCtrl.SetFocus();
264 void CSetProgsAdvDlg::OnNMDblclkToollistctrl(NMHDR * /* pNMHDR */, LRESULT *pResult)
266 OnBnClickedEdittool();
267 *pResult = 0;
270 void CSetProgsAdvDlg::OnLvnItemchangedToollistctrl(NMHDR * /* pNMHDR */, LRESULT *pResult)
272 EnableBtns();
274 *pResult = 0;
277 void CSetProgsAdvDlg::OnBnClickedRestoredefaults()
279 // set the custom diff/merge scripts
280 CString scriptsdir = CPathUtils::GetAppParentDirectory();
281 scriptsdir += _T("Diff-Scripts");
282 CSimpleFileFind files(scriptsdir);
283 while (files.FindNextFileNoDirectories())
285 CString file = files.GetFilePath();
286 CString filename = files.GetFileName();
287 CString ext = file.Mid(file.ReverseFind('-')+1);
288 ext = _T(".")+ext.Left(ext.ReverseFind('.'));
289 CString kind;
290 if (file.Right(3).CompareNoCase(_T("vbs"))==0)
292 kind = _T(" //E:vbscript");
294 if (file.Right(2).CompareNoCase(_T("js"))==0)
296 kind = _T(" //E:javascript");
299 if (m_sType.Compare(_T("Diff"))==0)
301 if (filename.Left(5).CompareNoCase(_T("diff-"))==0)
303 CRegString diffreg = CRegString(_T("Software\\TortoiseGit\\DiffTools\\")+ext);
304 diffreg = _T("wscript.exe \"") + file + _T("\" %base %mine") + kind;
307 else if (m_sType.Compare(_T("Merge"))==0)
309 if (filename.Left(6).CompareNoCase(_T("merge-"))==0)
311 CRegString diffreg = CRegString(_T("Software\\TortoiseGit\\MergeTools\\")+ext);
312 diffreg = _T("wscript.exe \"") + file + _T("\" %merged %theirs %mine %base") + kind;
316 m_ToolsValid = FALSE;
317 LoadData();
318 UpdateData(FALSE);
319 EnableBtns();