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