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.
20 #include "TortoiseProc.h"
21 #include "SetMainPage.h"
22 #include "ProjectProperties.h"
23 #include "SetDialogs3.h"
25 static std::vector
<DWORD
> g_langs
;
27 IMPLEMENT_DYNAMIC(CSetDialogs3
, ISettingsPropPage
)
28 CSetDialogs3::CSetDialogs3()
29 : ISettingsPropPage(CSetDialogs3::IDD
)
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
);
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
)
68 // CSetDialogs2 message handlers
69 BOOL
CSetDialogs3::OnInitDialog()
71 ISettingsPropPage::OnInitDialog();
73 AdjustControlSize(IDC_CHECK_INHERIT_LIMIT
);
74 AdjustControlSize(IDC_CHECK_INHERIT_BORDER
);
75 AdjustControlSize(IDC_CHECK_INHERIT_KEYID
);
76 GITSETTINGS_ADJUSTCONTROLSIZE
78 AddTrueFalseToComboBox(m_cWarnNoSignedOffBy
);
80 m_langCombo
.AddString(_T(""));
81 m_langCombo
.SetItemData(0, (DWORD_PTR
)-2);
82 m_langCombo
.AddString(_T("(auto)")); // do not translate, the order matters!
83 m_langCombo
.SetItemData(1, 0);
84 m_langCombo
.AddString(_T("(disable)")); // do not translate, the order matters!
85 m_langCombo
.SetItemData(2, (DWORD_PTR
)-1);
86 // fill the combo box with all available languages
88 EnumSystemLocales(EnumLocalesProc
, LCID_SUPPORTED
);
89 for (DWORD langID
: g_langs
)
90 AddLangToCombo(langID
);
92 m_tooltips
.Create(this);
94 InitGitSettings(this, true, &m_tooltips
);
100 static void SelectLanguage(CComboBox
&combobox
, LONG langueage
)
102 for (int i
= 0; i
< combobox
.GetCount(); ++i
)
104 if (combobox
.GetItemData(i
) == langueage
)
106 combobox
.SetCurSel(i
);
112 void CSetDialogs3::LoadDataImpl(CAutoConfig
& config
)
116 if (config
.GetString(PROJECTPROPNAME_PROJECTLANGUAGE
, value
) == GIT_ENOTFOUND
&& m_iConfigSource
!= 0)
117 m_langCombo
.SetCurSel(0);
118 else if (value
== _T("-1"))
119 m_langCombo
.SetCurSel(2);
120 else if (!value
.IsEmpty())
123 long longValue
= _tcstol(value
, &strEnd
, 0);
126 if (m_iConfigSource
== 0)
127 SelectLanguage(m_langCombo
, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
129 m_langCombo
.SetCurSel(1);
132 SelectLanguage(m_langCombo
, longValue
);
134 else if (m_iConfigSource
== 0)
135 SelectLanguage(m_langCombo
, CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033));
137 m_langCombo
.SetCurSel(1);
141 m_LogMinSize
= _T("");
143 m_bInheritLogMinSize
= (config
.GetString(PROJECTPROPNAME_LOGMINSIZE
, value
) == GIT_ENOTFOUND
);
144 if (!value
.IsEmpty() || m_iConfigSource
== 0)
146 int nMinLogSize
= _ttoi(value
);
147 m_LogMinSize
.Format(L
"%d", nMinLogSize
);
148 m_bInheritLogMinSize
= FALSE
;
155 m_bInheritBorder
= (config
.GetString(PROJECTPROPNAME_LOGWIDTHLINE
, value
) == GIT_ENOTFOUND
);
156 if (!value
.IsEmpty() || m_iConfigSource
== 0)
158 int nLogWidthMarker
= _ttoi(value
);
159 m_Border
.Format(L
"%d", nLogWidthMarker
);
160 m_bInheritBorder
= FALSE
;
164 GetBoolConfigValueComboBox(config
, PROJECTPROPNAME_WARNNOSIGNEDOFFBY
, m_cWarnNoSignedOffBy
);
166 m_bInheritIconFile
= (config
.GetString(PROJECTPROPNAME_ICON
, m_iconFile
) == GIT_ENOTFOUND
);
173 BOOL
CSetDialogs3::SafeDataImpl(CAutoConfig
& config
)
175 if (m_langCombo
.GetCurSel() == 2) // disable
177 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, L
"-1"))
180 else if (m_langCombo
.GetCurSel() == 0) // inherit
182 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, L
"", true))
188 char numBuf
[20] = { 0 };
189 sprintf_s(numBuf
, "%ld", m_langCombo
.GetItemData(m_langCombo
.GetCurSel()));
190 if (!Save(config
, PROJECTPROPNAME_PROJECTLANGUAGE
, (CString
)numBuf
))
194 if (!Save(config
, PROJECTPROPNAME_LOGMINSIZE
, m_LogMinSize
, m_bInheritLogMinSize
== TRUE
))
197 if (!Save(config
, PROJECTPROPNAME_LOGWIDTHLINE
, m_Border
, m_bInheritBorder
== TRUE
))
202 m_cWarnNoSignedOffBy
.GetWindowText(value
);
203 if (!Save(config
, PROJECTPROPNAME_WARNNOSIGNEDOFFBY
, value
, value
.IsEmpty()))
207 if (!Save(config
, PROJECTPROPNAME_ICON
, m_iconFile
, m_bInheritIconFile
== TRUE
))
213 BOOL
CSetDialogs3::PreTranslateMessage(MSG
* pMsg
)
215 m_tooltips
.RelayEvent(pMsg
);
216 return ISettingsPropPage::PreTranslateMessage(pMsg
);
219 void CSetDialogs3::EnDisableControls()
221 GetDlgItem(IDC_LOGMINSIZE
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== 0, 0);
222 GetDlgItem(IDC_BORDER
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== 0, 0);
223 GetDlgItem(IDC_LANGCOMBO
)->EnableWindow(m_iConfigSource
!= 0);
224 GetDlgItem(IDC_WARN_NO_SIGNED_OFF_BY
)->EnableWindow(m_iConfigSource
!= 0);
225 GetDlgItem(IDC_COMBO_SETTINGS_SAFETO
)->EnableWindow(m_iConfigSource
!= 0);
226 GetDlgItem(IDC_ICONFILE
)->SendMessage(EM_SETREADONLY
, m_iConfigSource
== 0, 0);
227 GetDlgItem(IDC_ICONFILE_BROWSE
)->EnableWindow(m_iConfigSource
!= 0 && !m_bInheritIconFile
);
228 GetDlgItem(IDC_CHECK_INHERIT_LIMIT
)->EnableWindow(m_iConfigSource
!= 0);
229 GetDlgItem(IDC_CHECK_INHERIT_BORDER
)->EnableWindow(m_iConfigSource
!= 0);
230 GetDlgItem(IDC_CHECK_INHERIT_ICONPATH
)->EnableWindow(m_iConfigSource
!= 0);
232 GetDlgItem(IDC_LOGMINSIZE
)->EnableWindow(!m_bInheritLogMinSize
);
233 GetDlgItem(IDC_BORDER
)->EnableWindow(!m_bInheritBorder
);
234 GetDlgItem(IDC_ICONFILE
)->EnableWindow(!m_bInheritIconFile
);
238 void CSetDialogs3::OnChange()
246 void CSetDialogs3::OnBnClickedIconfileBrowse()
249 CString currentDir
= g_Git
.m_CurrentDir
+ (g_Git
.m_CurrentDir
.Right(1) == _T("\\") ? _T("") : _T("\\"));
250 CString iconFile
= m_iconFile
;
251 if (!(iconFile
.Mid(1, 1) == _T(":") || iconFile
.Left(1) == _T("\\")))
252 iconFile
= currentDir
+ iconFile
;
253 iconFile
.Replace('/', '\\');
254 CFileDialog
dlg(FALSE
, _T(""), iconFile
, OFN_FILEMUSTEXIST
, CString(MAKEINTRESOURCE(IDS_ICONFILEFILTER
)));
256 INT_PTR ret
= dlg
.DoModal();
257 SetCurrentDirectory(g_Git
.m_CurrentDir
);
260 CString iconFile
= dlg
.GetPathName();
261 if (iconFile
.Left(currentDir
.GetLength()) == currentDir
)
262 iconFile
= iconFile
.Mid(currentDir
.GetLength());
263 iconFile
.Replace('\\', '/');
264 if (m_iconFile
!= iconFile
)
266 m_iconFile
= iconFile
;
274 BOOL
CSetDialogs3::OnApply()
283 return ISettingsPropPage::OnApply();
286 BOOL
CSetDialogs3::EnumLocalesProc(LPTSTR lpLocaleString
)
288 DWORD langID
= _tcstol(lpLocaleString
, NULL
, 16);
289 g_langs
.push_back(langID
);
293 void CSetDialogs3::AddLangToCombo(DWORD langID
)
295 TCHAR buf
[MAX_PATH
] = {0};
296 GetLocaleInfo(langID
, LOCALE_SNATIVELANGNAME
, buf
, _countof(buf
));
298 GetLocaleInfo(langID
, LOCALE_SNATIVECTRYNAME
, buf
, _countof(buf
));
306 int index
= m_langCombo
.AddString(sLang
);
307 m_langCombo
.SetItemData(index
, langID
);