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