Fixed issue #387: "Automatically check for newer versions every week" remains disabled
[TortoiseGit.git] / src / TortoiseProc / Settings / SetMainPage.cpp
blob36c6f44c88469168a7a3a48346c15c3070276a36
1 // TortoiseSVN - a Windows shell extension for easy version control
3 // Copyright (C) 2003-2008 - TortoiseSVN
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 "AppUtils.h"
23 #include "PathUtils.h"
24 #include "DirFileEnum.h"
25 #include "SVNProgressDlg.h"
26 #include "..\version.h"
27 #include ".\setmainpage.h"
28 #include "Git.h"
29 #include "MessageBox.h"
30 #include "CommonResource.h"
31 #include "GitConfig.h"
32 #include "BrowseFolder.h"
34 IMPLEMENT_DYNAMIC(CSetMainPage, ISettingsPropPage)
35 CSetMainPage::CSetMainPage()
36 : ISettingsPropPage(CSetMainPage::IDD)
37 , m_sMsysGitPath(_T(""))
38 , m_bCheckNewer(TRUE)
39 , m_bLastCommitTime(FALSE)
40 , m_bUseDotNetHack(FALSE)
42 m_regLanguage = CRegDWORD(_T("Software\\TortoiseGit\\LanguageID"), 1033);
43 CString temp=CRegString(REG_MSYSGIT_INSTALL,_T(""),FALSE,HKEY_LOCAL_MACHINE);;
44 if(!temp.IsEmpty())
45 temp+=_T("bin");
46 m_regMsysGitPath = CRegString(REG_MSYSGIT_PATH,temp,FALSE);
47 m_regCheckNewer = CRegDWORD(_T("Software\\TortoiseGit\\CheckNewer"), TRUE);
48 m_regLastCommitTime = CRegString(_T("Software\\Tigris.org\\Subversion\\Config\\miscellany\\use-commit-times"), _T(""));
49 if ((GetEnvironmentVariable(_T("SVN_ASP_DOT_NET_HACK"), NULL, 0)==0)&&(GetLastError()==ERROR_ENVVAR_NOT_FOUND))
50 m_bUseDotNetHack = false;
51 else
52 m_bUseDotNetHack = true;
55 CSetMainPage::~CSetMainPage()
59 void CSetMainPage::DoDataExchange(CDataExchange* pDX)
61 ISettingsPropPage::DoDataExchange(pDX);
62 DDX_Control(pDX, IDC_LANGUAGECOMBO, m_LanguageCombo);
63 m_dwLanguage = (DWORD)m_LanguageCombo.GetItemData(m_LanguageCombo.GetCurSel());
64 DDX_Text(pDX, IDC_MSYSGIT_PATH, m_sMsysGitPath);
65 DDX_Check(pDX, IDC_CHECKNEWERVERSION, m_bCheckNewer);
66 // DDX_Check(pDX, IDC_COMMITFILETIMES, m_bLastCommitTime);
67 // DDX_Check(pDX, IDC_ASPDOTNETHACK, m_bUseDotNetHack);
71 BEGIN_MESSAGE_MAP(CSetMainPage, ISettingsPropPage)
72 ON_CBN_SELCHANGE(IDC_LANGUAGECOMBO, OnModified)
73 // ON_EN_CHANGE(IDC_TEMPEXTENSIONS, OnModified)
74 ON_BN_CLICKED(IDC_EDITCONFIG, OnBnClickedEditconfig)
75 ON_BN_CLICKED(IDC_CHECKNEWERVERSION, OnModified)
76 ON_BN_CLICKED(IDC_CHECKNEWERBUTTON, OnBnClickedChecknewerbutton)
77 ON_BN_CLICKED(IDC_COMMITFILETIMES, OnModified)
78 ON_BN_CLICKED(IDC_SOUNDS, OnBnClickedSounds)
79 ON_BN_CLICKED(IDC_ASPDOTNETHACK, OnASPHACK)
80 ON_BN_CLICKED(IDC_MSYSGIT_BROWSE,OnBrowseDir)
81 ON_BN_CLICKED(IDC_MSYSGIT_CHECK,OnCheck)
82 ON_EN_CHANGE(IDC_MSYSGIT_PATH, OnModified)
83 END_MESSAGE_MAP()
85 BOOL CSetMainPage::OnInitDialog()
87 ISettingsPropPage::OnInitDialog();
89 // disable features that have not yet been implemented
90 GetDlgItem(IDC_SOUNDS)->EnableWindow( FALSE );
91 GetDlgItem(IDC_SOUNDS_TEXT)->EnableWindow( FALSE );
93 EnableToolTips();
95 m_sMsysGitPath = m_regMsysGitPath;
96 m_dwLanguage = m_regLanguage;
97 m_bCheckNewer = m_regCheckNewer;
99 CString temp;
100 temp = m_regLastCommitTime;
101 m_bLastCommitTime = (temp.CompareNoCase(_T("yes"))==0);
103 m_tooltips.Create(this);
104 m_tooltips.AddTool(IDC_MSYSGIT_PATH,IDS_MSYSGIT_PATH_TT);
105 m_tooltips.AddTool(IDC_CHECKNEWERVERSION, IDS_SETTINGS_CHECKNEWER_TT);
106 //m_tooltips.AddTool(IDC_COMMITFILETIMES, IDS_SETTINGS_COMMITFILETIMES_TT);
107 //m_tooltips.AddTool(IDC_ASPDOTNETHACK, IDS_SETTINGS_DOTNETHACK_TT);
109 // set up the language selecting combobox
110 SHAutoComplete(GetDlgItem(IDC_MSYSGIT_PATH)->m_hWnd, SHACF_FILESYSTEM);
112 TCHAR buf[MAX_PATH];
113 GetLocaleInfo(1033, LOCALE_SNATIVELANGNAME, buf, sizeof(buf)/sizeof(TCHAR));
114 m_LanguageCombo.AddString(buf);
115 m_LanguageCombo.SetItemData(0, 1033);
116 CString path = CPathUtils::GetAppParentDirectory();
117 path = path + _T("Languages\\");
118 CSimpleFileFind finder(path, _T("*.dll"));
119 int langcount = 1;
120 while (finder.FindNextFileNoDirectories())
122 CString file = finder.GetFilePath();
123 CString filename = finder.GetFileName();
124 if (filename.Left(12).CompareNoCase(_T("TortoiseProc"))==0)
126 CString sVer = _T(STRPRODUCTVER);
127 sVer = sVer.Left(sVer.ReverseFind(','));
128 CString sFileVer = CPathUtils::GetVersionFromFile(file);
129 sFileVer = sFileVer.Left(sFileVer.ReverseFind(','));
130 if (sFileVer.Compare(sVer)!=0)
131 continue;
132 DWORD loc = _tstoi(filename.Mid(12));
133 TCHAR buf[MAX_PATH];
134 GetLocaleInfo(loc, LOCALE_SNATIVELANGNAME, buf, sizeof(buf)/sizeof(TCHAR));
135 m_LanguageCombo.AddString(buf);
136 m_LanguageCombo.SetItemData(langcount++, loc);
140 for (int i=0; i<m_LanguageCombo.GetCount(); i++)
142 if (m_LanguageCombo.GetItemData(i) == m_dwLanguage)
143 m_LanguageCombo.SetCurSel(i);
146 UpdateData(FALSE);
147 return TRUE;
150 BOOL CSetMainPage::PreTranslateMessage(MSG* pMsg)
152 m_tooltips.RelayEvent(pMsg);
153 return ISettingsPropPage::PreTranslateMessage(pMsg);
156 void CSetMainPage::OnModified()
158 SetModified();
161 void CSetMainPage::OnASPHACK()
163 if (CMessageBox::Show(m_hWnd, IDS_SETTINGS_ASPHACKWARNING, IDS_APPNAME, MB_ICONWARNING|MB_YESNO) == IDYES)
165 SetModified();
167 else
169 UpdateData();
170 m_bUseDotNetHack = !m_bUseDotNetHack;
171 UpdateData(FALSE);
175 BOOL CSetMainPage::OnApply()
177 UpdateData();
178 Store (m_dwLanguage, m_regLanguage);
179 if (m_sMsysGitPath.Compare(CString(m_regMsysGitPath)))
181 Store (m_sMsysGitPath, m_regMsysGitPath);
182 m_restart = Restart_Cache;
184 Store (m_bCheckNewer, m_regCheckNewer);
185 Store ((m_bLastCommitTime ? _T("yes") : _T("no")), m_regLastCommitTime);
187 CRegString asphack_local(_T("System\\CurrentControlSet\\Control\\Session Manager\\Environment\\SVN_ASP_DOT_NET_HACK"), _T(""), FALSE, HKEY_LOCAL_MACHINE);
188 CRegString asphack_user(_T("Environment\\SVN_ASP_DOT_NET_HACK"));
189 if (m_bUseDotNetHack)
191 asphack_local = _T("*");
192 if (asphack_local.LastError)
193 asphack_user = _T("*");
194 if ((GetEnvironmentVariable(_T("SVN_ASP_DOT_NET_HACK"), NULL, 0)==0)&&(GetLastError()==ERROR_ENVVAR_NOT_FOUND))
196 DWORD_PTR dwRet = 0;
197 SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)_T("Environment"), SMTO_ABORTIFHUNG, 1000, &dwRet);
198 m_restart = Restart_System;
201 else
203 asphack_local.removeValue();
204 asphack_user.removeValue();
205 if (GetEnvironmentVariable(_T("SVN_ASP_DOT_NET_HACK"), NULL, 0)!=0)
207 DWORD_PTR dwRet = 0;
208 SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)_T("Environment"), SMTO_ABORTIFHUNG, 1000, &dwRet);
209 m_restart = Restart_System;
212 // only complete if the msysgit directory is ok
213 if(g_Git.CheckMsysGitDir())
215 SetModified(FALSE);
216 return ISettingsPropPage::OnApply();
218 else
220 CMessageBox::Show(NULL,_T("Msys Git Install Path Error"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);
221 return 0;
225 void CSetMainPage::OnBnClickedEditconfig()
227 #if 0
228 TCHAR buf[MAX_PATH];
229 SVN::EnsureConfigFile();
230 SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, buf);
231 CString path = buf;
232 path += _T("\\Subversion\\config");
233 CAppUtils::StartTextViewer(path);
234 #endif
237 void CSetMainPage::OnBnClickedChecknewerbutton()
239 TCHAR com[MAX_PATH+100];
240 GetModuleFileName(NULL, com, MAX_PATH);
241 _tcscat_s(com, MAX_PATH+100, _T(" /command:updatecheck /visible"));
243 CAppUtils::LaunchApplication(com, 0, false);
246 void CSetMainPage::OnBnClickedSounds()
248 OSVERSIONINFOEX inf;
249 SecureZeroMemory(&inf, sizeof(OSVERSIONINFOEX));
250 inf.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
251 GetVersionEx((OSVERSIONINFO *)&inf);
252 WORD fullver = MAKEWORD(inf.dwMinorVersion, inf.dwMajorVersion);
254 if (fullver >= 0x0600)
255 CAppUtils::LaunchApplication(_T("RUNDLL32 Shell32,Control_RunDLL mmsys.cpl,,2"), NULL, false);
256 else
257 CAppUtils::LaunchApplication(_T("RUNDLL32 Shell32,Control_RunDLL mmsys.cpl,,1"), NULL, false);
260 void CSetMainPage::OnBrowseDir()
262 CBrowseFolder browseFolder;
263 browseFolder.m_style = BIF_EDITBOX | BIF_NEWDIALOGSTYLE | BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
264 CString dir;
265 this->UpdateData(TRUE);
266 dir=this->m_sMsysGitPath;
267 if (browseFolder.Show(GetSafeHwnd(), dir) == CBrowseFolder::OK)
269 m_sMsysGitPath=dir;
270 Store (m_sMsysGitPath, m_regMsysGitPath);
271 this->UpdateData(FALSE);
273 SetModified(TRUE);
276 void CSetMainPage::OnCheck()
278 if(g_Git.CheckMsysGitDir())
280 CString cmd;
281 CString out;
282 cmd=_T("git.exe --version");
283 g_Git.Run(cmd,&out,CP_UTF8);
284 this->GetDlgItem(IDC_MSYSGIT_VER)->SetWindowText(out);
285 }else
287 CMessageBox::Show(NULL,_T("Msys Git Install Path Error"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);