Improve line margin icon for moved lines
[TortoiseGit.git] / src / TortoiseProc / Settings / SetMainPage.cpp
blobfbc267547a2be1f8a13f38eb31e6f0bf80e64f2b
1 // TortoiseGit - a Windows shell extension for easy version control
3 // Copyright (C) 2008-2017 - TortoiseGit
4 // Copyright (C) 2003-2008 - 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.
20 #include "stdafx.h"
21 #include "TortoiseProc.h"
22 #include "SetMainPage.h"
23 #include "AppUtils.h"
24 #include "PathUtils.h"
25 #include "DirFileEnum.h"
26 #include "..\version.h"
27 #include "Git.h"
28 #include "MessageBox.h"
29 #include "GitForWindows.h"
30 #include "Libraries.h"
32 IMPLEMENT_DYNAMIC(CSetMainPage, ISettingsPropPage)
33 CSetMainPage::CSetMainPage()
34 : ISettingsPropPage(CSetMainPage::IDD)
35 , m_bCheckNewer(TRUE)
36 , m_dwLanguage(0)
38 m_regLanguage = CRegDWORD(L"Software\\TortoiseGit\\LanguageID", 1033);
40 m_regMsysGitPath = CRegString(REG_MSYSGIT_PATH);
41 m_regMsysGitExtranPath =CRegString(REG_MSYSGIT_EXTRA_PATH);
43 m_sMsysGitPath = m_regMsysGitPath;
44 m_sMsysGitExtranPath = m_regMsysGitExtranPath;
46 m_regCheckNewer = CRegDWORD(L"Software\\TortoiseGit\\VersionCheck", TRUE);
49 CSetMainPage::~CSetMainPage()
53 void CSetMainPage::DoDataExchange(CDataExchange* pDX)
55 ISettingsPropPage::DoDataExchange(pDX);
56 DDX_Control(pDX, IDC_LANGUAGECOMBO, m_LanguageCombo);
57 m_dwLanguage = (DWORD)m_LanguageCombo.GetItemData(m_LanguageCombo.GetCurSel());
58 DDX_Text(pDX, IDC_MSYSGIT_PATH, m_sMsysGitPath);
59 DDX_Text(pDX, IDC_MSYSGIT_EXTERN_PATH, m_sMsysGitExtranPath);
60 DDX_Check(pDX, IDC_CHECKNEWERVERSION, m_bCheckNewer);
64 BEGIN_MESSAGE_MAP(CSetMainPage, ISettingsPropPage)
65 ON_CBN_SELCHANGE(IDC_LANGUAGECOMBO, OnModified)
66 // ON_EN_CHANGE(IDC_TEMPEXTENSIONS, OnModified)
67 ON_BN_CLICKED(IDC_CHECKNEWERVERSION, OnClickVersioncheck)
68 ON_BN_CLICKED(IDC_CHECKNEWERBUTTON, OnBnClickedChecknewerbutton)
69 ON_BN_CLICKED(IDC_MSYSGIT_BROWSE,OnBrowseDir)
70 ON_BN_CLICKED(IDC_MSYSGIT_CHECK,OnCheck)
71 ON_EN_CHANGE(IDC_MSYSGIT_PATH, OnMsysGitPathModify)
72 ON_EN_CHANGE(IDC_MSYSGIT_EXTERN_PATH, OnModified)
73 ON_BN_CLICKED(IDC_BUTTON_SHOW_ENV, &CSetMainPage::OnBnClickedButtonShowEnv)
74 ON_BN_CLICKED(IDC_CREATELIB, &CSetMainPage::OnBnClickedCreatelib)
75 ON_BN_CLICKED(IDC_RUNFIRSTSTARTWIZARD, &CSetMainPage::OnBnClickedRunfirststartwizard)
76 END_MESSAGE_MAP()
78 BOOL CSetMainPage::OnInitDialog()
80 ISettingsPropPage::OnInitDialog();
82 EnableToolTips();
83 AdjustControlSize(IDC_CHECKNEWERVERSION);
85 m_dwLanguage = m_regLanguage;
86 m_bCheckNewer = m_regCheckNewer;
88 m_tooltips.AddTool(IDC_MSYSGIT_PATH,IDS_MSYSGIT_PATH_TT);
89 m_tooltips.AddTool(IDC_MSYSGIT_EXTERN_PATH, IDS_EXTRAPATH_TT);
90 m_tooltips.AddTool(IDC_CHECKNEWERVERSION, IDS_SETTINGS_CHECKNEWER_TT);
91 m_tooltips.AddTool(IDC_CREATELIB, IDS_SETTINGS_CREATELIB_TT);
93 SHAutoComplete(GetDlgItem(IDC_MSYSGIT_PATH)->m_hWnd, SHACF_FILESYSTEM);
95 // set up the language selecting combobox
96 TCHAR buf[MAX_PATH] = {0};
97 GetLocaleInfo(1033, LOCALE_SNATIVELANGNAME, buf, _countof(buf));
98 m_LanguageCombo.AddString(buf);
99 m_LanguageCombo.SetItemData(0, 1033);
100 CString path = CPathUtils::GetAppParentDirectory();
101 path = path + L"Languages\\";
102 CSimpleFileFind finder(path, L"*.dll");
103 int langcount = 1;
104 while (finder.FindNextFileNoDirectories())
106 CString file = finder.GetFilePath();
107 CString filename = finder.GetFileName();
108 if (CStringUtils::StartsWithI(filename, L"TortoiseProc"))
110 CString sVer = _T(STRPRODUCTVER);
111 sVer = sVer.Left(sVer.ReverseFind('.'));
112 CString sFileVer = CPathUtils::GetVersionFromFile(file);
113 sFileVer = sFileVer.Left(sFileVer.ReverseFind('.'));
114 if (sFileVer.Compare(sVer)!=0)
115 continue;
116 CString sLoc = filename.Mid(12);
117 sLoc = sLoc.Left(sLoc.GetLength()-4); // cut off ".dll"
118 if (CStringUtils::StartsWith(sLoc, L"32") && (sLoc.GetLength() > 5))
119 continue;
120 DWORD loc = _wtoi(filename.Mid(12));
121 GetLocaleInfo(loc, LOCALE_SNATIVELANGNAME, buf, _countof(buf));
122 CString sLang = buf;
123 GetLocaleInfo(loc, LOCALE_SNATIVECTRYNAME, buf, _countof(buf));
124 if (buf[0])
126 sLang += L" (";
127 sLang += buf;
128 sLang += L')';
130 m_LanguageCombo.AddString(sLang);
131 m_LanguageCombo.SetItemData(langcount++, loc);
135 for (int i=0; i<m_LanguageCombo.GetCount(); i++)
137 if (m_LanguageCombo.GetItemData(i) == m_dwLanguage)
138 m_LanguageCombo.SetCurSel(i);
141 UpdateData(FALSE);
142 return TRUE;
145 void CSetMainPage::OnClickVersioncheck()
147 if (m_bCheckNewer && CMessageBox::Show(GetSafeHwnd(), IDS_DISABLEUPDATECHECKS, IDS_APPNAME, 2, IDI_QUESTION, IDS_DISABLEUPDATECHECKSBUTTON, IDS_ABORTBUTTON) != 1)
148 return;
149 m_bCheckNewer = !m_bCheckNewer;
150 UpdateData(FALSE);
151 SetModified();
154 void CSetMainPage::OnModified()
156 SetModified();
159 void CSetMainPage::OnMsysGitPathModify()
161 this->UpdateData();
162 if (GuessExtraPath(m_sMsysGitPath, m_sMsysGitExtranPath))
163 UpdateData(FALSE);
164 SetModified();
167 BOOL CSetMainPage::OnApply()
169 UpdateData();
171 PerformCommonGitPathCleanup(m_sMsysGitPath);
172 UpdateData(FALSE);
174 Store(m_dwLanguage, m_regLanguage);
175 if (m_sMsysGitPath.Compare(CString(m_regMsysGitPath)) ||
176 this->m_sMsysGitExtranPath.Compare(CString(m_regMsysGitExtranPath)))
178 Store(m_sMsysGitPath, m_regMsysGitPath);
179 Store(m_sMsysGitExtranPath, m_regMsysGitExtranPath);
180 m_restart = Restart_Cache;
182 Store(m_bCheckNewer, m_regCheckNewer);
184 // only complete if the msysgit directory is ok
185 if (!CheckGitExe(GetSafeHwnd(), m_sMsysGitPath, m_sMsysGitExtranPath, IDC_MSYSGIT_VER, [&](UINT helpid) { HtmlHelp(0x20000 + helpid); }))
186 return 0;
188 SetModified(FALSE);
189 return ISettingsPropPage::OnApply();
192 void CSetMainPage::OnBnClickedChecknewerbutton()
194 CAppUtils::RunTortoiseGitProc(L"/command:updatecheck /visible", false, false);
197 void CSetMainPage::OnBrowseDir()
199 UpdateData(TRUE);
201 if (!SelectFolder(GetSafeHwnd(), m_sMsysGitPath, m_sMsysGitExtranPath))
202 return;
204 UpdateData(FALSE);
205 SetModified(TRUE);
208 void CSetMainPage::OnCheck()
210 UpdateData(TRUE);
212 CheckGitExe(GetSafeHwnd(), m_sMsysGitPath, m_sMsysGitExtranPath, IDC_MSYSGIT_VER, [&](UINT helpid) { HtmlHelp(0x20000 + helpid); });
214 UpdateData(FALSE);
217 void CSetMainPage::OnBnClickedButtonShowEnv()
219 CString err;
220 CString tempfile=::GetTempFile();
222 CString cmd = L"cmd /c set";
223 if (g_Git.RunLogFile(cmd, tempfile, &err))
225 CMessageBox::Show(GetSafeHwnd(), L"Could not get environment variables:\n" + err, L"TortoiseGit", MB_OK);
226 return;
228 ::SetFileAttributes(tempfile, FILE_ATTRIBUTE_READONLY);
229 CAppUtils::LaunchAlternativeEditor(tempfile);
232 void CSetMainPage::OnBnClickedCreatelib()
234 CoInitialize(nullptr);
235 EnsureGitLibrary();
236 CoUninitialize();
239 void CSetMainPage::OnBnClickedRunfirststartwizard()
241 CAppUtils::RunTortoiseGitProc(L"/command:firststart", false, false);