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.
20 #include "TortoiseProc.h"
21 #include "SetMainPage.h"
23 #include "PathUtils.h"
24 #include "DirFileEnum.h"
25 #include "SVNProgressDlg.h"
26 #include "..\version.h"
27 #include ".\setmainpage.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(""))
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
);;
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;
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
)
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
);
95 m_sMsysGitPath
= m_regMsysGitPath
;
96 m_dwLanguage
= m_regLanguage
;
97 m_bCheckNewer
= m_regCheckNewer
;
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
);
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"));
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)
132 DWORD loc
= _tstoi(filename
.Mid(12));
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
);
150 BOOL
CSetMainPage::PreTranslateMessage(MSG
* pMsg
)
152 m_tooltips
.RelayEvent(pMsg
);
153 return ISettingsPropPage::PreTranslateMessage(pMsg
);
156 void CSetMainPage::OnModified()
161 void CSetMainPage::OnASPHACK()
163 if (CMessageBox::Show(m_hWnd
, IDS_SETTINGS_ASPHACKWARNING
, IDS_APPNAME
, MB_ICONWARNING
|MB_YESNO
) == IDYES
)
170 m_bUseDotNetHack
= !m_bUseDotNetHack
;
175 BOOL
CSetMainPage::OnApply()
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
))
197 SendMessageTimeout(HWND_BROADCAST
, WM_SETTINGCHANGE
, 0, (LPARAM
)_T("Environment"), SMTO_ABORTIFHUNG
, 1000, &dwRet
);
198 m_restart
= Restart_System
;
203 asphack_local
.removeValue();
204 asphack_user
.removeValue();
205 if (GetEnvironmentVariable(_T("SVN_ASP_DOT_NET_HACK"), NULL
, 0)!=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())
216 return ISettingsPropPage::OnApply();
220 CMessageBox::Show(NULL
,_T("Msys Git Install Path Error"),_T("TortoiseGit"),MB_OK
|MB_ICONERROR
);
225 void CSetMainPage::OnBnClickedEditconfig()
229 SVN::EnsureConfigFile();
230 SHGetFolderPath(NULL
, CSIDL_APPDATA
, NULL
, SHGFP_TYPE_CURRENT
, buf
);
232 path
+= _T("\\Subversion\\config");
233 CAppUtils::StartTextViewer(path
);
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()
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);
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
;
265 this->UpdateData(TRUE
);
266 dir
=this->m_sMsysGitPath
;
267 if (browseFolder
.Show(GetSafeHwnd(), dir
) == CBrowseFolder::OK
)
270 Store (m_sMsysGitPath
, m_regMsysGitPath
);
271 this->UpdateData(FALSE
);
276 void CSetMainPage::OnCheck()
278 if(g_Git
.CheckMsysGitDir())
282 cmd
=_T("git.exe --version");
283 g_Git
.Run(cmd
,&out
,CP_UTF8
);
284 this->GetDlgItem(IDC_MSYSGIT_VER
)->SetWindowText(out
);
287 CMessageBox::Show(NULL
,_T("Msys Git Install Path Error"),_T("TortoiseGit"),MB_OK
|MB_ICONERROR
);