Fixed issue #2113: JiraSvn bugtraq provider's commit behavior is broken
[TortoiseGit.git] / src / TortoiseProc / Settings / SettingsAdvanced.cpp
blobfb97b340f17c1feee6495cc5ec663523098df427
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2012-2014 - TortoiseGit
4 // Copyright (C) 2009-2011, 2013 - TortoiseSVN
6 // This program is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU General Public License
8 // as published by the Free Software Foundation; either version 2
9 // of the License, or (at your option) any later version.
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License
17 // along with this program; if not, write to the Free Software Foundation,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21 #include "stdafx.h"
22 #include "TortoiseProc.h"
23 #include "SettingsAdvanced.h"
24 #include "registry.h"
27 IMPLEMENT_DYNAMIC(CSettingsAdvanced, ISettingsPropPage)
29 CSettingsAdvanced::CSettingsAdvanced()
30 : ISettingsPropPage(CSettingsAdvanced::IDD)
32 int i = 0;
33 settings[i].sName = L"AutoCompleteMinChars";
34 settings[i].type = CSettingsAdvanced::SettingTypeNumber;
35 settings[i++].def.l = 3;
37 settings[i].sName = L"AutocompleteRemovesExtensions";
38 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
39 settings[i++].def.b = false;
41 settings[i].sName = L"BlockStatus";
42 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
43 settings[i++].def.b = false;
45 settings[i].sName = L"CacheTrayIcon";
46 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
47 settings[i++].def.b = false;
49 settings[i].sName = L"Debug";
50 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
51 settings[i++].def.b = false;
53 settings[i].sName = L"DebugOutputString";
54 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
55 settings[i++].def.b = false;
57 settings[i].sName = L"DiffBlamesWithTortoiseMerge";
58 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
59 settings[i++].def.b = false;
61 settings[i].sName = L"FullRowSelect";
62 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
63 settings[i++].def.b = true;
65 settings[i].sName = L"GroupTaskbarIconsPerRepo";
66 settings[i].type = CSettingsAdvanced::SettingTypeNumber;
67 settings[i++].def.l = 3;
69 settings[i].sName = L"GroupTaskbarIconsPerRepoOverlay";
70 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
71 settings[i++].def.b = true;
74 settings[i].sName = L"LogIncludeBoundaryCommits";
75 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
76 settings[i++].def.b = false;
78 settings[i].sName = L"MaxRefHistoryItems";
79 settings[i].type = CSettingsAdvanced::SettingTypeNumber;
80 settings[i++].def.l = 5;
82 settings[i].sName = L"NoSortLocalBranchesFirst";
83 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
84 settings[i++].def.b = false;
86 settings[i].sName = L"NumDiffWarning";
87 settings[i].type = CSettingsAdvanced::SettingTypeNumber;
88 settings[i++].def.l = 10;
90 settings[i].sName = L"ReaddUnselectedAddedFilesAfterCommit";
91 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
92 settings[i++].def.b = true;
94 settings[i].sName = L"SanitizeCommitMsg";
95 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
96 settings[i++].def.b = true;
98 settings[i].sName = L"ScintillaDirect2D";
99 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
100 settings[i++].def.b = false;
102 settings[i].sName = L"ShellMenuAccelerators";
103 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
104 settings[i++].def.b = true;
106 settings[i].sName = L"ShowContextMenuIcons";
107 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
108 settings[i++].def.b = true;
110 settings[i].sName = L"ShowAppContextMenuIcons";
111 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
112 settings[i++].def.b = true;
114 settings[i].sName = L"ShowListBackgroundImage";
115 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
116 settings[i++].def.b = true;
118 settings[i].sName = L"StyleCommitMessages";
119 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
120 settings[i++].def.b = true;
122 settings[i].sName = L"TGitCacheCheckContent";
123 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
124 settings[i++].def.b = true;
126 settings[i].sName = L"UseLibgit2";
127 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
128 settings[i++].def.b = true;
130 settings[i].sName = L"VersionCheck";
131 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
132 settings[i++].def.b = true;
134 settings[i].sName = L"VersionCheckPreview";
135 settings[i].type = CSettingsAdvanced::SettingTypeBoolean;
136 settings[i++].def.b = false;
138 settings[i].sName = L"";
139 settings[i].type = CSettingsAdvanced::SettingTypeNone;
140 settings[i++].def.b = false;
143 CSettingsAdvanced::~CSettingsAdvanced()
147 void CSettingsAdvanced::DoDataExchange(CDataExchange* pDX)
149 ISettingsPropPage::DoDataExchange(pDX);
150 DDX_Control(pDX, IDC_CONFIG, m_ListCtrl);
154 BEGIN_MESSAGE_MAP(CSettingsAdvanced, ISettingsPropPage)
155 ON_NOTIFY(LVN_BEGINLABELEDIT, IDC_CONFIG, &CSettingsAdvanced::OnLvnBeginlabeledit)
156 ON_NOTIFY(LVN_ENDLABELEDIT, IDC_CONFIG, &CSettingsAdvanced::OnLvnEndlabeledit)
157 ON_NOTIFY(NM_DBLCLK, IDC_CONFIG, &CSettingsAdvanced::OnNMDblclkConfig)
158 END_MESSAGE_MAP()
161 BOOL CSettingsAdvanced::OnInitDialog()
163 ISettingsPropPage::OnInitDialog();
165 m_ListCtrl.DeleteAllItems();
166 int c = ((CHeaderCtrl*)(m_ListCtrl.GetDlgItem(0)))->GetItemCount() - 1;
167 while (c >= 0)
168 m_ListCtrl.DeleteColumn(c--);
170 SetWindowTheme(m_ListCtrl.GetSafeHwnd(), L"Explorer", NULL);
172 CString temp;
173 temp.LoadString(IDS_SETTINGS_CONF_VALUECOL);
174 m_ListCtrl.InsertColumn(0, temp);
175 temp.LoadString(IDS_SETTINGS_CONF_NAMECOL);
176 m_ListCtrl.InsertColumn(1, temp);
178 m_ListCtrl.SetRedraw(FALSE);
180 int i = 0;
181 while (settings[i].type != SettingTypeNone)
183 m_ListCtrl.InsertItem(i, settings[i].sName);
184 m_ListCtrl.SetItemText(i, 1, settings[i].sName);
185 switch (settings[i].type)
187 case SettingTypeBoolean:
189 CRegDWORD s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.b);
190 m_ListCtrl.SetItemText(i, 0, DWORD(s) ? _T("true") : _T("false"));
192 break;
193 case SettingTypeNumber:
195 CRegDWORD s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.l);
196 temp.Format(_T("%ld"), (DWORD)s);
197 m_ListCtrl.SetItemText(i, 0, temp);
199 break;
200 case SettingTypeString:
202 CRegString s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.s);
203 m_ListCtrl.SetItemText(i, 0, CString(s));
207 ++i;
210 int mincol = 0;
211 int maxcol = ((CHeaderCtrl*)(m_ListCtrl.GetDlgItem(0)))->GetItemCount() - 1;
212 int col;
213 for (col = mincol; col <= maxcol; ++col)
215 m_ListCtrl.SetColumnWidth(col, LVSCW_AUTOSIZE_USEHEADER);
217 int arr[2] = {1,0};
218 m_ListCtrl.SetColumnOrderArray(2, arr);
219 m_ListCtrl.SetRedraw(TRUE);
221 return TRUE;
224 BOOL CSettingsAdvanced::OnApply()
226 int i = 0;
227 while (settings[i].type != SettingTypeNone)
229 CString sValue = m_ListCtrl.GetItemText(i, 0);
230 switch (settings[i].type)
232 case SettingTypeBoolean:
234 CRegDWORD s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.b);
235 if (sValue.IsEmpty())
236 s.removeValue();
237 else
239 DWORD newValue = sValue.Compare(_T("true")) == 0;
240 if (DWORD(s) != newValue)
242 s = newValue;
246 break;
247 case SettingTypeNumber:
249 CRegDWORD s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.l);
250 if (DWORD(_tstol(sValue)) != DWORD(s))
252 s = _tstol(sValue);
255 break;
256 case SettingTypeString:
258 CRegString s(_T("Software\\TortoiseGit\\") + settings[i].sName, settings[i].def.s);
259 if (sValue.Compare(CString(s)))
261 s = sValue;
266 ++i;
269 return ISettingsPropPage::OnApply();
272 void CSettingsAdvanced::OnLvnBeginlabeledit(NMHDR * /*pNMHDR*/, LRESULT *pResult)
274 *pResult = FALSE;
277 void CSettingsAdvanced::OnLvnEndlabeledit(NMHDR *pNMHDR, LRESULT *pResult)
279 NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
280 *pResult = 0;
281 if (pDispInfo->item.pszText == NULL)
282 return;
284 bool allowEdit = false;
285 switch (settings[pDispInfo->item.iItem].type)
287 case SettingTypeBoolean:
289 if ((pDispInfo->item.pszText[0] == 0) ||
290 (_tcscmp(pDispInfo->item.pszText, _T("true")) == 0) ||
291 (_tcscmp(pDispInfo->item.pszText, _T("false")) == 0))
293 allowEdit = true;
296 break;
297 case SettingTypeNumber:
299 TCHAR * pChar = pDispInfo->item.pszText;
300 allowEdit = true;
301 while (*pChar)
303 if (!_istdigit(*pChar))
305 allowEdit = false;
306 break;
308 ++pChar;
311 break;
312 case SettingTypeString:
313 allowEdit = true;
314 break;
317 if (allowEdit)
318 SetModified();
320 *pResult = allowEdit ? TRUE : FALSE;
323 BOOL CSettingsAdvanced::PreTranslateMessage(MSG* pMsg)
325 if (pMsg->message == WM_KEYDOWN)
327 switch (pMsg->wParam)
329 case VK_F2:
331 m_ListCtrl.EditLabel(m_ListCtrl.GetSelectionMark());
333 break;
336 return ISettingsPropPage::PreTranslateMessage(pMsg);
339 void CSettingsAdvanced::OnNMDblclkConfig(NMHDR *pNMHDR, LRESULT *pResult)
341 LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
342 m_ListCtrl.EditLabel(pNMItemActivate->iItem);
343 *pResult = 0;