1*f6dc9357SAndroid Build Coastguard Worker // OverwriteDialogFar.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 <stdio.h>
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/StringConvert.h"
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/IntToString.h"
9*f6dc9357SAndroid Build Coastguard Worker
10*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileName.h"
11*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariantConv.h"
12*f6dc9357SAndroid Build Coastguard Worker
13*f6dc9357SAndroid Build Coastguard Worker #include "FarUtils.h"
14*f6dc9357SAndroid Build Coastguard Worker #include "Messages.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker #include "OverwriteDialogFar.h"
17*f6dc9357SAndroid Build Coastguard Worker
18*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
19*f6dc9357SAndroid Build Coastguard Worker using namespace NFar;
20*f6dc9357SAndroid Build Coastguard Worker
21*f6dc9357SAndroid Build Coastguard Worker namespace NOverwriteDialog {
22*f6dc9357SAndroid Build Coastguard Worker
23*f6dc9357SAndroid Build Coastguard Worker struct CFileInfoStrings
24*f6dc9357SAndroid Build Coastguard Worker {
25*f6dc9357SAndroid Build Coastguard Worker AString Size;
26*f6dc9357SAndroid Build Coastguard Worker AString Time;
27*f6dc9357SAndroid Build Coastguard Worker };
28*f6dc9357SAndroid Build Coastguard Worker
SetFileInfoStrings(const CFileInfo & fileInfo,CFileInfoStrings & fileInfoStrings)29*f6dc9357SAndroid Build Coastguard Worker static void SetFileInfoStrings(const CFileInfo &fileInfo,
30*f6dc9357SAndroid Build Coastguard Worker CFileInfoStrings &fileInfoStrings)
31*f6dc9357SAndroid Build Coastguard Worker {
32*f6dc9357SAndroid Build Coastguard Worker char buffer[256];
33*f6dc9357SAndroid Build Coastguard Worker
34*f6dc9357SAndroid Build Coastguard Worker if (fileInfo.SizeIsDefined)
35*f6dc9357SAndroid Build Coastguard Worker {
36*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString(fileInfo.Size, buffer);
37*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Size = buffer;
38*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Size.Add_Space();
39*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Size += g_StartupInfo.GetMsgString(NMessageID::kOverwriteBytes);
40*f6dc9357SAndroid Build Coastguard Worker }
41*f6dc9357SAndroid Build Coastguard Worker else
42*f6dc9357SAndroid Build Coastguard Worker {
43*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Size = "";
44*f6dc9357SAndroid Build Coastguard Worker }
45*f6dc9357SAndroid Build Coastguard Worker
46*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Time.Empty();
47*f6dc9357SAndroid Build Coastguard Worker if (fileInfo.TimeIsDefined)
48*f6dc9357SAndroid Build Coastguard Worker {
49*f6dc9357SAndroid Build Coastguard Worker char timeString[64];
50*f6dc9357SAndroid Build Coastguard Worker ConvertUtcFileTimeToString(fileInfo.Time, timeString);
51*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Time = g_StartupInfo.GetMsgString(NMessageID::kOverwriteModifiedOn);
52*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Time.Add_Space();
53*f6dc9357SAndroid Build Coastguard Worker fileInfoStrings.Time += timeString;
54*f6dc9357SAndroid Build Coastguard Worker }
55*f6dc9357SAndroid Build Coastguard Worker }
56*f6dc9357SAndroid Build Coastguard Worker
ReduceString2(UString & s,unsigned size)57*f6dc9357SAndroid Build Coastguard Worker static void ReduceString2(UString &s, unsigned size)
58*f6dc9357SAndroid Build Coastguard Worker {
59*f6dc9357SAndroid Build Coastguard Worker if (!s.IsEmpty() && s.Back() == ' ')
60*f6dc9357SAndroid Build Coastguard Worker {
61*f6dc9357SAndroid Build Coastguard Worker // s += (wchar_t)(0x2423);
62*f6dc9357SAndroid Build Coastguard Worker s.InsertAtFront(L'\"');
63*f6dc9357SAndroid Build Coastguard Worker s += L'\"';
64*f6dc9357SAndroid Build Coastguard Worker }
65*f6dc9357SAndroid Build Coastguard Worker ReduceString(s, size);
66*f6dc9357SAndroid Build Coastguard Worker }
67*f6dc9357SAndroid Build Coastguard Worker
Execute(const CFileInfo & oldFileInfo,const CFileInfo & newFileInfo)68*f6dc9357SAndroid Build Coastguard Worker NResult::EEnum Execute(const CFileInfo &oldFileInfo, const CFileInfo &newFileInfo)
69*f6dc9357SAndroid Build Coastguard Worker {
70*f6dc9357SAndroid Build Coastguard Worker const int kYSize = 22;
71*f6dc9357SAndroid Build Coastguard Worker const int kXSize = 76;
72*f6dc9357SAndroid Build Coastguard Worker
73*f6dc9357SAndroid Build Coastguard Worker CFileInfoStrings oldFileInfoStrings;
74*f6dc9357SAndroid Build Coastguard Worker CFileInfoStrings newFileInfoStrings;
75*f6dc9357SAndroid Build Coastguard Worker
76*f6dc9357SAndroid Build Coastguard Worker SetFileInfoStrings(oldFileInfo, oldFileInfoStrings);
77*f6dc9357SAndroid Build Coastguard Worker SetFileInfoStrings(newFileInfo, newFileInfoStrings);
78*f6dc9357SAndroid Build Coastguard Worker
79*f6dc9357SAndroid Build Coastguard Worker const UString &oldName2 = oldFileInfo.Name;
80*f6dc9357SAndroid Build Coastguard Worker const UString &newName2 = newFileInfo.Name;
81*f6dc9357SAndroid Build Coastguard Worker
82*f6dc9357SAndroid Build Coastguard Worker int slashPos = oldName2.ReverseFind_PathSepar();
83*f6dc9357SAndroid Build Coastguard Worker UString pref1 = oldName2.Left(slashPos + 1);
84*f6dc9357SAndroid Build Coastguard Worker UString name1 = oldName2.Ptr(slashPos + 1);
85*f6dc9357SAndroid Build Coastguard Worker
86*f6dc9357SAndroid Build Coastguard Worker slashPos = newName2.ReverseFind_PathSepar();
87*f6dc9357SAndroid Build Coastguard Worker UString pref2 = newName2.Left(slashPos + 1);
88*f6dc9357SAndroid Build Coastguard Worker UString name2 = newName2.Ptr(slashPos + 1);
89*f6dc9357SAndroid Build Coastguard Worker
90*f6dc9357SAndroid Build Coastguard Worker const unsigned kNameOffset = 2;
91*f6dc9357SAndroid Build Coastguard Worker {
92*f6dc9357SAndroid Build Coastguard Worker const unsigned maxNameLen = kXSize - 9 - 2;
93*f6dc9357SAndroid Build Coastguard Worker ReduceString(pref1, maxNameLen);
94*f6dc9357SAndroid Build Coastguard Worker ReduceString(pref2, maxNameLen);
95*f6dc9357SAndroid Build Coastguard Worker ReduceString2(name1, maxNameLen - kNameOffset);
96*f6dc9357SAndroid Build Coastguard Worker ReduceString2(name2, maxNameLen - kNameOffset);
97*f6dc9357SAndroid Build Coastguard Worker }
98*f6dc9357SAndroid Build Coastguard Worker
99*f6dc9357SAndroid Build Coastguard Worker const AString pref1A (UnicodeStringToMultiByte(pref1, CP_OEMCP));
100*f6dc9357SAndroid Build Coastguard Worker const AString pref2A (UnicodeStringToMultiByte(pref2, CP_OEMCP));
101*f6dc9357SAndroid Build Coastguard Worker const AString name1A (UnicodeStringToMultiByte(name1, CP_OEMCP));
102*f6dc9357SAndroid Build Coastguard Worker const AString name2A (UnicodeStringToMultiByte(name2, CP_OEMCP));
103*f6dc9357SAndroid Build Coastguard Worker
104*f6dc9357SAndroid Build Coastguard Worker const struct CInitDialogItem initItems[]={
105*f6dc9357SAndroid Build Coastguard Worker { DI_DOUBLEBOX, 3, 1, kXSize - 4, kYSize - 2, false, false, 0, false, NMessageID::kOverwriteTitle, NULL, NULL },
106*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 5, 2, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessage1, NULL, NULL },
107*f6dc9357SAndroid Build Coastguard Worker
108*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 3, 3, 0, 0, false, false, DIF_BOXCOLOR|DIF_SEPARATOR, false, -1, "", NULL },
109*f6dc9357SAndroid Build Coastguard Worker
110*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 5, 4, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWouldYouLike, NULL, NULL },
111*f6dc9357SAndroid Build Coastguard Worker
112*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 6, 0, 0, false, false, 0, false, -1, pref1A, NULL },
113*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7 + kNameOffset, 7, 0, 0, false, false, 0, false, -1, name1A, NULL },
114*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 8, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Size, NULL },
115*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 9, 0, 0, false, false, 0, false, -1, oldFileInfoStrings.Time, NULL },
116*f6dc9357SAndroid Build Coastguard Worker
117*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 5, 11, 0, 0, false, false, 0, false, NMessageID::kOverwriteMessageWithtTisOne, NULL, NULL },
118*f6dc9357SAndroid Build Coastguard Worker
119*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 13, 0, 0, false, false, 0, false, -1, pref2A, NULL },
120*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7 + kNameOffset, 14, 0, 0, false, false, 0, false, -1, name2A, NULL },
121*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 15, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Size, NULL },
122*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 7, 16, 0, 0, false, false, 0, false, -1, newFileInfoStrings.Time, NULL },
123*f6dc9357SAndroid Build Coastguard Worker
124*f6dc9357SAndroid Build Coastguard Worker { DI_TEXT, 3, kYSize - 5, 0, 0, false, false, DIF_BOXCOLOR|DIF_SEPARATOR, false, -1, "", NULL },
125*f6dc9357SAndroid Build Coastguard Worker
126*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 4, 0, 0, true, false, DIF_CENTERGROUP, true, NMessageID::kOverwriteYes, NULL, NULL },
127*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteYesToAll, NULL, NULL },
128*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteNo, NULL, NULL },
129*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 4, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteNoToAll, NULL, NULL },
130*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteAutoRename, NULL, NULL },
131*f6dc9357SAndroid Build Coastguard Worker { DI_BUTTON, 0, kYSize - 3, 0, 0, false, false, DIF_CENTERGROUP, false, NMessageID::kOverwriteCancel, NULL, NULL }
132*f6dc9357SAndroid Build Coastguard Worker };
133*f6dc9357SAndroid Build Coastguard Worker
134*f6dc9357SAndroid Build Coastguard Worker const int kNumDialogItems = Z7_ARRAY_SIZE(initItems);
135*f6dc9357SAndroid Build Coastguard Worker FarDialogItem aDialogItems[kNumDialogItems];
136*f6dc9357SAndroid Build Coastguard Worker g_StartupInfo.InitDialogItems(initItems, aDialogItems, kNumDialogItems);
137*f6dc9357SAndroid Build Coastguard Worker const int anAskCode = g_StartupInfo.ShowDialog(kXSize, kYSize,
138*f6dc9357SAndroid Build Coastguard Worker NULL, aDialogItems, kNumDialogItems);
139*f6dc9357SAndroid Build Coastguard Worker const int kButtonStartPos = kNumDialogItems - 6;
140*f6dc9357SAndroid Build Coastguard Worker if (anAskCode >= kButtonStartPos && anAskCode < kNumDialogItems)
141*f6dc9357SAndroid Build Coastguard Worker return NResult::EEnum(anAskCode - kButtonStartPos);
142*f6dc9357SAndroid Build Coastguard Worker return NResult::kCancel;
143*f6dc9357SAndroid Build Coastguard Worker }
144*f6dc9357SAndroid Build Coastguard Worker
145*f6dc9357SAndroid Build Coastguard Worker }
146