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 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 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 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 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