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.
21 #include "TortoiseProc.h"
22 #include "SetMainPage.h"
24 #include "PathUtils.h"
25 #include "DirFileEnum.h"
26 #include "..\version.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
)
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
)
78 BOOL
CSetMainPage::OnInitDialog()
80 ISettingsPropPage::OnInitDialog();
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");
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)
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))
120 DWORD loc
= _wtoi(filename
.Mid(12));
121 GetLocaleInfo(loc
, LOCALE_SNATIVELANGNAME
, buf
, _countof(buf
));
123 GetLocaleInfo(loc
, LOCALE_SNATIVECTRYNAME
, buf
, _countof(buf
));
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
);
145 void CSetMainPage::OnClickVersioncheck()
147 if (m_bCheckNewer
&& CMessageBox::Show(GetSafeHwnd(), IDS_DISABLEUPDATECHECKS
, IDS_APPNAME
, 2, IDI_QUESTION
, IDS_DISABLEUPDATECHECKSBUTTON
, IDS_ABORTBUTTON
) != 1)
149 m_bCheckNewer
= !m_bCheckNewer
;
154 void CSetMainPage::OnModified()
159 void CSetMainPage::OnMsysGitPathModify()
162 if (GuessExtraPath(m_sMsysGitPath
, m_sMsysGitExtranPath
))
167 BOOL
CSetMainPage::OnApply()
171 PerformCommonGitPathCleanup(m_sMsysGitPath
);
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
); }))
189 return ISettingsPropPage::OnApply();
192 void CSetMainPage::OnBnClickedChecknewerbutton()
194 CAppUtils::RunTortoiseGitProc(L
"/command:updatecheck /visible", false, false);
197 void CSetMainPage::OnBrowseDir()
201 if (!SelectFolder(GetSafeHwnd(), m_sMsysGitPath
, m_sMsysGitExtranPath
))
208 void CSetMainPage::OnCheck()
212 CheckGitExe(GetSafeHwnd(), m_sMsysGitPath
, m_sMsysGitExtranPath
, IDC_MSYSGIT_VER
, [&](UINT helpid
) { HtmlHelp(0x20000 + helpid
); });
217 void CSetMainPage::OnBnClickedButtonShowEnv()
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
);
228 ::SetFileAttributes(tempfile
, FILE_ATTRIBUTE_READONLY
);
229 CAppUtils::LaunchAlternativeEditor(tempfile
);
232 void CSetMainPage::OnBnClickedCreatelib()
234 CoInitialize(nullptr);
239 void CSetMainPage::OnBnClickedRunfirststartwizard()
241 CAppUtils::RunTortoiseGitProc(L
"/command:firststart", false, false);