1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2013-2016 - 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.
20 #include "TortoiseProc.h"
21 #include "SetMainPage.h"
22 #include "ProjectProperties.h"
23 #include "SetDialogs3.h"
26 static std::vector
<DWORD
> g_langs
;
28 IMPLEMENT_DYNAMIC(CSetDialogs3
, ISettingsPropPage
)
29 CSetDialogs3::CSetDialogs3()
30 : ISettingsPropPage(CSetDialogs3::IDD
)
32 , m_bInheritLogMinSize(FALSE
)
33 , m_bInheritBorder(FALSE
)
34 , m_bInheritIconFile(FALSE
)
38 CSetDialogs3::~CSetDialogs3()
42 void CSetDialogs3::DoDataExchange(CDataExchange
* pDX
)
44 ISettingsPropPage::DoDataExchange(pDX
);
45 DDX_Control(pDX
, IDC_LANGCOMBO
, m_langCombo
);
46 DDX_Text(pDX
, IDC_LOGMINSIZE
, m_LogMinSize
);
47 DDX_Text(pDX
, IDC_BORDER
, m_Border
);
48 DDX_Text(pDX
, IDC_ICONFILE
, m_iconFile
);
49 DDX_Control(pDX
, IDC_WARN_NO_SIGNED_OFF_BY
, m_cWarnNoSignedOffBy
);
50 DDX_Check(pDX
, IDC_CHECK_INHERIT_LIMIT
, m_bInheritLogMinSize
);
51 DDX_Check(pDX
, IDC_CHECK_INHERIT_BORDER
, m_bInheritBorder
);
52 DDX_Check(pDX
, IDC_CHECK_INHERIT_KEYID
, m_bInheritIconFile
);
56 BEGIN_MESSAGE_MAP(CSetDialogs3
, ISettingsPropPage
)
57 GITSETTINGS_RADIO_EVENT
58 ON_CBN_SELCHANGE(IDC_LANGCOMBO
, &OnChange
)
59 ON_CBN_SELCHANGE(IDC_WARN_NO_SIGNED_OFF_BY
, &OnChange
)
60 ON_EN_CHANGE(IDC_LOGMINSIZE
, &OnChange
)
61 ON_EN_CHANGE(IDC_BORDER
, &OnChange
)
62 ON_EN_CHANGE(IDC_ICONFILE
, &OnChange
)
63 ON_BN_CLICKED(IDC_CHECK_INHERIT_LIMIT
, &OnChange
)
64 ON_BN_CLICKED(IDC_CHECK_INHERIT_BORDER
, &OnChange
)
65 ON_BN_CLICKED(IDC_CHECK_INHERIT_KEYID
, &OnChange
)
66 ON_BN_CLICKED(IDC_ICONFILE_BROWSE
, &OnBnClickedIconfileBrowse
)
69 // CSetDialogs2 message handlers
70 BOOL
CSetDialogs3::OnInitDialog()
72 ISettingsPropPage::OnInitDialog();
74 AdjustControlSize(IDC_CHECK_INHERIT_LIMIT
);
75 AdjustControlSize(IDC_CHECK_INHERIT_BORDER
);
76 AdjustControlSize(IDC_CHECK_INHERIT_KEYID
);
77 GITSETTINGS_ADJUSTCONTROLSIZE
79 AddTrueFalseToComboBox(m_cWarnNoSignedOffBy
);
81 m_langCombo
.AddString(_T(""));
82 m_langCombo
.SetItemData(0, (DWORD_PTR
)-2);
83 m_langCombo
.AddString(_T("(auto)")); // do not translate, the order matters!
84 m_langCombo
.SetItemData(1, 0);
85 m_langCombo
.AddString(_T("(disable)")); // do not translate, the order matters!
86 m_langCombo
.SetItemData(2, (DWORD_PTR
)-1);
87 // fill the combo box with all available languages
89 EnumSystemLocales(EnumLocalesProc
, LCID_SUPPORTED
);
90 for (DWORD langID
: g_langs
)
91 AddLangToCombo(langID
);
93 InitGitSettings(this, true, &m_tooltips
);
99 static void SelectLanguage(CComboBox
&combobox
, LONG langueage
)
101 for (int i
= 0; i
< combobox
.GetCount(); ++i
)
103 if (combobox
.GetItemData(i
) == (DWORD
)langueage
)
105 combobox
.SetCurSel(i
);
111 void CSetDialogs3::LoadDataImpl(CAutoConfig
& config
)
115 if (config
.GetString(PROJECTPROPNAME_PROJECTLANGUAGE
, value
) == GIT_ENOTFOUND
&& m_iConfigSource
!= 0)
116 m_langCombo
.SetCurSel(0);
117 else if (value
== _T("-1"))
118 m_langCombo
.SetCurSel(2);
119 else if (!value
.IsEmpty())
122 long longValue
= _tcstol(value
, &strEnd
, 0);
125 if (m_iConfigSource
== CFG_SRC_EFFECTIVE
)
126 SelectLanguage(m_langCombo
, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
128 m_langCombo
.SetCurSel(1);
131 SelectLanguage(m_langCombo
, longValue
);
133 else if (m_iConfigSource
== CFG_SRC_EFFECTIVE
)
134 SelectLanguage(m_langCombo
, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
136 m_langCombo
.SetCurSel(1);
140 m_LogMinSize
.Empty();
142 m_bInheritLogMinSize
= (config
.GetString(PROJECTPROPNAME_LOGMINSIZE
, value
) == GIT_ENOTFOUND
);
143 if (!value
.IsEmpty() || m_iConfigSource
== CFG_SRC_EFFECTIVE
)
145 int nMinLogSize
= _ttoi(value
);
146 m_LogMinSize
.Format(L
"%d", nMinLogSize
);
147 m_bInheritLogMinSize
= FALSE
;
154 m_bInheritBorder
= (config
.GetString(PROJECTPROPNAME_LOGWIDTHLINE
, value
) == GIT_ENOTFOUND
);
155 if (!value
.IsEmpty() || m_iConfigSource
== CFG_SRC_EFFECTIVE
)
157 int nLogWidthMarker
= _ttoi(value
);
158 m_Border
.Format(L
"%d", nLogWidthMarker
);
159 m_bInheritBorder
= FALSE
;
163 GetBoolConfigValueComboBox(config
, PROJECTPROPNAME_WARNNOSIGNEDOFFBY
, m_cWarnNoSignedOffBy
);
165 m_bInheritIconFile
= (config
.GetString(PROJECTPROPNAME_ICON
, m_iconFile
) == GIT_ENOTFOUND
);
172 BOOL
CSetDialogs3::SafeDataImpl(CAutoConfig
& config
)
174 if (m_langCombo
.GetCurSel() == 2) // disable
176 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, L
"-1"))
179 else if (m_langCombo
.GetCurSel() == 0) // inherit
181 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, L
"", true))
187 char numBuf
[20] = { 0 };
188 sprintf_s(numBuf
, "%lu", (DWORD
)m_langCombo
.GetItemData(m_langCombo
.GetCurSel()));
189 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, (CString
)numBuf
))
193 if (!Save(config
, PROJECTPROPNAME_LOGMINSIZE
, m_LogMinSize
, m_bInheritLogMinSize
== TRUE
))
196 if (!Save(config
, PROJECTPROPNAME_LOGWIDTHLINE
, m_Border
, m_bInheritBorder
== TRUE
))
201 m_cWarnNoSignedOffBy
.GetWindowText(value
);
202 if (!Save(config
, PROJECTPROPNAME_WARNNOSIGNEDOFFBY
, value
, value
.IsEmpty()))
206 if (!Save(config
, PROJECTPROPNAME_ICON
, m_iconFile
, m_bInheritIconFile
== TRUE
))
212 void CSetDialogs3::EnDisableControls()
214 GetDlgItem(IDC_LOGMINSIZE
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== CFG_SRC_EFFECTIVE
, 0);
215 GetDlgItem(IDC_BORDER
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== CFG_SRC_EFFECTIVE
, 0);
216 GetDlgItem(IDC_LANGCOMBO
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
217 GetDlgItem(IDC_WARN_NO_SIGNED_OFF_BY
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
218 GetDlgItem(IDC_COMBO_SETTINGS_SAFETO
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
219 GetDlgItem(IDC_ICONFILE
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== CFG_SRC_EFFECTIVE
, 0);
220 GetDlgItem(IDC_ICONFILE_BROWSE
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
&& !m_bInheritIconFile
);
221 GetDlgItem(IDC_CHECK_INHERIT_LIMIT
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
222 GetDlgItem(IDC_CHECK_INHERIT_BORDER
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
223 GetDlgItem(IDC_CHECK_INHERIT_ICONPATH
)->EnableWindow(m_iConfigSource
!= CFG_SRC_EFFECTIVE
);
225 GetDlgItem(IDC_LOGMINSIZE
)->EnableWindow(!m_bInheritLogMinSize
);
226 GetDlgItem(IDC_BORDER
)->EnableWindow(!m_bInheritBorder
);
227 GetDlgItem(IDC_ICONFILE
)->EnableWindow(!m_bInheritIconFile
);
231 void CSetDialogs3::OnChange()
239 void CSetDialogs3::OnBnClickedIconfileBrowse()
242 CString currentDir
= g_Git
.m_CurrentDir
+ (g_Git
.m_CurrentDir
.Right(1) == _T("\\") ? _T("") : _T("\\"));
243 CString iconFile
= m_iconFile
;
244 if (!(iconFile
.Mid(1, 1) == L
":" || CStringUtils::StartsWith(iconFile
, L
"\\")))
245 iconFile
= currentDir
+ iconFile
;
246 iconFile
.Replace('/', '\\');
247 if (!CAppUtils::FileOpenSave(iconFile
, nullptr, 0, IDS_ICONFILEFILTER
, true, GetSafeHwnd()))
250 if (CStringUtils::StartsWith(iconFile
, currentDir
))
251 iconFile
= iconFile
.Mid(currentDir
.GetLength());
252 iconFile
.Replace('\\', '/');
253 if (m_iconFile
!= iconFile
)
255 m_iconFile
= iconFile
;
262 BOOL
CSetDialogs3::OnApply()
271 return ISettingsPropPage::OnApply();
274 BOOL
CSetDialogs3::EnumLocalesProc(LPTSTR lpLocaleString
)
276 DWORD langID
= _tcstol(lpLocaleString
, nullptr, 16);
277 g_langs
.push_back(langID
);
281 void CSetDialogs3::AddLangToCombo(DWORD langID
)
283 TCHAR buf
[MAX_PATH
] = {0};
284 GetLocaleInfo(langID
, LOCALE_SNATIVELANGNAME
, buf
, _countof(buf
));
286 GetLocaleInfo(langID
, LOCALE_SNATIVECTRYNAME
, buf
, _countof(buf
));
294 int index
= m_langCombo
.AddString(sLang
);
295 m_langCombo
.SetItemData(index
, langID
);