1 // OverwriteDialog.cpp
2
3 #include "StdAfx.h"
4
5 #include "../../../Common/StringConvert.h"
6
7 #include "../../../Windows/PropVariantConv.h"
8 #include "../../../Windows/ResourceString.h"
9
10 #include "../../../Windows/Control/Static.h"
11
12 #include "FormatUtils.h"
13 #include "LangUtils.h"
14 #include "OverwriteDialog.h"
15
16 #include "PropertyNameRes.h"
17
18 using namespace NWindows;
19
20 #ifdef LANG
21 static const UInt32 kLangIDs[] =
22 {
23 IDT_OVERWRITE_HEADER,
24 IDT_OVERWRITE_QUESTION_BEGIN,
25 IDT_OVERWRITE_QUESTION_END,
26 IDB_YES_TO_ALL,
27 IDB_NO_TO_ALL,
28 IDB_AUTO_RENAME
29 };
30 #endif
31
32 static const unsigned kCurrentFileNameSizeLimit = 82;
33 static const unsigned kCurrentFileNameSizeLimit2 = 30;
34
ReduceString(UString & s)35 void COverwriteDialog::ReduceString(UString &s)
36 {
37 unsigned size = _isBig ? kCurrentFileNameSizeLimit : kCurrentFileNameSizeLimit2;
38 if (s.Len() > size)
39 {
40 s.Delete(size / 2, s.Len() - size);
41 s.Insert(size / 2, L" ... ");
42 }
43 }
44
SetFileInfoControl(int textID,int iconID,const NOverwriteDialog::CFileInfo & fileInfo)45 void COverwriteDialog::SetFileInfoControl(int textID, int iconID,
46 const NOverwriteDialog::CFileInfo &fileInfo)
47 {
48 UString sizeString;
49 if (fileInfo.SizeIsDefined)
50 sizeString = MyFormatNew(IDS_FILE_SIZE, NumberToString(fileInfo.Size));
51
52 const UString &fileName = fileInfo.Name;
53 int slashPos = fileName.ReverseFind(WCHAR_PATH_SEPARATOR);
54 UString s1 = fileName.Left(slashPos + 1);
55 UString s2 = fileName.Ptr(slashPos + 1);
56
57 ReduceString(s1);
58 ReduceString(s2);
59
60 UString s = s1;
61 s += L'\n';
62 s += s2;
63 s += L'\n';
64 s += sizeString;
65 s += L'\n';
66
67 if (fileInfo.TimeIsDefined)
68 {
69 FILETIME localFileTime;
70 if (!FileTimeToLocalFileTime(&fileInfo.Time, &localFileTime))
71 throw 4190402;
72 s += LangString(IDS_PROP_MTIME);
73 s += L": ";
74 wchar_t t[32];
75 ConvertFileTimeToString(localFileTime, t);
76 s += t;
77 }
78
79 NControl::CDialogChildControl control;
80 control.Init(*this, textID);
81 control.SetText(s);
82
83 SHFILEINFO shellFileInfo;
84 if (::SHGetFileInfo(
85 GetSystemString(fileInfo.Name), FILE_ATTRIBUTE_NORMAL, &shellFileInfo,
86 sizeof(shellFileInfo), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_LARGEICON))
87 {
88 NControl::CStatic staticContol;
89 staticContol.Attach(GetItem(iconID));
90 staticContol.SetIcon(shellFileInfo.hIcon);
91 }
92 }
93
OnInit()94 bool COverwriteDialog::OnInit()
95 {
96 #ifdef LANG
97 LangSetWindowText(*this, IDD_OVERWRITE);
98 LangSetDlgItems(*this, kLangIDs, ARRAY_SIZE(kLangIDs));
99 #endif
100 SetFileInfoControl(IDT_OVERWRITE_OLD_FILE_SIZE_TIME, IDI_OVERWRITE_OLD_FILE, OldFileInfo);
101 SetFileInfoControl(IDT_OVERWRITE_NEW_FILE_SIZE_TIME, IDI_OVERWRITE_NEW_FILE, NewFileInfo);
102 NormalizePosition();
103 return CModalDialog::OnInit();
104 }
105
OnButtonClicked(int buttonID,HWND buttonHWND)106 bool COverwriteDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
107 {
108 switch (buttonID)
109 {
110 case IDYES:
111 case IDNO:
112 case IDB_YES_TO_ALL:
113 case IDB_NO_TO_ALL:
114 case IDB_AUTO_RENAME:
115 End(buttonID);
116 return true;
117 }
118 return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
119 }
120