Dropped unused variables
[TortoiseGit.git] / src / TortoiseProc / Settings / SetProgsAdvDlg.cpp
blobda1b75a08f4d7901b00ecc4e3af1aa0911f03cc6
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2011 - 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 "AppUtils.h"
25 IMPLEMENT_DYNAMIC(CSetProgsAdvDlg, CResizableStandAloneDialog)
26 CSetProgsAdvDlg::CSetProgsAdvDlg(const CString& type, CWnd* pParent /*=NULL*/)
27 : CResizableStandAloneDialog(CSetProgsAdvDlg::IDD, pParent)
28 , m_sType(type)
29 , m_regToolKey(_T("Software\\TortoiseGit\\") + type + _T("Tools"))
30 , m_ToolsValid(false)
34 CSetProgsAdvDlg::~CSetProgsAdvDlg()
38 void CSetProgsAdvDlg::LoadData()
40 if (!m_ToolsValid)
42 m_Tools.clear();
44 CStringList values;
45 if (m_regToolKey.getValues(values))
47 for (POSITION pos = values.GetHeadPosition(); pos != NULL; )
49 CString ext = values.GetNext(pos);
50 m_Tools[ext] = CRegString(m_regToolKey.m_path + _T("\\") + ext);
54 m_ToolsValid = true;
58 int CSetProgsAdvDlg::SaveData()
60 if (m_ToolsValid)
62 // Remove all registry values which are no longer in the list
63 CStringList values;
64 if (m_regToolKey.getValues(values))
66 for (POSITION pos = values.GetHeadPosition(); pos != NULL; )
68 CString ext = values.GetNext(pos);
69 if (m_Tools.find(ext) == m_Tools.end())
71 CRegString to_remove(m_regToolKey.m_path + _T("\\") + ext);
72 to_remove.removeValue();
77 // Add or update new or changed values
78 for (TOOL_MAP::iterator it = m_Tools.begin(); it != m_Tools.end() ; ++it)
80 CString ext = it->first;
81 CString new_value = it->second;
82 CRegString reg_value(m_regToolKey.m_path + _T("\\") + ext);
83 if (reg_value != new_value)
84 reg_value = new_value;
87 return 0;
90 void CSetProgsAdvDlg::DoDataExchange(CDataExchange* pDX)
92 CResizableStandAloneDialog::DoDataExchange(pDX);
93 DDX_Control(pDX, IDC_TOOLLISTCTRL, m_ToolListCtrl);
95 if (pDX->m_bSaveAndValidate)
97 m_Tools.clear();
98 int count = m_ToolListCtrl.GetItemCount();
99 for (int i = 0; i < count; i++)
101 CString ext = m_ToolListCtrl.GetItemText(i, 0);
102 CString value = m_ToolListCtrl.GetItemText(i, 1);
103 m_Tools[ext] = value;
106 else
108 m_ToolListCtrl.DeleteAllItems();
109 for (TOOL_MAP::iterator it = m_Tools.begin(); it != m_Tools.end() ; ++it)
111 CString ext = it->first;
112 CString value = it->second;
113 AddExtension(ext, value);
119 BEGIN_MESSAGE_MAP(CSetProgsAdvDlg, CResizableStandAloneDialog)
120 ON_BN_CLICKED(IDC_ADDTOOL, OnBnClickedAddtool)
121 ON_BN_CLICKED(IDC_REMOVETOOL, OnBnClickedRemovetool)
122 ON_BN_CLICKED(IDC_EDITTOOL, OnBnClickedEdittool)
123 ON_NOTIFY(NM_DBLCLK, IDC_TOOLLISTCTRL, OnNMDblclkToollistctrl)
124 ON_NOTIFY(LVN_ITEMCHANGED, IDC_TOOLLISTCTRL, &CSetProgsAdvDlg::OnLvnItemchangedToollistctrl)
125 ON_BN_CLICKED(IDC_RESTOREDEFAULTS, &CSetProgsAdvDlg::OnBnClickedRestoredefaults)
126 END_MESSAGE_MAP()
129 BOOL CSetProgsAdvDlg::OnInitDialog()
131 CResizableStandAloneDialog::OnInitDialog();
133 m_ToolListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER);
135 m_ToolListCtrl.DeleteAllItems();
136 int c = ((CHeaderCtrl*)(m_ToolListCtrl.GetDlgItem(0)))->GetItemCount()-1;
137 while (c>=0)
138 m_ToolListCtrl.DeleteColumn(c--);
140 SetWindowTheme(m_ToolListCtrl.GetSafeHwnd(), L"Explorer", NULL);
142 CString temp;
143 temp.LoadString(IDS_PROGS_EXTCOL);
144 m_ToolListCtrl.InsertColumn(0, temp);
145 temp.LoadString(IDS_PROGS_TOOLCOL);
146 m_ToolListCtrl.InsertColumn(1, temp);
148 m_ToolListCtrl.SetRedraw(FALSE);
149 int mincol = 0;
150 int maxcol = ((CHeaderCtrl*)(m_ToolListCtrl.GetDlgItem(0)))->GetItemCount()-1;
151 int col;
152 for (col = mincol; col <= maxcol; col++)
154 m_ToolListCtrl.SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
156 m_ToolListCtrl.SetRedraw(TRUE);
158 temp.LoadString(m_sType == _T("Diff") ? IDS_DLGTITLE_ADV_DIFF : IDS_DLGTITLE_ADV_MERGE);
159 SetWindowText(temp);
161 LoadData();
162 UpdateData(FALSE);
163 EnableBtns();
165 AddAnchor(IDC_GROUP, TOP_LEFT, BOTTOM_RIGHT);
166 AddAnchor(IDC_TOOLLISTCTRL, TOP_LEFT, BOTTOM_RIGHT);
167 AddAnchor(IDC_ADDTOOL, BOTTOM_LEFT);
168 AddAnchor(IDC_EDITTOOL, BOTTOM_LEFT);
169 AddAnchor(IDC_REMOVETOOL, BOTTOM_LEFT);
170 AddAnchor(IDC_RESTOREDEFAULTS, BOTTOM_LEFT);
171 AddAnchor(IDOK, BOTTOM_RIGHT);
172 AddAnchor(IDCANCEL, BOTTOM_RIGHT);
174 return TRUE;
177 int CSetProgsAdvDlg::AddExtension(const CString& ext, const CString& tool)
179 // Note: list control automatically sorts entries
180 int index = m_ToolListCtrl.InsertItem(0, ext);
181 if (index >= 0)
183 m_ToolListCtrl.SetItemText(index, 1, tool);
185 return index;
188 int CSetProgsAdvDlg::FindExtension(const CString& ext)
190 int count = m_ToolListCtrl.GetItemCount();
192 for (int i = 0; i < count; i++)
194 if (m_ToolListCtrl.GetItemText(i, 0) == ext)
195 return i;
198 return -1;
201 void CSetProgsAdvDlg::EnableBtns()
203 bool enable_btns = m_ToolListCtrl.GetSelectedCount() > 0;
204 GetDlgItem(IDC_EDITTOOL)->EnableWindow(enable_btns);
205 GetDlgItem(IDC_REMOVETOOL)->EnableWindow(enable_btns);
209 // CSetProgsPage message handlers
211 void CSetProgsAdvDlg::OnBnClickedAddtool()
213 CToolAssocDlg dlg(m_sType, true);
214 dlg.m_sExtension = _T("");
215 dlg.m_sTool = _T("");
216 if (dlg.DoModal() == IDOK)
218 int index = AddExtension(dlg.m_sExtension, dlg.m_sTool);
219 m_ToolListCtrl.SetItemState(index, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
220 m_ToolListCtrl.SetSelectionMark(index);
223 EnableBtns();
224 m_ToolListCtrl.SetFocus();
227 void CSetProgsAdvDlg::OnBnClickedEdittool()
229 int selected = m_ToolListCtrl.GetSelectionMark();
230 if (selected >= 0)
232 CToolAssocDlg dlg(m_sType, false);
233 dlg.m_sExtension = m_ToolListCtrl.GetItemText(selected, 0);
234 dlg.m_sTool = m_ToolListCtrl.GetItemText(selected, 1);
235 if (dlg.DoModal() == IDOK)
237 if (m_ToolListCtrl.DeleteItem(selected))
239 selected = AddExtension(dlg.m_sExtension, dlg.m_sTool);
240 m_ToolListCtrl.SetItemState(selected, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
241 m_ToolListCtrl.SetSelectionMark(selected);
246 EnableBtns();
247 m_ToolListCtrl.SetFocus();
250 void CSetProgsAdvDlg::OnBnClickedRemovetool()
252 int selected = m_ToolListCtrl.GetSelectionMark();
253 if (selected >= 0)
255 m_ToolListCtrl.SetRedraw(FALSE);
256 if (m_ToolListCtrl.DeleteItem(selected))
258 if (m_ToolListCtrl.GetItemCount() <= selected)
259 --selected;
260 if (selected >= 0)
262 m_ToolListCtrl.SetItemState(selected, UINT(-1), LVIS_SELECTED|LVIS_FOCUSED);
263 m_ToolListCtrl.SetSelectionMark(selected);
266 m_ToolListCtrl.SetRedraw(TRUE);
269 EnableBtns();
270 m_ToolListCtrl.SetFocus();
273 void CSetProgsAdvDlg::OnNMDblclkToollistctrl(NMHDR * /* pNMHDR */, LRESULT *pResult)
275 OnBnClickedEdittool();
276 *pResult = 0;
279 void CSetProgsAdvDlg::OnLvnItemchangedToollistctrl(NMHDR * /* pNMHDR */, LRESULT *pResult)
281 EnableBtns();
283 *pResult = 0;
286 void CSetProgsAdvDlg::OnBnClickedRestoredefaults()
288 CAppUtils::SetupDiffScripts(true, m_sType);
289 m_ToolsValid = FALSE;
290 LoadData();
291 UpdateData(FALSE);
292 EnableBtns();