OSDN Git Service

Change Dir Structure to be same as TortoiseSVN'
[tortoisegit/TortoiseGitJp.git] / src / TortoiseProc / Settings / SetOverlayIcons.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 "DirFileEnum.h"\r
22 #include "MessageBox.h"\r
23 #include ".\setoverlayicons.h"\r
24 #include "SVNStatus.h"\r
25 #include "AppUtils.h"\r
26 #include "PathUtils.h"\r
27 #include "ShellUpdater.h"\r
28 #include "XPTheme.h"\r
29 \r
30 IMPLEMENT_DYNAMIC(CSetOverlayIcons, ISettingsPropPage)\r
31 CSetOverlayIcons::CSetOverlayIcons()\r
32         : ISettingsPropPage(CSetOverlayIcons::IDD)\r
33\r
34         m_regNormal = CRegString(_T("Software\\TortoiseOverlays\\NormalIcon"));\r
35         m_regModified = CRegString(_T("Software\\TortoiseOverlays\\ModifiedIcon"));\r
36         m_regConflicted = CRegString(_T("Software\\TortoiseOverlays\\ConflictIcon"));\r
37         m_regReadOnly = CRegString(_T("Software\\TortoiseOverlays\\ReadOnlyIcon"));\r
38         m_regDeleted = CRegString(_T("Software\\TortoiseOverlays\\DeletedIcon"));\r
39         m_regLocked = CRegString(_T("Software\\TortoiseOverlays\\LockedIcon"));\r
40         m_regAdded = CRegString(_T("Software\\TortoiseOverlays\\AddedIcon"));\r
41         m_regIgnored = CRegString(_T("Software\\TortoiseOverlays\\IgnoredIcon"));\r
42         m_regUnversioned = CRegString(_T("Software\\TortoiseOverlays\\UnversionedIcon"));\r
43 }\r
44 \r
45 CSetOverlayIcons::~CSetOverlayIcons()\r
46 {\r
47 }\r
48 \r
49 void CSetOverlayIcons::DoDataExchange(CDataExchange* pDX)\r
50 {\r
51         ISettingsPropPage::DoDataExchange(pDX);\r
52         DDX_Control(pDX, IDC_ICONSETCOMBO, m_cIconSet);\r
53         DDX_Control(pDX, IDC_ICONLIST, m_cIconList);\r
54 }\r
55 \r
56 \r
57 BEGIN_MESSAGE_MAP(CSetOverlayIcons, ISettingsPropPage)\r
58         ON_BN_CLICKED(IDC_LISTRADIO, OnBnClickedListradio)\r
59         ON_BN_CLICKED(IDC_SYMBOLRADIO, OnBnClickedSymbolradio)\r
60         ON_CBN_SELCHANGE(IDC_ICONSETCOMBO, OnCbnSelchangeIconsetcombo)\r
61 END_MESSAGE_MAP()\r
62 \r
63 BOOL CSetOverlayIcons::OnInitDialog()\r
64 {\r
65         ISettingsPropPage::OnInitDialog();\r
66 \r
67         m_cIconList.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_DOUBLEBUFFER | LVS_EX_INFOTIP | LVS_EX_SUBITEMIMAGES);\r
68         // get the path to our icon sets\r
69         TCHAR buf[MAX_PATH] = {0};\r
70         SHGetSpecialFolderPath(m_hWnd, buf, CSIDL_PROGRAM_FILES_COMMON, true);\r
71         m_sIconPath = buf;\r
72         m_sIconPath += _T("\\TortoiseOverlays\\Icons");\r
73         // list all the icon sets\r
74         CDirFileEnum filefinder(m_sIconPath);\r
75         bool isDir = false;\r
76         CString item;\r
77         while (filefinder.NextFile(item, &isDir))\r
78         {\r
79                 if (!isDir)\r
80                         continue;\r
81                 m_cIconSet.AddString(CPathUtils::GetFileNameFromPath(item));\r
82         }\r
83         CheckRadioButton(IDC_LISTRADIO, IDC_SYMBOLRADIO, IDC_LISTRADIO);\r
84         CString sModifiedIcon = m_regModified;\r
85         if (sModifiedIcon.IsEmpty())\r
86         {\r
87                 // no custom icon set, use the default\r
88                 sModifiedIcon = m_sIconPath + _T("\\XPStyle\\ModifiedIcon.ico");\r
89         }\r
90         if (sModifiedIcon.Left(m_sIconPath.GetLength()).CompareNoCase(m_sIconPath)!=0)\r
91         {\r
92                 // an icon set outside our own installation? We don't support that,\r
93                 // so fall back to the default!\r
94                 sModifiedIcon = m_sIconPath + _T("\\XPStyle\\ModifiedIcon.ico");\r
95         }\r
96         // the name of the icon set is the folder of the icon location\r
97         m_sOriginalIconSet = sModifiedIcon.Mid(m_sIconPath.GetLength()+1);\r
98         m_sOriginalIconSet = m_sOriginalIconSet.Left(m_sOriginalIconSet.ReverseFind('\\'));\r
99         // now we have the name of the icon set. Set the combobox to show\r
100         // that as selected\r
101         CString ComboItem;\r
102         for (int i=0; i<m_cIconSet.GetCount(); ++i)\r
103         {\r
104                 m_cIconSet.GetLBText(i, ComboItem);\r
105                 if (ComboItem.CompareNoCase(m_sOriginalIconSet)==0)\r
106                         m_cIconSet.SetCurSel(i);\r
107         }\r
108         WORD langID = (WORD)(DWORD)CRegStdWORD(_T("Software\\TortoiseSVN\\LanguageID"), GetUserDefaultLangID());\r
109         TCHAR statustext[MAX_STATUS_STRING_LENGTH];\r
110         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_normal, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
111         m_sNormal = statustext;\r
112         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_modified, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
113         m_sModified = statustext;\r
114         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_conflicted, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
115         m_sConflicted = statustext;\r
116         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_deleted, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
117         m_sDeleted = statustext;\r
118         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_added, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
119         m_sAdded = statustext;\r
120         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_ignored, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
121         m_sIgnored = statustext;\r
122         SVNStatus::GetStatusString(AfxGetResourceHandle(), svn_wc_status_unversioned, statustext, sizeof(statustext)/sizeof(TCHAR), langID);\r
123         m_sUnversioned = statustext;\r
124 \r
125         m_sReadOnly.LoadString(IDS_SETTINGS_READONLYNAME);\r
126         m_sLocked.LoadString(IDS_SETTINGS_LOCKEDNAME);\r
127 \r
128         CXPTheme theme;\r
129         theme.SetWindowTheme(m_cIconList.GetSafeHwnd(), L"Explorer", NULL);\r
130 \r
131         ShowIconSet(true);\r
132 \r
133         return TRUE;\r
134 }\r
135 \r
136 void CSetOverlayIcons::ShowIconSet(bool bSmallIcons)\r
137 {\r
138         m_cIconList.SetRedraw(FALSE);\r
139         m_cIconList.DeleteAllItems();\r
140         m_ImageList.DeleteImageList();\r
141         m_ImageListBig.DeleteImageList();\r
142         m_ImageList.Create(16, 16, ILC_COLOR32 | ILC_MASK, 20, 10);\r
143         m_ImageListBig.Create(32, 32, ILC_COLOR32 | ILC_MASK, 20, 10);\r
144         m_cIconList.SetImageList(&m_ImageList, LVSIL_SMALL);\r
145         m_cIconList.SetImageList(&m_ImageListBig, LVSIL_NORMAL);\r
146 \r
147         // find all the icons of the selected icon set\r
148         CString sIconSet;\r
149         int index = m_cIconSet.GetCurSel();\r
150         if (index == CB_ERR)\r
151         {\r
152                 // nothing selected. Shouldn't happen!\r
153                 return;\r
154         }\r
155         m_cIconSet.GetLBText(index, sIconSet);\r
156         CString sIconSetPath = m_sIconPath + _T("\\") + sIconSet;\r
157 \r
158         CImageList * pImageList = bSmallIcons ? &m_ImageList : &m_ImageListBig;\r
159         int pixelsize = (bSmallIcons ? 16 : 32);\r
160         HICON hNormalOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\NormalIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
161         index = pImageList->Add(hNormalOverlay);\r
162         VERIFY(pImageList->SetOverlayImage(index, 1));\r
163         HICON hModifiedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\ModifiedIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
164         index = pImageList->Add(hModifiedOverlay);\r
165         VERIFY(pImageList->SetOverlayImage(index, 2));\r
166         HICON hConflictedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\ConflictIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
167         index = pImageList->Add(hConflictedOverlay);\r
168         VERIFY(pImageList->SetOverlayImage(index, 3));\r
169         HICON hReadOnlyOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\ReadOnlyIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
170         index = pImageList->Add(hReadOnlyOverlay);\r
171         VERIFY(pImageList->SetOverlayImage(index, 4));\r
172         HICON hDeletedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\DeletedIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
173         index = pImageList->Add(hDeletedOverlay);\r
174         VERIFY(pImageList->SetOverlayImage(index, 5));\r
175         HICON hLockedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\LockedIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
176         index = pImageList->Add(hLockedOverlay);\r
177         VERIFY(pImageList->SetOverlayImage(index, 6));\r
178         HICON hAddedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\AddedIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
179         index = pImageList->Add(hAddedOverlay);\r
180         VERIFY(pImageList->SetOverlayImage(index, 7));\r
181         HICON hIgnoredOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\IgnoredIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
182         index = pImageList->Add(hIgnoredOverlay);\r
183         VERIFY(pImageList->SetOverlayImage(index, 8));\r
184         HICON hUnversionedOverlay = (HICON)LoadImage(NULL, sIconSetPath+_T("\\UnversionedIcon.ico"), IMAGE_ICON, pixelsize, pixelsize, LR_LOADFROMFILE);\r
185         index = pImageList->Add(hUnversionedOverlay);\r
186         VERIFY(pImageList->SetOverlayImage(index, 9));\r
187 \r
188         DestroyIcon(hNormalOverlay);\r
189         DestroyIcon(hModifiedOverlay);\r
190         DestroyIcon(hConflictedOverlay);\r
191         DestroyIcon(hReadOnlyOverlay);\r
192         DestroyIcon(hDeletedOverlay);\r
193         DestroyIcon(hLockedOverlay);\r
194         DestroyIcon(hAddedOverlay);\r
195         DestroyIcon(hIgnoredOverlay);\r
196         DestroyIcon(hUnversionedOverlay);\r
197 \r
198         // create an image list with different file icons\r
199         SHFILEINFO sfi;\r
200         SecureZeroMemory(&sfi, sizeof sfi);\r
201 \r
202         UINT flags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES;\r
203         if (bSmallIcons)\r
204                 flags |= SHGFI_SMALLICON;\r
205         else\r
206                 flags |= SHGFI_LARGEICON;\r
207         SHGetFileInfo(\r
208                 _T("Doesn't matter"),\r
209                 FILE_ATTRIBUTE_DIRECTORY,\r
210                 &sfi, sizeof sfi,\r
211                 flags);\r
212 \r
213         int folderindex = pImageList->Add(sfi.hIcon);   //folder\r
214         DestroyIcon(sfi.hIcon);\r
215         //folders\r
216         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sNormal, folderindex);\r
217         VERIFY(m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(1), TVIS_OVERLAYMASK));\r
218         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sModified, folderindex);\r
219         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(2), TVIS_OVERLAYMASK);\r
220         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sConflicted, folderindex);\r
221         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(3), TVIS_OVERLAYMASK);\r
222         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sReadOnly, folderindex);\r
223         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(4), TVIS_OVERLAYMASK);\r
224         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sDeleted, folderindex);\r
225         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(5), TVIS_OVERLAYMASK);\r
226         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sLocked, folderindex);\r
227         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(6), TVIS_OVERLAYMASK);\r
228         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sAdded, folderindex);\r
229         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(7), TVIS_OVERLAYMASK);\r
230         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sIgnored, folderindex);\r
231         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(8), TVIS_OVERLAYMASK);\r
232         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sUnversioned, folderindex);\r
233         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(9), TVIS_OVERLAYMASK);\r
234 \r
235         AddFileTypeGroup(_T(".cpp"), bSmallIcons);\r
236         AddFileTypeGroup(_T(".h"), bSmallIcons);\r
237         AddFileTypeGroup(_T(".txt"), bSmallIcons);\r
238         AddFileTypeGroup(_T(".java"), bSmallIcons);\r
239         AddFileTypeGroup(_T(".doc"), bSmallIcons);\r
240         AddFileTypeGroup(_T(".pl"), bSmallIcons);\r
241         AddFileTypeGroup(_T(".php"), bSmallIcons);\r
242         AddFileTypeGroup(_T(".asp"), bSmallIcons);\r
243         AddFileTypeGroup(_T(".cs"), bSmallIcons);\r
244         AddFileTypeGroup(_T(".vb"), bSmallIcons);\r
245         AddFileTypeGroup(_T(".xml"), bSmallIcons);\r
246         AddFileTypeGroup(_T(".pas"), bSmallIcons);\r
247         AddFileTypeGroup(_T(".dpr"), bSmallIcons);\r
248         AddFileTypeGroup(_T(".dfm"), bSmallIcons);\r
249         AddFileTypeGroup(_T(".res"), bSmallIcons);\r
250         AddFileTypeGroup(_T(".asmx"), bSmallIcons);\r
251         AddFileTypeGroup(_T(".aspx"), bSmallIcons);\r
252         AddFileTypeGroup(_T(".resx"), bSmallIcons);\r
253         AddFileTypeGroup(_T(".vbp"), bSmallIcons);\r
254         AddFileTypeGroup(_T(".frm"), bSmallIcons);\r
255         AddFileTypeGroup(_T(".frx"), bSmallIcons);\r
256         AddFileTypeGroup(_T(".bas"), bSmallIcons);\r
257         AddFileTypeGroup(_T(".config"), bSmallIcons);\r
258         AddFileTypeGroup(_T(".css"), bSmallIcons);\r
259         AddFileTypeGroup(_T(".acsx"), bSmallIcons);\r
260         AddFileTypeGroup(_T(".jpg"), bSmallIcons);\r
261         AddFileTypeGroup(_T(".png"), bSmallIcons);\r
262         m_cIconList.SetRedraw(TRUE);\r
263 }\r
264 void CSetOverlayIcons::AddFileTypeGroup(CString sFileType, bool bSmallIcons)\r
265 {\r
266         UINT flags = SHGFI_ICON | SHGFI_USEFILEATTRIBUTES;\r
267         if (bSmallIcons)\r
268                 flags |= SHGFI_SMALLICON;\r
269         else\r
270                 flags |= SHGFI_LARGEICON;\r
271         SHFILEINFO sfi;\r
272         SecureZeroMemory(&sfi, sizeof sfi);\r
273 \r
274         SHGetFileInfo(\r
275                 sFileType,\r
276                 FILE_ATTRIBUTE_NORMAL,\r
277                 &sfi, sizeof sfi,\r
278                 flags);\r
279 \r
280         int imageindex = 0;\r
281         if (bSmallIcons)\r
282                 imageindex = m_ImageList.Add(sfi.hIcon);\r
283         else\r
284                 imageindex = m_ImageListBig.Add(sfi.hIcon);\r
285 \r
286         DestroyIcon(sfi.hIcon);\r
287         int index = 0;\r
288         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sNormal+sFileType, imageindex);\r
289         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(1), TVIS_OVERLAYMASK);\r
290         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sModified+sFileType, imageindex);\r
291         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(2), TVIS_OVERLAYMASK);\r
292         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sConflicted+sFileType, imageindex);\r
293         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(3), TVIS_OVERLAYMASK);\r
294         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sReadOnly+sFileType, imageindex);\r
295         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(4), TVIS_OVERLAYMASK);\r
296         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sDeleted+sFileType, imageindex);\r
297         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(5), TVIS_OVERLAYMASK);\r
298         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sLocked+sFileType, imageindex);\r
299         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(6), TVIS_OVERLAYMASK);\r
300         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sAdded+sFileType, imageindex);\r
301         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(7), TVIS_OVERLAYMASK);\r
302         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sIgnored+sFileType, imageindex);\r
303         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(8), TVIS_OVERLAYMASK);\r
304         index = m_cIconList.InsertItem(m_cIconList.GetItemCount(), m_sUnversioned+sFileType, imageindex);\r
305         m_cIconList.SetItemState(index, INDEXTOOVERLAYMASK(9), TVIS_OVERLAYMASK);\r
306 }\r
307 \r
308 void CSetOverlayIcons::OnBnClickedListradio()\r
309 {\r
310         m_cIconList.ModifyStyle(LVS_TYPEMASK, LVS_LIST);\r
311         ShowIconSet(true);\r
312 }\r
313 \r
314 void CSetOverlayIcons::OnBnClickedSymbolradio()\r
315 {\r
316         m_cIconList.ModifyStyle(LVS_TYPEMASK, LVS_ICON);\r
317         ShowIconSet(false);\r
318 }\r
319 \r
320 void CSetOverlayIcons::OnCbnSelchangeIconsetcombo()\r
321 {\r
322         bool bSmallIcons = (GetCheckedRadioButton(IDC_LISTRADIO, IDC_SYMBOLRADIO) == IDC_LISTRADIO);\r
323         ShowIconSet(bSmallIcons);\r
324         m_selIndex = m_cIconSet.GetCurSel();\r
325         if (m_selIndex != CB_ERR)\r
326         {\r
327                 m_cIconSet.GetLBText(m_selIndex, m_sIconSet);\r
328         }\r
329         if (m_sIconSet.CompareNoCase(m_sOriginalIconSet)!=0)\r
330                 SetModified();\r
331 }\r
332 \r
333 BOOL CSetOverlayIcons::OnApply()\r
334 {\r
335         UpdateData();\r
336 \r
337         if ((!m_sIconSet.IsEmpty())&&(m_sIconSet.CompareNoCase(m_sOriginalIconSet)!=0))\r
338         {\r
339                 // the selected icon set has changed.\r
340                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\NormalIcon.ico"), m_regNormal);\r
341                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\ModifiedIcon.ico"), m_regModified);\r
342                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\ConflictIcon.ico"), m_regConflicted);\r
343                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\ReadOnlyIcon.ico"), m_regReadOnly);\r
344                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\DeletedIcon.ico"), m_regDeleted);\r
345                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\LockedIcon.ico"), m_regLocked);\r
346                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\AddedIcon.ico"), m_regAdded);\r
347                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\IgnoredIcon.ico"), m_regIgnored);\r
348                 Store (m_sIconPath + _T("\\") + m_sIconSet + _T("\\UnversionedIcon.ico"), m_regUnversioned);\r
349 \r
350                 m_restart = Restart_System;\r
351                 m_sOriginalIconSet = m_sIconSet;\r
352         }\r
353         SetModified(FALSE);\r
354         return ISettingsPropPage::OnApply();\r
355 }\r