OSDN Git Service

Change Dir Structure to be same as TortoiseSVN'
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Settings / SetSavedDataPage.cpp
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2003-2008 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #include "stdafx.h"\r
20 #include "TortoiseProc.h"\r
21 #include "registry.h"\r
22 #include "PathUtils.h"\r
23 #include "AppUtils.h"\r
24 #include "DirFileEnum.h"\r
25 #include "SetSavedDataPage.h"\r
26 #include "MessageBox.h"\r
27 \r
28 IMPLEMENT_DYNAMIC(CSetSavedDataPage, ISettingsPropPage)\r
29 \r
30 CSetSavedDataPage::CSetSavedDataPage()\r
31         : ISettingsPropPage(CSetSavedDataPage::IDD)\r
32         , m_maxLines(0)\r
33 {\r
34         m_regMaxLines = CRegDWORD(_T("Software\\TortoiseSVN\\MaxLinesInLogfile"), 4000);\r
35         m_maxLines = m_regMaxLines;\r
36 }\r
37 \r
38 CSetSavedDataPage::~CSetSavedDataPage()\r
39 {\r
40 }\r
41 \r
42 void CSetSavedDataPage::DoDataExchange(CDataExchange* pDX)\r
43 {\r
44         ISettingsPropPage::DoDataExchange(pDX);\r
45         DDX_Control(pDX, IDC_URLHISTCLEAR, m_btnUrlHistClear);\r
46         DDX_Control(pDX, IDC_LOGHISTCLEAR, m_btnLogHistClear);\r
47         DDX_Control(pDX, IDC_RESIZABLEHISTCLEAR, m_btnResizableHistClear);\r
48         DDX_Control(pDX, IDC_AUTHHISTCLEAR, m_btnAuthHistClear);\r
49         DDX_Control(pDX, IDC_REPOLOGCLEAR, m_btnRepoLogClear);\r
50         DDX_Text(pDX, IDC_MAXLINES, m_maxLines);\r
51         DDX_Control(pDX, IDC_ACTIONLOGSHOW, m_btnActionLogShow);\r
52         DDX_Control(pDX, IDC_ACTIONLOGCLEAR, m_btnActionLogClear);\r
53 }\r
54 \r
55 BOOL CSetSavedDataPage::OnInitDialog()\r
56 {\r
57         ISettingsPropPage::OnInitDialog();\r
58 \r
59         // find out how many log messages and URLs we've stored\r
60         int nLogHistWC = 0;\r
61         INT_PTR nLogHistMsg = 0;\r
62         int nUrlHistWC = 0;\r
63         INT_PTR nUrlHistItems = 0;\r
64         int nLogHistRepo = 0;\r
65         CRegistryKey regloghist(_T("Software\\TortoiseSVN\\History"));\r
66         CStringList loghistlist;\r
67         regloghist.getSubKeys(loghistlist);\r
68         for (POSITION pos = loghistlist.GetHeadPosition(); pos != NULL; )\r
69         {\r
70                 CString sHistName = loghistlist.GetNext(pos);\r
71                 if (sHistName.Left(6).CompareNoCase(_T("commit"))==0)\r
72                 {\r
73                         nLogHistWC++;\r
74                         CRegistryKey regloghistwc(_T("Software\\TortoiseSVN\\History\\")+sHistName);\r
75                         CStringList loghistlistwc;\r
76                         regloghistwc.getValues(loghistlistwc);\r
77                         nLogHistMsg += loghistlistwc.GetCount();\r
78                 }\r
79                 else\r
80                 {\r
81                         // repoURLs\r
82                         CStringList urlhistlistmain;\r
83                         CStringList urlhistlistmainvalues;\r
84                         CRegistryKey regurlhistlist(_T("Software\\TortoiseSVN\\History\\repoURLS"));\r
85                         regurlhistlist.getSubKeys(urlhistlistmain);\r
86                         regurlhistlist.getValues(urlhistlistmainvalues);\r
87                         nUrlHistItems += urlhistlistmainvalues.GetCount();\r
88                         for (POSITION urlpos = urlhistlistmain.GetHeadPosition(); urlpos != NULL; )\r
89                         {\r
90                                 CString sWCUID = urlhistlistmain.GetNext(urlpos);\r
91                                 nUrlHistWC++;\r
92                                 CStringList urlhistlistwc;\r
93                                 CRegistryKey regurlhistlistwc(_T("Software\\TortoiseSVN\\History\\repoURLS\\")+sWCUID);\r
94                                 regurlhistlistwc.getValues(urlhistlistwc);\r
95                                 nUrlHistItems += urlhistlistwc.GetCount();\r
96                         }\r
97                 }\r
98         }\r
99         \r
100         // find out how many dialog sizes / positions we've stored\r
101         INT_PTR nResizableDialogs = 0;\r
102         CRegistryKey regResizable(_T("Software\\TortoiseSVN\\TortoiseProc\\ResizableState"));\r
103         CStringList resizablelist;\r
104         regResizable.getValues(resizablelist);\r
105         nResizableDialogs += resizablelist.GetCount();\r
106 \r
107         // find out how many auth data we've stored\r
108         int nSimple = 0;\r
109         int nSSL = 0;\r
110         int nUsername = 0;\r
111 \r
112         CString sFile;\r
113         bool bIsDir = false;\r
114 \r
115         TCHAR pathbuf[MAX_PATH] = {0};\r
116         if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, pathbuf)==S_OK)\r
117         {\r
118                 _tcscat_s(pathbuf, MAX_PATH, _T("\\Subversion\\auth\\"));\r
119                 CString sSimple = CString(pathbuf) + _T("svn.simple");\r
120                 CString sSSL = CString(pathbuf) + _T("svn.ssl.server");\r
121                 CString sUsername = CString(pathbuf) + _T("svn.username");\r
122                 CDirFileEnum simpleenum(sSimple);\r
123                 while (simpleenum.NextFile(sFile, &bIsDir))\r
124                         nSimple++;\r
125                 CDirFileEnum sslenum(sSSL);\r
126                 while (sslenum.NextFile(sFile, &bIsDir))\r
127                         nSSL++;\r
128                 CDirFileEnum userenum(sUsername);\r
129                 while (userenum.NextFile(sFile, &bIsDir))\r
130                         nUsername++;\r
131         }\r
132 \r
133         CDirFileEnum logenum(CPathUtils::GetAppDataDirectory()+_T("logcache"));\r
134         while (logenum.NextFile(sFile, &bIsDir))\r
135                 nLogHistRepo++;\r
136         // the "Repositories.dat" is not a cache file\r
137         nLogHistRepo--;\r
138 \r
139         BOOL bActionLog = PathFileExists(CPathUtils::GetAppDataDirectory() + _T("logfile.txt"));\r
140 \r
141         m_btnLogHistClear.EnableWindow(nLogHistMsg || nLogHistWC);\r
142         m_btnUrlHistClear.EnableWindow(nUrlHistItems || nUrlHistWC);\r
143         m_btnResizableHistClear.EnableWindow(nResizableDialogs > 0);\r
144         m_btnAuthHistClear.EnableWindow(nSimple || nSSL || nUsername);\r
145         m_btnRepoLogClear.EnableWindow(nLogHistRepo >= 0);\r
146         m_btnActionLogClear.EnableWindow(bActionLog);\r
147         m_btnActionLogShow.EnableWindow(bActionLog);\r
148 \r
149         EnableToolTips();\r
150 \r
151         m_tooltips.Create(this);\r
152         CString sTT;\r
153         sTT.Format(IDS_SETTINGS_SAVEDDATA_LOGHIST_TT, nLogHistMsg, nLogHistWC);\r
154         m_tooltips.AddTool(IDC_LOGHISTORY, sTT);\r
155         m_tooltips.AddTool(IDC_LOGHISTCLEAR, sTT);\r
156         sTT.Format(IDS_SETTINGS_SAVEDDATA_URLHIST_TT, nUrlHistItems, nUrlHistWC);\r
157         m_tooltips.AddTool(IDC_URLHISTORY, sTT);\r
158         m_tooltips.AddTool(IDC_URLHISTCLEAR, sTT);\r
159         sTT.Format(IDS_SETTINGS_SAVEDDATA_RESIZABLE_TT, nResizableDialogs);\r
160         m_tooltips.AddTool(IDC_RESIZABLEHISTORY, sTT);\r
161         m_tooltips.AddTool(IDC_RESIZABLEHISTCLEAR, sTT);\r
162         sTT.Format(IDS_SETTINGS_SAVEDDATA_AUTH_TT, nSimple, nSSL, nUsername);\r
163         m_tooltips.AddTool(IDC_AUTHHISTORY, sTT);\r
164         m_tooltips.AddTool(IDC_AUTHHISTCLEAR, sTT);\r
165         sTT.Format(IDS_SETTINGS_SAVEDDATA_REPOLOGHIST_TT, nLogHistRepo);\r
166         m_tooltips.AddTool(IDC_REPOLOG, sTT);\r
167         m_tooltips.AddTool(IDC_REPOLOGCLEAR, sTT);\r
168         sTT.LoadString(IDS_SETTINGS_SHOWACTIONLOG_TT);\r
169         m_tooltips.AddTool(IDC_ACTIONLOGSHOW, sTT);\r
170         sTT.LoadString(IDS_SETTINGS_MAXACTIONLOGLINES_TT);\r
171         m_tooltips.AddTool(IDC_MAXLINES, sTT);\r
172         sTT.LoadString(IDS_SETTINGS_CLEARACTIONLOG_TT);\r
173         m_tooltips.AddTool(IDC_ACTIONLOGCLEAR, sTT);\r
174 \r
175         return TRUE;\r
176 }\r
177 \r
178 BOOL CSetSavedDataPage::PreTranslateMessage(MSG* pMsg)\r
179 {\r
180         m_tooltips.RelayEvent(pMsg);\r
181         return ISettingsPropPage::PreTranslateMessage(pMsg);\r
182 }\r
183 \r
184 BEGIN_MESSAGE_MAP(CSetSavedDataPage, ISettingsPropPage)\r
185         ON_BN_CLICKED(IDC_URLHISTCLEAR, &CSetSavedDataPage::OnBnClickedUrlhistclear)\r
186         ON_BN_CLICKED(IDC_LOGHISTCLEAR, &CSetSavedDataPage::OnBnClickedLoghistclear)\r
187         ON_BN_CLICKED(IDC_RESIZABLEHISTCLEAR, &CSetSavedDataPage::OnBnClickedResizablehistclear)\r
188         ON_BN_CLICKED(IDC_AUTHHISTCLEAR, &CSetSavedDataPage::OnBnClickedAuthhistclear)\r
189         ON_BN_CLICKED(IDC_REPOLOGCLEAR, &CSetSavedDataPage::OnBnClickedRepologclear)\r
190         ON_BN_CLICKED(IDC_ACTIONLOGSHOW, &CSetSavedDataPage::OnBnClickedActionlogshow)\r
191         ON_BN_CLICKED(IDC_ACTIONLOGCLEAR, &CSetSavedDataPage::OnBnClickedActionlogclear)\r
192         ON_EN_CHANGE(IDC_MAXLINES, OnModified)\r
193 END_MESSAGE_MAP()\r
194 \r
195 void CSetSavedDataPage::OnBnClickedUrlhistclear()\r
196 {\r
197         CRegistryKey reg(_T("Software\\TortoiseSVN\\History\\repoURLS"));\r
198         reg.removeKey();\r
199         m_btnUrlHistClear.EnableWindow(FALSE);\r
200         m_tooltips.DelTool(GetDlgItem(IDC_URLHISTCLEAR));\r
201         m_tooltips.DelTool(GetDlgItem(IDC_URLHISTORY));\r
202 }\r
203 \r
204 void CSetSavedDataPage::OnBnClickedLoghistclear()\r
205 {\r
206         CRegistryKey reg(_T("Software\\TortoiseSVN\\History"));\r
207         CStringList histlist;\r
208         reg.getSubKeys(histlist);\r
209         for (POSITION pos = histlist.GetHeadPosition(); pos != NULL; )\r
210         {\r
211                 CString sHist = histlist.GetNext(pos);\r
212                 if (sHist.Left(6).CompareNoCase(_T("commit"))==0)\r
213                 {\r
214                         CRegistryKey regkey(_T("Software\\TortoiseSVN\\History\\")+sHist);\r
215                         regkey.removeKey();\r
216                 }\r
217         }\r
218 \r
219         m_btnLogHistClear.EnableWindow(FALSE);\r
220         m_tooltips.DelTool(GetDlgItem(IDC_RESIZABLEHISTCLEAR));\r
221         m_tooltips.DelTool(GetDlgItem(IDC_RESIZABLEHISTORY));\r
222 }\r
223 \r
224 void CSetSavedDataPage::OnBnClickedResizablehistclear()\r
225 {\r
226         CRegistryKey reg(_T("Software\\TortoiseSVN\\TortoiseProc\\ResizableState"));\r
227         reg.removeKey();\r
228         m_btnResizableHistClear.EnableWindow(FALSE);\r
229         m_tooltips.DelTool(GetDlgItem(IDC_RESIZABLEHISTCLEAR));\r
230         m_tooltips.DelTool(GetDlgItem(IDC_RESIZABLEHISTORY));\r
231 }\r
232 \r
233 void CSetSavedDataPage::OnBnClickedAuthhistclear()\r
234 {\r
235         CRegStdString auth = CRegStdString(_T("Software\\TortoiseSVN\\Auth\\"));\r
236         auth.removeKey();\r
237         TCHAR pathbuf[MAX_PATH] = {0};\r
238         if (SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, SHGFP_TYPE_CURRENT, pathbuf)==S_OK)\r
239         {\r
240                 _tcscat_s(pathbuf, MAX_PATH, _T("\\Subversion\\auth"));\r
241                 pathbuf[_tcslen(pathbuf)+1] = 0;\r
242                 SHFILEOPSTRUCT fileop;\r
243                 fileop.hwnd = this->m_hWnd;\r
244                 fileop.wFunc = FO_DELETE;\r
245                 fileop.pFrom = pathbuf;\r
246                 fileop.pTo = NULL;\r
247                 fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | FOF_NOCONFIRMATION;// | FOF_NOERRORUI | FOF_SILENT;\r
248                 fileop.lpszProgressTitle = _T("deleting file");\r
249                 SHFileOperation(&fileop);\r
250         }\r
251         m_btnAuthHistClear.EnableWindow(FALSE);\r
252         m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTCLEAR));\r
253         m_tooltips.DelTool(GetDlgItem(IDC_AUTHHISTORY));\r
254 }\r
255 \r
256 void CSetSavedDataPage::OnBnClickedRepologclear()\r
257 {\r
258         CString path = CPathUtils::GetAppDataDirectory()+_T("logcache");\r
259         TCHAR pathbuf[MAX_PATH] = {0};\r
260         _tcscpy_s(pathbuf, MAX_PATH, (LPCTSTR)path);\r
261         pathbuf[_tcslen(pathbuf)+1] = 0;\r
262 \r
263         SHFILEOPSTRUCT fileop = {0};\r
264         fileop.hwnd = this->m_hWnd;\r
265         fileop.wFunc = FO_DELETE;\r
266         fileop.pFrom = pathbuf;\r
267         fileop.pTo = NULL;\r
268         fileop.fFlags = FOF_NO_CONNECTED_ELEMENTS | FOF_NOCONFIRMATION;\r
269         fileop.lpszProgressTitle = _T("deleting cached data");\r
270         SHFileOperation(&fileop);\r
271 \r
272         m_btnRepoLogClear.EnableWindow(FALSE);\r
273         m_tooltips.DelTool(GetDlgItem(IDC_REPOLOG));\r
274         m_tooltips.DelTool(GetDlgItem(IDC_REPOLOGCLEAR));\r
275 }\r
276 \r
277 void CSetSavedDataPage::OnBnClickedActionlogshow()\r
278 {\r
279         CString logfile = CPathUtils::GetAppDataDirectory() + _T("logfile.txt");\r
280         CAppUtils::StartTextViewer(logfile);\r
281 }\r
282 \r
283 void CSetSavedDataPage::OnBnClickedActionlogclear()\r
284 {\r
285         CString logfile = CPathUtils::GetAppDataDirectory() + _T("logfile.txt");\r
286         DeleteFile(logfile);\r
287         m_btnActionLogClear.EnableWindow(FALSE);\r
288         m_btnActionLogShow.EnableWindow(FALSE);\r
289 }\r
290 \r
291 void CSetSavedDataPage::OnModified()\r
292 {\r
293         SetModified();\r
294 }\r
295 \r
296 BOOL CSetSavedDataPage::OnApply()\r
297 {\r
298     Store (m_maxLines,  m_regMaxLines);\r
299     return ISettingsPropPage::OnApply();\r
300 }\r
301 \r