xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/OverwriteDialog.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // OverwriteDialog.cpp
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker 
5*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariantConv.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ResourceString.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Static.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker #include "FormatUtils.h"
15*f6dc9357SAndroid Build Coastguard Worker #include "LangUtils.h"
16*f6dc9357SAndroid Build Coastguard Worker #include "OverwriteDialog.h"
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker #include "PropertyNameRes.h"
19*f6dc9357SAndroid Build Coastguard Worker 
20*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
21*f6dc9357SAndroid Build Coastguard Worker 
22*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
23*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kLangIDs[] =
24*f6dc9357SAndroid Build Coastguard Worker {
25*f6dc9357SAndroid Build Coastguard Worker   IDT_OVERWRITE_HEADER,
26*f6dc9357SAndroid Build Coastguard Worker   IDT_OVERWRITE_QUESTION_BEGIN,
27*f6dc9357SAndroid Build Coastguard Worker   IDT_OVERWRITE_QUESTION_END,
28*f6dc9357SAndroid Build Coastguard Worker   IDB_YES_TO_ALL,
29*f6dc9357SAndroid Build Coastguard Worker   IDB_NO_TO_ALL,
30*f6dc9357SAndroid Build Coastguard Worker   IDB_AUTO_RENAME
31*f6dc9357SAndroid Build Coastguard Worker };
32*f6dc9357SAndroid Build Coastguard Worker #endif
33*f6dc9357SAndroid Build Coastguard Worker 
34*f6dc9357SAndroid Build Coastguard Worker static const unsigned kCurrentFileNameSizeLimit = 72;
35*f6dc9357SAndroid Build Coastguard Worker 
ReduceString(UString & s)36*f6dc9357SAndroid Build Coastguard Worker void COverwriteDialog::ReduceString(UString &s)
37*f6dc9357SAndroid Build Coastguard Worker {
38*f6dc9357SAndroid Build Coastguard Worker   const unsigned size =
39*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
40*f6dc9357SAndroid Build Coastguard Worker       !_isBig ? 30 : // kCurrentFileNameSizeLimit2
41*f6dc9357SAndroid Build Coastguard Worker #endif
42*f6dc9357SAndroid Build Coastguard Worker       kCurrentFileNameSizeLimit;
43*f6dc9357SAndroid Build Coastguard Worker 
44*f6dc9357SAndroid Build Coastguard Worker   if (s.Len() > size)
45*f6dc9357SAndroid Build Coastguard Worker   {
46*f6dc9357SAndroid Build Coastguard Worker     s.Delete(size / 2, s.Len() - size);
47*f6dc9357SAndroid Build Coastguard Worker     s.Insert(size / 2, L" ... ");
48*f6dc9357SAndroid Build Coastguard Worker   }
49*f6dc9357SAndroid Build Coastguard Worker   if (!s.IsEmpty() && s.Back() == ' ')
50*f6dc9357SAndroid Build Coastguard Worker   {
51*f6dc9357SAndroid Build Coastguard Worker     // s += (wchar_t)(0x2423); // visible space
52*f6dc9357SAndroid Build Coastguard Worker     s.InsertAtFront(L'\"');
53*f6dc9357SAndroid Build Coastguard Worker     s.Add_Char('\"');
54*f6dc9357SAndroid Build Coastguard Worker   }
55*f6dc9357SAndroid Build Coastguard Worker }
56*f6dc9357SAndroid Build Coastguard Worker 
57*f6dc9357SAndroid Build Coastguard Worker 
SetItemIcon(unsigned iconID,HICON hIcon)58*f6dc9357SAndroid Build Coastguard Worker void COverwriteDialog::SetItemIcon(unsigned iconID, HICON hIcon)
59*f6dc9357SAndroid Build Coastguard Worker {
60*f6dc9357SAndroid Build Coastguard Worker   NControl::CStatic staticContol;
61*f6dc9357SAndroid Build Coastguard Worker   staticContol.Attach(GetItem(iconID));
62*f6dc9357SAndroid Build Coastguard Worker   hIcon = staticContol.SetIcon(hIcon);
63*f6dc9357SAndroid Build Coastguard Worker   if (hIcon)
64*f6dc9357SAndroid Build Coastguard Worker     DestroyIcon(hIcon);
65*f6dc9357SAndroid Build Coastguard Worker }
66*f6dc9357SAndroid Build Coastguard Worker 
67*f6dc9357SAndroid Build Coastguard Worker void AddSizeValue(UString &s, UInt64 value);
AddSizeValue(UString & s,UInt64 value)68*f6dc9357SAndroid Build Coastguard Worker void AddSizeValue(UString &s, UInt64 value)
69*f6dc9357SAndroid Build Coastguard Worker {
70*f6dc9357SAndroid Build Coastguard Worker   {
71*f6dc9357SAndroid Build Coastguard Worker     wchar_t sz[32];
72*f6dc9357SAndroid Build Coastguard Worker     ConvertUInt64ToString(value, sz);
73*f6dc9357SAndroid Build Coastguard Worker     s += MyFormatNew(IDS_FILE_SIZE, sz);
74*f6dc9357SAndroid Build Coastguard Worker   }
75*f6dc9357SAndroid Build Coastguard Worker   if (value >= (1 << 10))
76*f6dc9357SAndroid Build Coastguard Worker   {
77*f6dc9357SAndroid Build Coastguard Worker     char c;
78*f6dc9357SAndroid Build Coastguard Worker           if (value >= ((UInt64)10 << 30)) { value >>= 30; c = 'G'; }
79*f6dc9357SAndroid Build Coastguard Worker     else  if (value >=         (10 << 20)) { value >>= 20; c = 'M'; }
80*f6dc9357SAndroid Build Coastguard Worker     else                                   { value >>= 10; c = 'K'; }
81*f6dc9357SAndroid Build Coastguard Worker     s += " : ";
82*f6dc9357SAndroid Build Coastguard Worker     s.Add_UInt64(value);
83*f6dc9357SAndroid Build Coastguard Worker     s.Add_Space();
84*f6dc9357SAndroid Build Coastguard Worker     s.Add_Char(c);
85*f6dc9357SAndroid Build Coastguard Worker     s += "iB";
86*f6dc9357SAndroid Build Coastguard Worker   }
87*f6dc9357SAndroid Build Coastguard Worker }
88*f6dc9357SAndroid Build Coastguard Worker 
89*f6dc9357SAndroid Build Coastguard Worker 
SetFileInfoControl(const NOverwriteDialog::CFileInfo & fileInfo,unsigned textID,unsigned iconID,unsigned iconID_2)90*f6dc9357SAndroid Build Coastguard Worker void COverwriteDialog::SetFileInfoControl(
91*f6dc9357SAndroid Build Coastguard Worker     const NOverwriteDialog::CFileInfo &fileInfo,
92*f6dc9357SAndroid Build Coastguard Worker     unsigned textID,
93*f6dc9357SAndroid Build Coastguard Worker     unsigned iconID,
94*f6dc9357SAndroid Build Coastguard Worker     unsigned iconID_2)
95*f6dc9357SAndroid Build Coastguard Worker {
96*f6dc9357SAndroid Build Coastguard Worker   {
97*f6dc9357SAndroid Build Coastguard Worker     const UString &path = fileInfo.Path;
98*f6dc9357SAndroid Build Coastguard Worker     const int slashPos = path.ReverseFind_PathSepar();
99*f6dc9357SAndroid Build Coastguard Worker     UString s = path.Left((unsigned)(slashPos + 1));
100*f6dc9357SAndroid Build Coastguard Worker     ReduceString(s);
101*f6dc9357SAndroid Build Coastguard Worker     s.Add_LF();
102*f6dc9357SAndroid Build Coastguard Worker     {
103*f6dc9357SAndroid Build Coastguard Worker       UString s2 = path.Ptr((unsigned)(slashPos + 1));
104*f6dc9357SAndroid Build Coastguard Worker       ReduceString(s2);
105*f6dc9357SAndroid Build Coastguard Worker       s += s2;
106*f6dc9357SAndroid Build Coastguard Worker     }
107*f6dc9357SAndroid Build Coastguard Worker     s.Add_LF();
108*f6dc9357SAndroid Build Coastguard Worker     if (fileInfo.Size_IsDefined)
109*f6dc9357SAndroid Build Coastguard Worker       AddSizeValue(s, fileInfo.Size);
110*f6dc9357SAndroid Build Coastguard Worker     s.Add_LF();
111*f6dc9357SAndroid Build Coastguard Worker     if (fileInfo.Time_IsDefined)
112*f6dc9357SAndroid Build Coastguard Worker     {
113*f6dc9357SAndroid Build Coastguard Worker       AddLangString(s, IDS_PROP_MTIME);
114*f6dc9357SAndroid Build Coastguard Worker       s += ": ";
115*f6dc9357SAndroid Build Coastguard Worker       char t[64];
116*f6dc9357SAndroid Build Coastguard Worker       ConvertUtcFileTimeToString(fileInfo.Time, t);
117*f6dc9357SAndroid Build Coastguard Worker       s += t;
118*f6dc9357SAndroid Build Coastguard Worker     }
119*f6dc9357SAndroid Build Coastguard Worker     SetItemText(textID, s);
120*f6dc9357SAndroid Build Coastguard Worker   }
121*f6dc9357SAndroid Build Coastguard Worker /*
122*f6dc9357SAndroid Build Coastguard Worker   SHGetFileInfo():
123*f6dc9357SAndroid Build Coastguard Worker     DOCs: If uFlags does not contain SHGFI_EXETYPE or SHGFI_SYSICONINDEX,
124*f6dc9357SAndroid Build Coastguard Worker           the return value is nonzero if successful, or zero otherwise.
125*f6dc9357SAndroid Build Coastguard Worker     We don't use SHGFI_EXETYPE or SHGFI_SYSICONINDEX here.
126*f6dc9357SAndroid Build Coastguard Worker   win10: we call with SHGFI_ICON flag set.
127*f6dc9357SAndroid Build Coastguard Worker     it returns 0: if error : (shFileInfo::*) members are not set.
128*f6dc9357SAndroid Build Coastguard Worker     it returns non_0, if successful, and retrieve:
129*f6dc9357SAndroid Build Coastguard Worker       { shFileInfo.hIcon != NULL : the handle to icon (must be destroyed by our code)
130*f6dc9357SAndroid Build Coastguard Worker         shFileInfo.iIcon is index of the icon image within the system image list.
131*f6dc9357SAndroid Build Coastguard Worker       }
132*f6dc9357SAndroid Build Coastguard Worker   Note:
133*f6dc9357SAndroid Build Coastguard Worker     If we send path to ".exe" file,
134*f6dc9357SAndroid Build Coastguard Worker     SHGFI_USEFILEATTRIBUTES flag is ignored, and it tries to open file.
135*f6dc9357SAndroid Build Coastguard Worker     and return icon from that exe file.
136*f6dc9357SAndroid Build Coastguard Worker     So we still need to reduce path, if want to get raw icon of exe file.
137*f6dc9357SAndroid Build Coastguard Worker 
138*f6dc9357SAndroid Build Coastguard Worker   if (name.Len() >= MAX_PATH))
139*f6dc9357SAndroid Build Coastguard Worker   {
140*f6dc9357SAndroid Build Coastguard Worker     it can return:
141*f6dc9357SAndroid Build Coastguard Worker       return 0.
142*f6dc9357SAndroid Build Coastguard Worker       return 1 and:
143*f6dc9357SAndroid Build Coastguard Worker         { shFileInfo.hIcon != NULL : is some default icon for file
144*f6dc9357SAndroid Build Coastguard Worker           shFileInfo.iIcon == 0
145*f6dc9357SAndroid Build Coastguard Worker         }
146*f6dc9357SAndroid Build Coastguard Worker     return results (0 or 1) can depend from:
147*f6dc9357SAndroid Build Coastguard Worker       - unicode/non-unicode
148*f6dc9357SAndroid Build Coastguard Worker       - (SHGFI_USEFILEATTRIBUTES) flag
149*f6dc9357SAndroid Build Coastguard Worker       - exact file extension (.exe).
150*f6dc9357SAndroid Build Coastguard Worker   }
151*f6dc9357SAndroid Build Coastguard Worker */
152*f6dc9357SAndroid Build Coastguard Worker   int iconIndex = -1;
153*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < 2; i++)
154*f6dc9357SAndroid Build Coastguard Worker   {
155*f6dc9357SAndroid Build Coastguard Worker     CSysString name = GetSystemString(fileInfo.Path);
156*f6dc9357SAndroid Build Coastguard Worker     if (i != 0)
157*f6dc9357SAndroid Build Coastguard Worker     {
158*f6dc9357SAndroid Build Coastguard Worker       if (!fileInfo.Is_FileSystemFile)
159*f6dc9357SAndroid Build Coastguard Worker         break;
160*f6dc9357SAndroid Build Coastguard Worker       if (name.Len() < 4 ||
161*f6dc9357SAndroid Build Coastguard Worker           (!StringsAreEqualNoCase_Ascii(name.RightPtr(4), ".exe") &&
162*f6dc9357SAndroid Build Coastguard Worker            !StringsAreEqualNoCase_Ascii(name.RightPtr(4), ".ico")))
163*f6dc9357SAndroid Build Coastguard Worker         break;
164*f6dc9357SAndroid Build Coastguard Worker       // if path for ".exe" file is long, it returns default icon (shFileInfo.iIcon == 0).
165*f6dc9357SAndroid Build Coastguard Worker       // We don't want to show that default icon.
166*f6dc9357SAndroid Build Coastguard Worker       // But we will check for default icon later instead of MAX_PATH check here.
167*f6dc9357SAndroid Build Coastguard Worker       // if (name.Len() >= MAX_PATH) break; // optional
168*f6dc9357SAndroid Build Coastguard Worker     }
169*f6dc9357SAndroid Build Coastguard Worker     else
170*f6dc9357SAndroid Build Coastguard Worker     {
171*f6dc9357SAndroid Build Coastguard Worker       // we need only file extension with dot
172*f6dc9357SAndroid Build Coastguard Worker       const int separ = name.ReverseFind_PathSepar();
173*f6dc9357SAndroid Build Coastguard Worker       name.DeleteFrontal((unsigned)(separ + 1));
174*f6dc9357SAndroid Build Coastguard Worker       // if (name.Len() >= MAX_PATH)
175*f6dc9357SAndroid Build Coastguard Worker       {
176*f6dc9357SAndroid Build Coastguard Worker         const int dot = name.ReverseFind_Dot();
177*f6dc9357SAndroid Build Coastguard Worker         if (dot >= 0)
178*f6dc9357SAndroid Build Coastguard Worker           name.DeleteFrontal((unsigned)dot);
179*f6dc9357SAndroid Build Coastguard Worker         // else name.Empty(); to set default name below
180*f6dc9357SAndroid Build Coastguard Worker       }
181*f6dc9357SAndroid Build Coastguard Worker       // name.Empty(); // for debug
182*f6dc9357SAndroid Build Coastguard Worker     }
183*f6dc9357SAndroid Build Coastguard Worker 
184*f6dc9357SAndroid Build Coastguard Worker     if (name.IsEmpty())
185*f6dc9357SAndroid Build Coastguard Worker     {
186*f6dc9357SAndroid Build Coastguard Worker       // If we send empty name, SHGetFileInfo() returns some strange icon.
187*f6dc9357SAndroid Build Coastguard Worker       // So we use common dummy name without extension,
188*f6dc9357SAndroid Build Coastguard Worker       // and SHGetFileInfo() will return default icon (iIcon == 0)
189*f6dc9357SAndroid Build Coastguard Worker       name = "__file__";
190*f6dc9357SAndroid Build Coastguard Worker     }
191*f6dc9357SAndroid Build Coastguard Worker 
192*f6dc9357SAndroid Build Coastguard Worker     DWORD attrib = FILE_ATTRIBUTE_ARCHIVE;
193*f6dc9357SAndroid Build Coastguard Worker     if (fileInfo.Is_FileSystemFile)
194*f6dc9357SAndroid Build Coastguard Worker     {
195*f6dc9357SAndroid Build Coastguard Worker       NFile::NFind::CFileInfo fi;
196*f6dc9357SAndroid Build Coastguard Worker       if (fi.Find(us2fs(fileInfo.Path)) && !fi.IsAltStream && !fi.IsDir())
197*f6dc9357SAndroid Build Coastguard Worker         attrib = fi.Attrib;
198*f6dc9357SAndroid Build Coastguard Worker     }
199*f6dc9357SAndroid Build Coastguard Worker 
200*f6dc9357SAndroid Build Coastguard Worker     SHFILEINFO shFileInfo;
201*f6dc9357SAndroid Build Coastguard Worker     // ZeroMemory(&shFileInfo, sizeof(shFileInfo)); // optional
202*f6dc9357SAndroid Build Coastguard Worker     shFileInfo.hIcon = NULL; // optional
203*f6dc9357SAndroid Build Coastguard Worker     shFileInfo.iIcon = -1;   // optional
204*f6dc9357SAndroid Build Coastguard Worker     // memset(&shFileInfo, 1, sizeof(shFileInfo)); // for debug
205*f6dc9357SAndroid Build Coastguard Worker     const DWORD_PTR res = ::SHGetFileInfo(name, attrib,
206*f6dc9357SAndroid Build Coastguard Worker         &shFileInfo, sizeof(shFileInfo),
207*f6dc9357SAndroid Build Coastguard Worker         SHGFI_ICON | SHGFI_LARGEICON | SHGFI_SHELLICONSIZE |
208*f6dc9357SAndroid Build Coastguard Worker         // (i == 0 ? SHGFI_USEFILEATTRIBUTES : 0)
209*f6dc9357SAndroid Build Coastguard Worker         SHGFI_USEFILEATTRIBUTES
210*f6dc9357SAndroid Build Coastguard Worker         // we use SHGFI_USEFILEATTRIBUTES for second icon, because
211*f6dc9357SAndroid Build Coastguard Worker         // it still returns real icon from exe files
212*f6dc9357SAndroid Build Coastguard Worker         );
213*f6dc9357SAndroid Build Coastguard Worker     if (res && shFileInfo.hIcon)
214*f6dc9357SAndroid Build Coastguard Worker     {
215*f6dc9357SAndroid Build Coastguard Worker       // we don't show second icon, if icon index (iIcon) is same
216*f6dc9357SAndroid Build Coastguard Worker       // as first icon index of first shown icon (exe file without icon)
217*f6dc9357SAndroid Build Coastguard Worker       if (   shFileInfo.iIcon >= 0
218*f6dc9357SAndroid Build Coastguard Worker           && shFileInfo.iIcon != iconIndex
219*f6dc9357SAndroid Build Coastguard Worker           && (shFileInfo.iIcon != 0 || i == 0)) // we don't want default icon for second icon
220*f6dc9357SAndroid Build Coastguard Worker       {
221*f6dc9357SAndroid Build Coastguard Worker         iconIndex = shFileInfo.iIcon;
222*f6dc9357SAndroid Build Coastguard Worker         SetItemIcon(i == 0 ? iconID : iconID_2, shFileInfo.hIcon);
223*f6dc9357SAndroid Build Coastguard Worker       }
224*f6dc9357SAndroid Build Coastguard Worker       else
225*f6dc9357SAndroid Build Coastguard Worker         DestroyIcon(shFileInfo.hIcon);
226*f6dc9357SAndroid Build Coastguard Worker     }
227*f6dc9357SAndroid Build Coastguard Worker   }
228*f6dc9357SAndroid Build Coastguard Worker }
229*f6dc9357SAndroid Build Coastguard Worker 
230*f6dc9357SAndroid Build Coastguard Worker 
231*f6dc9357SAndroid Build Coastguard Worker 
OnInit()232*f6dc9357SAndroid Build Coastguard Worker bool COverwriteDialog::OnInit()
233*f6dc9357SAndroid Build Coastguard Worker {
234*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_LANG
235*f6dc9357SAndroid Build Coastguard Worker   LangSetWindowText(*this, IDD_OVERWRITE);
236*f6dc9357SAndroid Build Coastguard Worker   LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
237*f6dc9357SAndroid Build Coastguard Worker   #endif
238*f6dc9357SAndroid Build Coastguard Worker   SetFileInfoControl(OldFileInfo,
239*f6dc9357SAndroid Build Coastguard Worker       IDT_OVERWRITE_OLD_FILE_SIZE_TIME,
240*f6dc9357SAndroid Build Coastguard Worker       IDI_OVERWRITE_OLD_FILE,
241*f6dc9357SAndroid Build Coastguard Worker       IDI_OVERWRITE_OLD_FILE_2);
242*f6dc9357SAndroid Build Coastguard Worker   SetFileInfoControl(NewFileInfo,
243*f6dc9357SAndroid Build Coastguard Worker       IDT_OVERWRITE_NEW_FILE_SIZE_TIME,
244*f6dc9357SAndroid Build Coastguard Worker       IDI_OVERWRITE_NEW_FILE,
245*f6dc9357SAndroid Build Coastguard Worker       IDI_OVERWRITE_NEW_FILE_2);
246*f6dc9357SAndroid Build Coastguard Worker   NormalizePosition();
247*f6dc9357SAndroid Build Coastguard Worker 
248*f6dc9357SAndroid Build Coastguard Worker   if (!ShowExtraButtons)
249*f6dc9357SAndroid Build Coastguard Worker   {
250*f6dc9357SAndroid Build Coastguard Worker     HideItem(IDB_YES_TO_ALL);
251*f6dc9357SAndroid Build Coastguard Worker     HideItem(IDB_NO_TO_ALL);
252*f6dc9357SAndroid Build Coastguard Worker     HideItem(IDB_AUTO_RENAME);
253*f6dc9357SAndroid Build Coastguard Worker   }
254*f6dc9357SAndroid Build Coastguard Worker 
255*f6dc9357SAndroid Build Coastguard Worker   if (DefaultButton_is_NO)
256*f6dc9357SAndroid Build Coastguard Worker   {
257*f6dc9357SAndroid Build Coastguard Worker     PostMsg(DM_SETDEFID, IDNO);
258*f6dc9357SAndroid Build Coastguard Worker     HWND h = GetItem(IDNO);
259*f6dc9357SAndroid Build Coastguard Worker     PostMsg(WM_NEXTDLGCTL, (WPARAM)h, TRUE);
260*f6dc9357SAndroid Build Coastguard Worker     // ::SetFocus(h);
261*f6dc9357SAndroid Build Coastguard Worker   }
262*f6dc9357SAndroid Build Coastguard Worker 
263*f6dc9357SAndroid Build Coastguard Worker   return CModalDialog::OnInit();
264*f6dc9357SAndroid Build Coastguard Worker }
265*f6dc9357SAndroid Build Coastguard Worker 
OnDestroy()266*f6dc9357SAndroid Build Coastguard Worker bool COverwriteDialog::OnDestroy()
267*f6dc9357SAndroid Build Coastguard Worker {
268*f6dc9357SAndroid Build Coastguard Worker   SetItemIcon(IDI_OVERWRITE_OLD_FILE, NULL);
269*f6dc9357SAndroid Build Coastguard Worker   SetItemIcon(IDI_OVERWRITE_OLD_FILE_2, NULL);
270*f6dc9357SAndroid Build Coastguard Worker   SetItemIcon(IDI_OVERWRITE_NEW_FILE, NULL);
271*f6dc9357SAndroid Build Coastguard Worker   SetItemIcon(IDI_OVERWRITE_NEW_FILE_2, NULL);
272*f6dc9357SAndroid Build Coastguard Worker   return false; // we return (false) to perform default dialog operation
273*f6dc9357SAndroid Build Coastguard Worker }
274*f6dc9357SAndroid Build Coastguard Worker 
OnButtonClicked(unsigned buttonID,HWND buttonHWND)275*f6dc9357SAndroid Build Coastguard Worker bool COverwriteDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
276*f6dc9357SAndroid Build Coastguard Worker {
277*f6dc9357SAndroid Build Coastguard Worker   switch (buttonID)
278*f6dc9357SAndroid Build Coastguard Worker   {
279*f6dc9357SAndroid Build Coastguard Worker     case IDYES:
280*f6dc9357SAndroid Build Coastguard Worker     case IDNO:
281*f6dc9357SAndroid Build Coastguard Worker     case IDB_YES_TO_ALL:
282*f6dc9357SAndroid Build Coastguard Worker     case IDB_NO_TO_ALL:
283*f6dc9357SAndroid Build Coastguard Worker     case IDB_AUTO_RENAME:
284*f6dc9357SAndroid Build Coastguard Worker       End((INT_PTR)buttonID);
285*f6dc9357SAndroid Build Coastguard Worker       return true;
286*f6dc9357SAndroid Build Coastguard Worker   }
287*f6dc9357SAndroid Build Coastguard Worker   return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
288*f6dc9357SAndroid Build Coastguard Worker }
289