Move some logic for getting config values to CAutoConfig
[TortoiseGit.git] / src / TortoiseProc / Settings / SetDialogs3.cpp
blob904d516ba912f7b6ef5dca6d3712012e7b5b90ab
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2013-2014 - TortoiseGit
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 "SetMainPage.h"
22 #include "ProjectProperties.h"
23 #include "SetDialogs3.h"
25 CComboBox CSetDialogs3::m_langCombo;
27 IMPLEMENT_DYNAMIC(CSetDialogs3, ISettingsPropPage)
28 CSetDialogs3::CSetDialogs3()
29 : ISettingsPropPage(CSetDialogs3::IDD)
30 , m_bNeedSave(false)
31 , m_bInheritLogMinSize(FALSE)
32 , m_bInheritBorder(FALSE)
33 , m_bInheritIconFile(FALSE)
37 CSetDialogs3::~CSetDialogs3()
41 void CSetDialogs3::DoDataExchange(CDataExchange* pDX)
43 ISettingsPropPage::DoDataExchange(pDX);
44 DDX_Control(pDX, IDC_LANGCOMBO, m_langCombo);
45 DDX_Text(pDX, IDC_LOGMINSIZE, m_LogMinSize);
46 DDX_Text(pDX, IDC_BORDER, m_Border);
47 DDX_Text(pDX, IDC_ICONFILE, m_iconFile);
48 DDX_Control(pDX, IDC_WARN_NO_SIGNED_OFF_BY, m_cWarnNoSignedOffBy);
49 DDX_Check(pDX, IDC_CHECK_INHERIT_LIMIT, m_bInheritLogMinSize);
50 DDX_Check(pDX, IDC_CHECK_INHERIT_BORDER, m_bInheritBorder);
51 DDX_Check(pDX, IDC_CHECK_INHERIT_KEYID, m_bInheritIconFile);
52 GITSETTINGS_DDX
55 BEGIN_MESSAGE_MAP(CSetDialogs3, ISettingsPropPage)
56 GITSETTINGS_RADIO_EVENT
57 ON_CBN_SELCHANGE(IDC_LANGCOMBO, &OnChange)
58 ON_CBN_SELCHANGE(IDC_WARN_NO_SIGNED_OFF_BY, &OnChange)
59 ON_EN_CHANGE(IDC_LOGMINSIZE, &OnChange)
60 ON_EN_CHANGE(IDC_BORDER, &OnChange)
61 ON_EN_CHANGE(IDC_ICONFILE, &OnChange)
62 ON_BN_CLICKED(IDC_CHECK_INHERIT_LIMIT, &OnChange)
63 ON_BN_CLICKED(IDC_CHECK_INHERIT_BORDER, &OnChange)
64 ON_BN_CLICKED(IDC_CHECK_INHERIT_KEYID, &OnChange)
65 ON_BN_CLICKED(IDC_ICONFILE_BROWSE, &OnBnClickedIconfileBrowse)
66 END_MESSAGE_MAP()
68 // CSetDialogs2 message handlers
69 BOOL CSetDialogs3::OnInitDialog()
71 ISettingsPropPage::OnInitDialog();
73 AddTrueFalseToComboBox(m_cWarnNoSignedOffBy);
75 m_langCombo.AddString(_T(""));
76 m_langCombo.SetItemData(0, (DWORD_PTR)-2);
77 m_langCombo.AddString(_T("(auto)")); // do not translate, the order matters!
78 m_langCombo.SetItemData(1, 0);
79 m_langCombo.AddString(_T("(disable)")); // do not translate, the order matters!
80 m_langCombo.SetItemData(2, (DWORD_PTR)-1);
81 // fill the combo box with all available languages
82 EnumSystemLocales(EnumLocalesProc, LCID_SUPPORTED);
84 m_tooltips.Create(this);
86 InitGitSettings(this, true, &m_tooltips);
88 UpdateData(FALSE);
89 return TRUE;
92 static void SelectLanguage(CComboBox &combobox, LONG langueage)
94 for (int i = 0; i < combobox.GetCount(); ++i)
96 if (combobox.GetItemData(i) == langueage)
98 combobox.SetCurSel(i);
99 break;
104 void CSetDialogs3::LoadDataImpl(CAutoConfig& config)
107 CString value;
108 if (config.GetString(PROJECTPROPNAME_PROJECTLANGUAGE, value) == GIT_ENOTFOUND && m_iConfigSource != 0)
109 m_langCombo.SetCurSel(0);
110 else if (value == _T("-1"))
111 m_langCombo.SetCurSel(2);
112 else if (!value.IsEmpty())
114 LPTSTR strEnd;
115 long longValue = _tcstol(value, &strEnd, 0);
116 if (longValue == 0)
118 if (m_iConfigSource == 0)
119 SelectLanguage(m_langCombo, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
120 else
121 m_langCombo.SetCurSel(1);
123 else
124 SelectLanguage(m_langCombo, longValue);
126 else if (m_iConfigSource == 0)
127 SelectLanguage(m_langCombo, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
128 else
129 m_langCombo.SetCurSel(1);
133 m_LogMinSize = _T("");
134 CString value;
135 m_bInheritLogMinSize = (config.GetString(PROJECTPROPNAME_LOGMINSIZE, value) == GIT_ENOTFOUND);
136 if (!value.IsEmpty() || m_iConfigSource == 0)
138 int nMinLogSize = _ttoi(value);
139 m_LogMinSize.Format(L"%d", nMinLogSize);
140 m_bInheritLogMinSize = FALSE;
145 m_Border = _T("");
146 CString value;
147 m_bInheritBorder = (config.GetString(PROJECTPROPNAME_LOGWIDTHLINE, value) == GIT_ENOTFOUND);
148 if (!value.IsEmpty() || m_iConfigSource == 0)
150 int nLogWidthMarker = _ttoi(value);
151 m_Border.Format(L"%d", nLogWidthMarker);
152 m_bInheritBorder = FALSE;
156 GetBoolConfigValueComboBox(config, PROJECTPROPNAME_WARNNOSIGNEDOFFBY, m_cWarnNoSignedOffBy);
158 m_bInheritIconFile = (config.GetString(PROJECTPROPNAME_ICON, m_iconFile) == GIT_ENOTFOUND);
160 m_bNeedSave = false;
161 SetModified(FALSE);
162 UpdateData(FALSE);
165 BOOL CSetDialogs3::SafeDataImpl(CAutoConfig& config)
167 if (m_langCombo.GetCurSel() == 2) // disable
169 if (!Save(config, PROJECTPROPNAME_PROJECTLANGUAGE, L"-1"))
170 return FALSE;
172 else if (m_langCombo.GetCurSel() == 0) // inherit
174 if (!Save(config, PROJECTPROPNAME_PROJECTLANGUAGE, L"", true))
175 return FALSE;
177 else
179 CString value;
180 char numBuf[20] = { 0 };
181 sprintf_s(numBuf, "%ld", m_langCombo.GetItemData(m_langCombo.GetCurSel()));
182 if (!Save(config, PROJECTPROPNAME_PROJECTLANGUAGE, (CString)numBuf))
183 return FALSE;
186 if (!Save(config, PROJECTPROPNAME_LOGMINSIZE, m_LogMinSize, m_bInheritLogMinSize == TRUE))
187 return FALSE;
189 if (!Save(config, PROJECTPROPNAME_LOGWIDTHLINE, m_Border, m_bInheritBorder == TRUE))
190 return FALSE;
193 CString value;
194 m_cWarnNoSignedOffBy.GetWindowText(value);
195 if (!Save(config, PROJECTPROPNAME_WARNNOSIGNEDOFFBY, value, value.IsEmpty()))
196 return FALSE;
199 if (!Save(config, PROJECTPROPNAME_ICON, m_iconFile, m_bInheritIconFile == TRUE))
200 return FALSE;
202 return TRUE;
205 BOOL CSetDialogs3::PreTranslateMessage(MSG* pMsg)
207 m_tooltips.RelayEvent(pMsg);
208 return ISettingsPropPage::PreTranslateMessage(pMsg);
211 void CSetDialogs3::EnDisableControls()
213 GetDlgItem(IDC_LOGMINSIZE)->SendMessage(EM_SETREADONLY, m_iConfigSource == 0, 0);
214 GetDlgItem(IDC_BORDER)->SendMessage(EM_SETREADONLY, m_iConfigSource == 0, 0);
215 GetDlgItem(IDC_LANGCOMBO)->EnableWindow(m_iConfigSource != 0);
216 GetDlgItem(IDC_WARN_NO_SIGNED_OFF_BY)->EnableWindow(m_iConfigSource != 0);
217 GetDlgItem(IDC_COMBO_SETTINGS_SAFETO)->EnableWindow(m_iConfigSource != 0);
218 GetDlgItem(IDC_ICONFILE)->SendMessage(EM_SETREADONLY, m_iConfigSource == 0, 0);
219 GetDlgItem(IDC_ICONFILE_BROWSE)->EnableWindow(m_iConfigSource != 0 && !m_bInheritIconFile);
220 GetDlgItem(IDC_CHECK_INHERIT_LIMIT)->EnableWindow(m_iConfigSource != 0);
221 GetDlgItem(IDC_CHECK_INHERIT_BORDER)->EnableWindow(m_iConfigSource != 0);
222 GetDlgItem(IDC_CHECK_INHERIT_ICONPATH)->EnableWindow(m_iConfigSource != 0);
224 GetDlgItem(IDC_LOGMINSIZE)->EnableWindow(!m_bInheritLogMinSize);
225 GetDlgItem(IDC_BORDER)->EnableWindow(!m_bInheritBorder);
226 GetDlgItem(IDC_ICONFILE)->EnableWindow(!m_bInheritIconFile);
227 UpdateData(FALSE);
230 void CSetDialogs3::OnChange()
232 UpdateData();
233 EnDisableControls();
234 m_bNeedSave = true;
235 SetModified();
238 void CSetDialogs3::OnBnClickedIconfileBrowse()
240 UpdateData(TRUE);
241 CString currentDir = g_Git.m_CurrentDir + (g_Git.m_CurrentDir.Right(1) == _T("\\") ? _T("") : _T("\\"));
242 CString iconFile = m_iconFile;
243 if (!(iconFile.Mid(1, 1) == _T(":") || iconFile.Left(1) == _T("\\")))
244 iconFile = currentDir + iconFile;
245 iconFile.Replace('/', '\\');
246 CFileDialog dlg(FALSE, _T(""), iconFile, OFN_FILEMUSTEXIST, CString(MAKEINTRESOURCE(IDS_ICONFILEFILTER)));
248 INT_PTR ret = dlg.DoModal();
249 SetCurrentDirectory(g_Git.m_CurrentDir);
250 if (ret == IDOK)
252 CString iconFile = dlg.GetPathName();
253 if (iconFile.Left(currentDir.GetLength()) == currentDir)
254 iconFile = iconFile.Mid(currentDir.GetLength());
255 iconFile.Replace('\\', '/');
256 if (m_iconFile != iconFile)
258 m_iconFile = iconFile;
259 m_bNeedSave = true;
260 SetModified();
262 UpdateData(FALSE);
266 BOOL CSetDialogs3::OnApply()
268 if (!m_bNeedSave)
269 return TRUE;
270 UpdateData();
271 if (!SafeData())
272 return FALSE;
273 m_bNeedSave = false;
274 SetModified(FALSE);
275 return ISettingsPropPage::OnApply();
278 BOOL CSetDialogs3::EnumLocalesProc(LPTSTR lpLocaleString)
280 DWORD langID = _tcstol(lpLocaleString, NULL, 16);
282 TCHAR buf[MAX_PATH] = {0};
283 GetLocaleInfo(langID, LOCALE_SNATIVELANGNAME, buf, _countof(buf));
284 CString sLang = buf;
285 GetLocaleInfo(langID, LOCALE_SNATIVECTRYNAME, buf, _countof(buf));
286 if (buf[0])
288 sLang += _T(" (");
289 sLang += buf;
290 sLang += _T(")");
293 int index = m_langCombo.AddString(sLang);
294 m_langCombo.SetItemData(index, langID);
296 return TRUE;