1 // OverwriteDialog.cpp
2 
3 #include "StdAfx.h"
4 
5 #include "OverwriteDialog.h"
6 
7 #include "Common/StringConvert.h"
8 #include "Windows/FileName.h"
9 #include "Windows/Defs.h"
10 #include "Windows/ResourceString.h"
11 #include "Windows/Control/Static.h"
12 #include "Windows/PropVariantConversions.h"
13 
14 #include "FormatUtils.h"
15 
16 // #include "../resource.h"
17 
18 #ifdef LANG
19 #include "LangUtils.h"
20 #endif
21 
22 using namespace NWindows;
23 
24 #ifdef LANG
25 static CIDLangPair kIDLangPairs[] =
26 {
27   { IDC_STATIC_OVERWRITE_HEADER,         0x02000901},
28   { IDC_STATIC_OVERWRITE_QUESTION_BEGIN, 0x02000902 },
29   { IDC_STATIC_OVERWRITE_QUESTION_END,   0x02000903 },
30   { IDYES, 0x02000705 },
31   { IDC_BUTTON_OVERWRITE_YES_TO_ALL, 0x02000707 },
32   { IDNO,  0x02000709 },
33   { IDC_BUTTON_OVERWRITE_NO_TO_ALL,0x0200070B },
34   { IDC_BUTTON_OVERWRITE_AUTO_RENAME, 0x02000911 },
35   { IDCANCEL, 0x02000711 }
36 };
37 #endif
38 
SetFileInfoControl(int textID,int iconID,const NOverwriteDialog::CFileInfo & fileInfo)39 void COverwriteDialog::SetFileInfoControl(int textID, int iconID,
40     const NOverwriteDialog::CFileInfo &fileInfo)
41 {
42   UString sizeString;
43   if (fileInfo.SizeIsDefined)
44     sizeString = MyFormatNew(IDS_FILE_SIZE,
45         #ifdef LANG
46         0x02000982,
47         #endif
48         NumberToString(fileInfo.Size));
49 
50   UString reducedName;
51   const int kLineSize = 88;
52   for (int i = 0; i < fileInfo.Name.Length();)
53   {
54     reducedName += fileInfo.Name.Mid(i, kLineSize);
55     reducedName += L" ";
56     i += kLineSize;
57   }
58 
59   UString fullString = reducedName;
60   fullString += L"\n";
61   fullString += sizeString;
62   fullString += L"\n";
63 
64   if (fileInfo.TimeIsDefined)
65   {
66     UString timeString;
67     FILETIME localFileTime;
68     if (!FileTimeToLocalFileTime(&fileInfo.Time, &localFileTime))
69       throw 4190402;
70     timeString = ConvertFileTimeToString(localFileTime);
71 
72     fullString +=
73     #ifdef LANG
74     LangString(IDS_FILE_MODIFIED, 0x02000983);
75     #else
76     MyLoadStringW(IDS_FILE_MODIFIED);
77     #endif
78 
79     fullString += L" ";
80     fullString += timeString;
81   }
82 
83   NWindows::NControl::CDialogChildControl control;
84   control.Init(*this, textID);
85   control.SetText(fullString);
86 
87 #ifdef _WIN32  // FIXME
88   SHFILEINFO shellFileInfo;
89   if (::SHGetFileInfo(
90       GetSystemString(fileInfo.Name), FILE_ATTRIBUTE_NORMAL, &shellFileInfo,
91       sizeof(shellFileInfo), SHGFI_ICON | SHGFI_USEFILEATTRIBUTES | SHGFI_LARGEICON))
92   {
93     NControl::CStatic staticContol;
94     staticContol.Attach(GetItem(iconID));
95     staticContol.SetIcon(shellFileInfo.hIcon);
96   }
97 #endif
98 }
99 
OnInit()100 bool COverwriteDialog::OnInit()
101 {
102   #ifdef LANG
103   LangSetWindowText(HWND(*this), 0x02000900);
104   LangSetDlgItemsText(HWND(*this), kIDLangPairs, sizeof(kIDLangPairs) / sizeof(kIDLangPairs[0]));
105   #endif
106   SetFileInfoControl(IDC_STATIC_OVERWRITE_OLD_FILE_SIZE_TIME,
107       IDC_STATIC_OVERWRITE_OLD_FILE_ICON, OldFileInfo);
108   SetFileInfoControl(IDC_STATIC_OVERWRITE_NEW_FILE_SIZE_TIME,
109       IDC_STATIC_OVERWRITE_NEW_FILE_ICON, NewFileInfo);
110   return CModalDialog::OnInit();
111 }
112 
OnButtonClicked(int buttonID,HWND buttonHWND)113 bool COverwriteDialog::OnButtonClicked(int buttonID, HWND buttonHWND)
114 {
115   switch(buttonID)
116   {
117     case IDYES:
118     case IDC_BUTTON_OVERWRITE_YES_TO_ALL:
119     case IDNO:
120     case IDC_BUTTON_OVERWRITE_NO_TO_ALL:
121     case IDC_BUTTON_OVERWRITE_AUTO_RENAME:
122       End(buttonID);
123       return true;
124   }
125   return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
126 }
127