xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/GUI/ExtractDialog.cpp (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // ExtractDialog.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 "../../../Common/StringConvert.h"
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Wildcard.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileName.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileDir.h"
10*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/ResourceString.h"
11*f6dc9357SAndroid Build Coastguard Worker 
12*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_REGISTRY
13*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/HelpUtils.h"
14*f6dc9357SAndroid Build Coastguard Worker #endif
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker 
17*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/BrowseDialog.h"
18*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/LangUtils.h"
19*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/resourceGui.h"
20*f6dc9357SAndroid Build Coastguard Worker 
21*f6dc9357SAndroid Build Coastguard Worker #include "ExtractDialog.h"
22*f6dc9357SAndroid Build Coastguard Worker #include "ExtractDialogRes.h"
23*f6dc9357SAndroid Build Coastguard Worker #include "ExtractRes.h"
24*f6dc9357SAndroid Build Coastguard Worker 
25*f6dc9357SAndroid Build Coastguard Worker using namespace NWindows;
26*f6dc9357SAndroid Build Coastguard Worker using namespace NFile;
27*f6dc9357SAndroid Build Coastguard Worker using namespace NName;
28*f6dc9357SAndroid Build Coastguard Worker 
29*f6dc9357SAndroid Build Coastguard Worker extern HINSTANCE g_hInstance;
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
32*f6dc9357SAndroid Build Coastguard Worker 
33*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kPathMode_IDs[] =
34*f6dc9357SAndroid Build Coastguard Worker {
35*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_PATHS_FULL,
36*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_PATHS_NO,
37*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_PATHS_ABS
38*f6dc9357SAndroid Build Coastguard Worker };
39*f6dc9357SAndroid Build Coastguard Worker 
40*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kOverwriteMode_IDs[] =
41*f6dc9357SAndroid Build Coastguard Worker {
42*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_OVERWRITE_ASK,
43*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_OVERWRITE_WITHOUT_PROMPT,
44*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_OVERWRITE_SKIP_EXISTING,
45*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_OVERWRITE_RENAME,
46*f6dc9357SAndroid Build Coastguard Worker   IDS_EXTRACT_OVERWRITE_RENAME_EXISTING
47*f6dc9357SAndroid Build Coastguard Worker };
48*f6dc9357SAndroid Build Coastguard Worker 
49*f6dc9357SAndroid Build Coastguard Worker static const
50*f6dc9357SAndroid Build Coastguard Worker   // NExtract::NPathMode::EEnum
51*f6dc9357SAndroid Build Coastguard Worker   int
52*f6dc9357SAndroid Build Coastguard Worker   kPathModeButtonsVals[] =
53*f6dc9357SAndroid Build Coastguard Worker {
54*f6dc9357SAndroid Build Coastguard Worker   NExtract::NPathMode::kFullPaths,
55*f6dc9357SAndroid Build Coastguard Worker   NExtract::NPathMode::kNoPaths,
56*f6dc9357SAndroid Build Coastguard Worker   NExtract::NPathMode::kAbsPaths
57*f6dc9357SAndroid Build Coastguard Worker };
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker static const
60*f6dc9357SAndroid Build Coastguard Worker   int
61*f6dc9357SAndroid Build Coastguard Worker   // NExtract::NOverwriteMode::EEnum
62*f6dc9357SAndroid Build Coastguard Worker   kOverwriteButtonsVals[] =
63*f6dc9357SAndroid Build Coastguard Worker {
64*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::kAsk,
65*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::kOverwrite,
66*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::kSkip,
67*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::kRename,
68*f6dc9357SAndroid Build Coastguard Worker   NExtract::NOverwriteMode::kRenameExisting
69*f6dc9357SAndroid Build Coastguard Worker };
70*f6dc9357SAndroid Build Coastguard Worker 
71*f6dc9357SAndroid Build Coastguard Worker #endif
72*f6dc9357SAndroid Build Coastguard Worker 
73*f6dc9357SAndroid Build Coastguard Worker #ifdef Z7_LANG
74*f6dc9357SAndroid Build Coastguard Worker 
75*f6dc9357SAndroid Build Coastguard Worker static const UInt32 kLangIDs[] =
76*f6dc9357SAndroid Build Coastguard Worker {
77*f6dc9357SAndroid Build Coastguard Worker   IDT_EXTRACT_EXTRACT_TO,
78*f6dc9357SAndroid Build Coastguard Worker   IDT_EXTRACT_PATH_MODE,
79*f6dc9357SAndroid Build Coastguard Worker   IDT_EXTRACT_OVERWRITE_MODE,
80*f6dc9357SAndroid Build Coastguard Worker   // IDX_EXTRACT_ALT_STREAMS,
81*f6dc9357SAndroid Build Coastguard Worker   IDX_EXTRACT_NT_SECUR,
82*f6dc9357SAndroid Build Coastguard Worker   IDX_EXTRACT_ELIM_DUP,
83*f6dc9357SAndroid Build Coastguard Worker   IDG_PASSWORD,
84*f6dc9357SAndroid Build Coastguard Worker   IDX_PASSWORD_SHOW
85*f6dc9357SAndroid Build Coastguard Worker };
86*f6dc9357SAndroid Build Coastguard Worker #endif
87*f6dc9357SAndroid Build Coastguard Worker 
88*f6dc9357SAndroid Build Coastguard Worker // static const int kWildcardsButtonIndex = 2;
89*f6dc9357SAndroid Build Coastguard Worker 
90*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_REGISTRY
91*f6dc9357SAndroid Build Coastguard Worker static const unsigned kHistorySize = 16;
92*f6dc9357SAndroid Build Coastguard Worker #endif
93*f6dc9357SAndroid Build Coastguard Worker 
94*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
95*f6dc9357SAndroid Build Coastguard Worker 
96*f6dc9357SAndroid Build Coastguard Worker // it's used in CompressDialog also
97*f6dc9357SAndroid Build Coastguard Worker void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal);
AddComboItems(NControl::CComboBox & combo,const UInt32 * langIDs,unsigned numItems,const int * values,int curVal)98*f6dc9357SAndroid Build Coastguard Worker void AddComboItems(NControl::CComboBox &combo, const UInt32 *langIDs, unsigned numItems, const int *values, int curVal)
99*f6dc9357SAndroid Build Coastguard Worker {
100*f6dc9357SAndroid Build Coastguard Worker   unsigned curSel = 0;
101*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < numItems; i++)
102*f6dc9357SAndroid Build Coastguard Worker   {
103*f6dc9357SAndroid Build Coastguard Worker     UString s = LangString(langIDs[i]);
104*f6dc9357SAndroid Build Coastguard Worker     s.RemoveChar(L'&');
105*f6dc9357SAndroid Build Coastguard Worker     const int index = (int)combo.AddString(s);
106*f6dc9357SAndroid Build Coastguard Worker     combo.SetItemData(index, (LPARAM)i);
107*f6dc9357SAndroid Build Coastguard Worker     if (values[i] == curVal)
108*f6dc9357SAndroid Build Coastguard Worker       curSel = i;
109*f6dc9357SAndroid Build Coastguard Worker   }
110*f6dc9357SAndroid Build Coastguard Worker   combo.SetCurSel(curSel);
111*f6dc9357SAndroid Build Coastguard Worker }
112*f6dc9357SAndroid Build Coastguard Worker 
113*f6dc9357SAndroid Build Coastguard Worker // it's used in CompressDialog also
114*f6dc9357SAndroid Build Coastguard Worker bool GetBoolsVal(const CBoolPair &b1, const CBoolPair &b2);
GetBoolsVal(const CBoolPair & b1,const CBoolPair & b2)115*f6dc9357SAndroid Build Coastguard Worker bool GetBoolsVal(const CBoolPair &b1, const CBoolPair &b2)
116*f6dc9357SAndroid Build Coastguard Worker {
117*f6dc9357SAndroid Build Coastguard Worker   if (b1.Def) return b1.Val;
118*f6dc9357SAndroid Build Coastguard Worker   if (b2.Def) return b2.Val;
119*f6dc9357SAndroid Build Coastguard Worker   return b1.Val;
120*f6dc9357SAndroid Build Coastguard Worker }
121*f6dc9357SAndroid Build Coastguard Worker 
CheckButton_TwoBools(UINT id,const CBoolPair & b1,const CBoolPair & b2)122*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::CheckButton_TwoBools(UINT id, const CBoolPair &b1, const CBoolPair &b2)
123*f6dc9357SAndroid Build Coastguard Worker {
124*f6dc9357SAndroid Build Coastguard Worker   CheckButton(id, GetBoolsVal(b1, b2));
125*f6dc9357SAndroid Build Coastguard Worker }
126*f6dc9357SAndroid Build Coastguard Worker 
GetButton_Bools(UINT id,CBoolPair & b1,CBoolPair & b2)127*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::GetButton_Bools(UINT id, CBoolPair &b1, CBoolPair &b2)
128*f6dc9357SAndroid Build Coastguard Worker {
129*f6dc9357SAndroid Build Coastguard Worker   const bool val = IsButtonCheckedBool(id);
130*f6dc9357SAndroid Build Coastguard Worker   const bool oldVal = GetBoolsVal(b1, b2);
131*f6dc9357SAndroid Build Coastguard Worker   if (val != oldVal)
132*f6dc9357SAndroid Build Coastguard Worker     b1.Def = b2.Def = true;
133*f6dc9357SAndroid Build Coastguard Worker   b1.Val = b2.Val = val;
134*f6dc9357SAndroid Build Coastguard Worker }
135*f6dc9357SAndroid Build Coastguard Worker 
136*f6dc9357SAndroid Build Coastguard Worker #endif
137*f6dc9357SAndroid Build Coastguard Worker 
OnInit()138*f6dc9357SAndroid Build Coastguard Worker bool CExtractDialog::OnInit()
139*f6dc9357SAndroid Build Coastguard Worker {
140*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_LANG
141*f6dc9357SAndroid Build Coastguard Worker   {
142*f6dc9357SAndroid Build Coastguard Worker     UString s;
143*f6dc9357SAndroid Build Coastguard Worker     LangString_OnlyFromLangFile(IDD_EXTRACT, s);
144*f6dc9357SAndroid Build Coastguard Worker     if (s.IsEmpty())
145*f6dc9357SAndroid Build Coastguard Worker       GetText(s);
146*f6dc9357SAndroid Build Coastguard Worker     if (!ArcPath.IsEmpty())
147*f6dc9357SAndroid Build Coastguard Worker     {
148*f6dc9357SAndroid Build Coastguard Worker       s += " : ";
149*f6dc9357SAndroid Build Coastguard Worker       s += ArcPath;
150*f6dc9357SAndroid Build Coastguard Worker     }
151*f6dc9357SAndroid Build Coastguard Worker     SetText(s);
152*f6dc9357SAndroid Build Coastguard Worker     // LangSetWindowText(*this, IDD_EXTRACT);
153*f6dc9357SAndroid Build Coastguard Worker     LangSetDlgItems(*this, kLangIDs, Z7_ARRAY_SIZE(kLangIDs));
154*f6dc9357SAndroid Build Coastguard Worker   }
155*f6dc9357SAndroid Build Coastguard Worker   #endif
156*f6dc9357SAndroid Build Coastguard Worker 
157*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
158*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.Attach(GetItem(IDE_EXTRACT_PASSWORD));
159*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.SetText(Password);
160*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.SetPasswordChar(TEXT('*'));
161*f6dc9357SAndroid Build Coastguard Worker   _pathName.Attach(GetItem(IDE_EXTRACT_NAME));
162*f6dc9357SAndroid Build Coastguard Worker   #endif
163*f6dc9357SAndroid Build Coastguard Worker 
164*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_NO_REGISTRY
165*f6dc9357SAndroid Build Coastguard Worker 
166*f6dc9357SAndroid Build Coastguard Worker   PathMode = NExtract::NPathMode::kFullPaths;
167*f6dc9357SAndroid Build Coastguard Worker   OverwriteMode = NExtract::NOverwriteMode::kAsk;
168*f6dc9357SAndroid Build Coastguard Worker 
169*f6dc9357SAndroid Build Coastguard Worker   #else
170*f6dc9357SAndroid Build Coastguard Worker 
171*f6dc9357SAndroid Build Coastguard Worker   _info.Load();
172*f6dc9357SAndroid Build Coastguard Worker 
173*f6dc9357SAndroid Build Coastguard Worker   if (_info.PathMode == NExtract::NPathMode::kCurPaths)
174*f6dc9357SAndroid Build Coastguard Worker     _info.PathMode = NExtract::NPathMode::kFullPaths;
175*f6dc9357SAndroid Build Coastguard Worker 
176*f6dc9357SAndroid Build Coastguard Worker   if (!PathMode_Force && _info.PathMode_Force)
177*f6dc9357SAndroid Build Coastguard Worker     PathMode = _info.PathMode;
178*f6dc9357SAndroid Build Coastguard Worker   if (!OverwriteMode_Force && _info.OverwriteMode_Force)
179*f6dc9357SAndroid Build Coastguard Worker     OverwriteMode = _info.OverwriteMode;
180*f6dc9357SAndroid Build Coastguard Worker 
181*f6dc9357SAndroid Build Coastguard Worker   // CheckButton_TwoBools(IDX_EXTRACT_ALT_STREAMS, AltStreams, _info.AltStreams);
182*f6dc9357SAndroid Build Coastguard Worker   CheckButton_TwoBools(IDX_EXTRACT_NT_SECUR,    NtSecurity, _info.NtSecurity);
183*f6dc9357SAndroid Build Coastguard Worker   CheckButton_TwoBools(IDX_EXTRACT_ELIM_DUP,    ElimDup,    _info.ElimDup);
184*f6dc9357SAndroid Build Coastguard Worker 
185*f6dc9357SAndroid Build Coastguard Worker   CheckButton(IDX_PASSWORD_SHOW, _info.ShowPassword.Val);
186*f6dc9357SAndroid Build Coastguard Worker   UpdatePasswordControl();
187*f6dc9357SAndroid Build Coastguard Worker 
188*f6dc9357SAndroid Build Coastguard Worker   #endif
189*f6dc9357SAndroid Build Coastguard Worker 
190*f6dc9357SAndroid Build Coastguard Worker   _path.Attach(GetItem(IDC_EXTRACT_PATH));
191*f6dc9357SAndroid Build Coastguard Worker 
192*f6dc9357SAndroid Build Coastguard Worker   UString pathPrefix = DirPath;
193*f6dc9357SAndroid Build Coastguard Worker 
194*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
195*f6dc9357SAndroid Build Coastguard Worker 
196*f6dc9357SAndroid Build Coastguard Worker   if (_info.SplitDest.Val)
197*f6dc9357SAndroid Build Coastguard Worker   {
198*f6dc9357SAndroid Build Coastguard Worker     CheckButton(IDX_EXTRACT_NAME_ENABLE, true);
199*f6dc9357SAndroid Build Coastguard Worker     UString pathName;
200*f6dc9357SAndroid Build Coastguard Worker     SplitPathToParts_Smart(DirPath, pathPrefix, pathName);
201*f6dc9357SAndroid Build Coastguard Worker     if (pathPrefix.IsEmpty())
202*f6dc9357SAndroid Build Coastguard Worker       pathPrefix = pathName;
203*f6dc9357SAndroid Build Coastguard Worker     else
204*f6dc9357SAndroid Build Coastguard Worker       _pathName.SetText(pathName);
205*f6dc9357SAndroid Build Coastguard Worker   }
206*f6dc9357SAndroid Build Coastguard Worker   else
207*f6dc9357SAndroid Build Coastguard Worker     ShowItem_Bool(IDE_EXTRACT_NAME, false);
208*f6dc9357SAndroid Build Coastguard Worker 
209*f6dc9357SAndroid Build Coastguard Worker   #endif
210*f6dc9357SAndroid Build Coastguard Worker 
211*f6dc9357SAndroid Build Coastguard Worker   _path.SetText(pathPrefix);
212*f6dc9357SAndroid Build Coastguard Worker 
213*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_NO_REGISTRY
214*f6dc9357SAndroid Build Coastguard Worker   for (unsigned i = 0; i < _info.Paths.Size() && i < kHistorySize; i++)
215*f6dc9357SAndroid Build Coastguard Worker     _path.AddString(_info.Paths[i]);
216*f6dc9357SAndroid Build Coastguard Worker   #endif
217*f6dc9357SAndroid Build Coastguard Worker 
218*f6dc9357SAndroid Build Coastguard Worker   /*
219*f6dc9357SAndroid Build Coastguard Worker   if (_info.Paths.Size() > 0)
220*f6dc9357SAndroid Build Coastguard Worker     _path.SetCurSel(0);
221*f6dc9357SAndroid Build Coastguard Worker   else
222*f6dc9357SAndroid Build Coastguard Worker     _path.SetCurSel(-1);
223*f6dc9357SAndroid Build Coastguard Worker   */
224*f6dc9357SAndroid Build Coastguard Worker 
225*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
226*f6dc9357SAndroid Build Coastguard Worker 
227*f6dc9357SAndroid Build Coastguard Worker   _pathMode.Attach(GetItem(IDC_EXTRACT_PATH_MODE));
228*f6dc9357SAndroid Build Coastguard Worker   _overwriteMode.Attach(GetItem(IDC_EXTRACT_OVERWRITE_MODE));
229*f6dc9357SAndroid Build Coastguard Worker 
230*f6dc9357SAndroid Build Coastguard Worker   AddComboItems(_pathMode, kPathMode_IDs, Z7_ARRAY_SIZE(kPathMode_IDs), kPathModeButtonsVals, PathMode);
231*f6dc9357SAndroid Build Coastguard Worker   AddComboItems(_overwriteMode, kOverwriteMode_IDs, Z7_ARRAY_SIZE(kOverwriteMode_IDs), kOverwriteButtonsVals, OverwriteMode);
232*f6dc9357SAndroid Build Coastguard Worker 
233*f6dc9357SAndroid Build Coastguard Worker   #endif
234*f6dc9357SAndroid Build Coastguard Worker 
235*f6dc9357SAndroid Build Coastguard Worker   HICON icon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_ICON));
236*f6dc9357SAndroid Build Coastguard Worker   SetIcon(ICON_BIG, icon);
237*f6dc9357SAndroid Build Coastguard Worker 
238*f6dc9357SAndroid Build Coastguard Worker   // CWindow filesWindow = GetItem(IDC_EXTRACT_RADIO_FILES);
239*f6dc9357SAndroid Build Coastguard Worker   // filesWindow.Enable(_enableFilesButton);
240*f6dc9357SAndroid Build Coastguard Worker 
241*f6dc9357SAndroid Build Coastguard Worker   NormalizePosition();
242*f6dc9357SAndroid Build Coastguard Worker 
243*f6dc9357SAndroid Build Coastguard Worker   return CModalDialog::OnInit();
244*f6dc9357SAndroid Build Coastguard Worker }
245*f6dc9357SAndroid Build Coastguard Worker 
246*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_SFX
UpdatePasswordControl()247*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::UpdatePasswordControl()
248*f6dc9357SAndroid Build Coastguard Worker {
249*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.SetPasswordChar(IsShowPasswordChecked() ? 0 : TEXT('*'));
250*f6dc9357SAndroid Build Coastguard Worker   UString password;
251*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.GetText(password);
252*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.SetText(password);
253*f6dc9357SAndroid Build Coastguard Worker }
254*f6dc9357SAndroid Build Coastguard Worker #endif
255*f6dc9357SAndroid Build Coastguard Worker 
OnButtonClicked(unsigned buttonID,HWND buttonHWND)256*f6dc9357SAndroid Build Coastguard Worker bool CExtractDialog::OnButtonClicked(unsigned buttonID, HWND buttonHWND)
257*f6dc9357SAndroid Build Coastguard Worker {
258*f6dc9357SAndroid Build Coastguard Worker   switch (buttonID)
259*f6dc9357SAndroid Build Coastguard Worker   {
260*f6dc9357SAndroid Build Coastguard Worker     case IDB_EXTRACT_SET_PATH:
261*f6dc9357SAndroid Build Coastguard Worker       OnButtonSetPath();
262*f6dc9357SAndroid Build Coastguard Worker       return true;
263*f6dc9357SAndroid Build Coastguard Worker     #ifndef Z7_SFX
264*f6dc9357SAndroid Build Coastguard Worker     case IDX_EXTRACT_NAME_ENABLE:
265*f6dc9357SAndroid Build Coastguard Worker       ShowItem_Bool(IDE_EXTRACT_NAME, IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE));
266*f6dc9357SAndroid Build Coastguard Worker       return true;
267*f6dc9357SAndroid Build Coastguard Worker     case IDX_PASSWORD_SHOW:
268*f6dc9357SAndroid Build Coastguard Worker     {
269*f6dc9357SAndroid Build Coastguard Worker       UpdatePasswordControl();
270*f6dc9357SAndroid Build Coastguard Worker       return true;
271*f6dc9357SAndroid Build Coastguard Worker     }
272*f6dc9357SAndroid Build Coastguard Worker     #endif
273*f6dc9357SAndroid Build Coastguard Worker   }
274*f6dc9357SAndroid Build Coastguard Worker   return CModalDialog::OnButtonClicked(buttonID, buttonHWND);
275*f6dc9357SAndroid Build Coastguard Worker }
276*f6dc9357SAndroid Build Coastguard Worker 
OnButtonSetPath()277*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::OnButtonSetPath()
278*f6dc9357SAndroid Build Coastguard Worker {
279*f6dc9357SAndroid Build Coastguard Worker   UString currentPath;
280*f6dc9357SAndroid Build Coastguard Worker   _path.GetText(currentPath);
281*f6dc9357SAndroid Build Coastguard Worker   UString title = LangString(IDS_EXTRACT_SET_FOLDER);
282*f6dc9357SAndroid Build Coastguard Worker   UString resultPath;
283*f6dc9357SAndroid Build Coastguard Worker   if (!MyBrowseForFolder(*this, title, currentPath, resultPath))
284*f6dc9357SAndroid Build Coastguard Worker     return;
285*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_NO_REGISTRY
286*f6dc9357SAndroid Build Coastguard Worker   _path.SetCurSel(-1);
287*f6dc9357SAndroid Build Coastguard Worker   #endif
288*f6dc9357SAndroid Build Coastguard Worker   _path.SetText(resultPath);
289*f6dc9357SAndroid Build Coastguard Worker }
290*f6dc9357SAndroid Build Coastguard Worker 
291*f6dc9357SAndroid Build Coastguard Worker void AddUniqueString(UStringVector &list, const UString &s);
AddUniqueString(UStringVector & list,const UString & s)292*f6dc9357SAndroid Build Coastguard Worker void AddUniqueString(UStringVector &list, const UString &s)
293*f6dc9357SAndroid Build Coastguard Worker {
294*f6dc9357SAndroid Build Coastguard Worker   FOR_VECTOR (i, list)
295*f6dc9357SAndroid Build Coastguard Worker     if (s.IsEqualTo_NoCase(list[i]))
296*f6dc9357SAndroid Build Coastguard Worker       return;
297*f6dc9357SAndroid Build Coastguard Worker   list.Add(s);
298*f6dc9357SAndroid Build Coastguard Worker }
299*f6dc9357SAndroid Build Coastguard Worker 
OnOK()300*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::OnOK()
301*f6dc9357SAndroid Build Coastguard Worker {
302*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
303*f6dc9357SAndroid Build Coastguard Worker   int pathMode2 = kPathModeButtonsVals[_pathMode.GetCurSel()];
304*f6dc9357SAndroid Build Coastguard Worker   if (PathMode != NExtract::NPathMode::kCurPaths ||
305*f6dc9357SAndroid Build Coastguard Worker       pathMode2 != NExtract::NPathMode::kFullPaths)
306*f6dc9357SAndroid Build Coastguard Worker     PathMode = (NExtract::NPathMode::EEnum)pathMode2;
307*f6dc9357SAndroid Build Coastguard Worker 
308*f6dc9357SAndroid Build Coastguard Worker   OverwriteMode = (NExtract::NOverwriteMode::EEnum)kOverwriteButtonsVals[_overwriteMode.GetCurSel()];
309*f6dc9357SAndroid Build Coastguard Worker 
310*f6dc9357SAndroid Build Coastguard Worker   // _filesMode = (NExtractionDialog::NFilesMode::EEnum)GetFilesMode();
311*f6dc9357SAndroid Build Coastguard Worker 
312*f6dc9357SAndroid Build Coastguard Worker   _passwordControl.GetText(Password);
313*f6dc9357SAndroid Build Coastguard Worker 
314*f6dc9357SAndroid Build Coastguard Worker   #endif
315*f6dc9357SAndroid Build Coastguard Worker 
316*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_NO_REGISTRY
317*f6dc9357SAndroid Build Coastguard Worker 
318*f6dc9357SAndroid Build Coastguard Worker   // GetButton_Bools(IDX_EXTRACT_ALT_STREAMS, AltStreams, _info.AltStreams);
319*f6dc9357SAndroid Build Coastguard Worker   GetButton_Bools(IDX_EXTRACT_NT_SECUR,    NtSecurity, _info.NtSecurity);
320*f6dc9357SAndroid Build Coastguard Worker   GetButton_Bools(IDX_EXTRACT_ELIM_DUP,    ElimDup,    _info.ElimDup);
321*f6dc9357SAndroid Build Coastguard Worker 
322*f6dc9357SAndroid Build Coastguard Worker   bool showPassword = IsShowPasswordChecked();
323*f6dc9357SAndroid Build Coastguard Worker   if (showPassword != _info.ShowPassword.Val)
324*f6dc9357SAndroid Build Coastguard Worker   {
325*f6dc9357SAndroid Build Coastguard Worker     _info.ShowPassword.Def = true;
326*f6dc9357SAndroid Build Coastguard Worker     _info.ShowPassword.Val = showPassword;
327*f6dc9357SAndroid Build Coastguard Worker   }
328*f6dc9357SAndroid Build Coastguard Worker 
329*f6dc9357SAndroid Build Coastguard Worker   if (_info.PathMode != pathMode2)
330*f6dc9357SAndroid Build Coastguard Worker   {
331*f6dc9357SAndroid Build Coastguard Worker     _info.PathMode_Force = true;
332*f6dc9357SAndroid Build Coastguard Worker     _info.PathMode = (NExtract::NPathMode::EEnum)pathMode2;
333*f6dc9357SAndroid Build Coastguard Worker     /*
334*f6dc9357SAndroid Build Coastguard Worker     // we allow kAbsPaths in registry.
335*f6dc9357SAndroid Build Coastguard Worker     if (_info.PathMode == NExtract::NPathMode::kAbsPaths)
336*f6dc9357SAndroid Build Coastguard Worker       _info.PathMode = NExtract::NPathMode::kFullPaths;
337*f6dc9357SAndroid Build Coastguard Worker     */
338*f6dc9357SAndroid Build Coastguard Worker   }
339*f6dc9357SAndroid Build Coastguard Worker 
340*f6dc9357SAndroid Build Coastguard Worker   if (!OverwriteMode_Force && _info.OverwriteMode != OverwriteMode)
341*f6dc9357SAndroid Build Coastguard Worker     _info.OverwriteMode_Force = true;
342*f6dc9357SAndroid Build Coastguard Worker   _info.OverwriteMode = OverwriteMode;
343*f6dc9357SAndroid Build Coastguard Worker 
344*f6dc9357SAndroid Build Coastguard Worker 
345*f6dc9357SAndroid Build Coastguard Worker   #else
346*f6dc9357SAndroid Build Coastguard Worker 
347*f6dc9357SAndroid Build Coastguard Worker   ElimDup.Val = IsButtonCheckedBool(IDX_EXTRACT_ELIM_DUP);
348*f6dc9357SAndroid Build Coastguard Worker 
349*f6dc9357SAndroid Build Coastguard Worker   #endif
350*f6dc9357SAndroid Build Coastguard Worker 
351*f6dc9357SAndroid Build Coastguard Worker   UString s;
352*f6dc9357SAndroid Build Coastguard Worker 
353*f6dc9357SAndroid Build Coastguard Worker   #ifdef Z7_NO_REGISTRY
354*f6dc9357SAndroid Build Coastguard Worker 
355*f6dc9357SAndroid Build Coastguard Worker   _path.GetText(s);
356*f6dc9357SAndroid Build Coastguard Worker 
357*f6dc9357SAndroid Build Coastguard Worker   #else
358*f6dc9357SAndroid Build Coastguard Worker 
359*f6dc9357SAndroid Build Coastguard Worker   int currentItem = _path.GetCurSel();
360*f6dc9357SAndroid Build Coastguard Worker   if (currentItem == CB_ERR)
361*f6dc9357SAndroid Build Coastguard Worker   {
362*f6dc9357SAndroid Build Coastguard Worker     _path.GetText(s);
363*f6dc9357SAndroid Build Coastguard Worker     if (_path.GetCount() >= (int)kHistorySize)
364*f6dc9357SAndroid Build Coastguard Worker       currentItem = _path.GetCount() - 1;
365*f6dc9357SAndroid Build Coastguard Worker   }
366*f6dc9357SAndroid Build Coastguard Worker   else
367*f6dc9357SAndroid Build Coastguard Worker     _path.GetLBText(currentItem, s);
368*f6dc9357SAndroid Build Coastguard Worker 
369*f6dc9357SAndroid Build Coastguard Worker   #endif
370*f6dc9357SAndroid Build Coastguard Worker 
371*f6dc9357SAndroid Build Coastguard Worker   s.Trim();
372*f6dc9357SAndroid Build Coastguard Worker   NName::NormalizeDirPathPrefix(s);
373*f6dc9357SAndroid Build Coastguard Worker 
374*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
375*f6dc9357SAndroid Build Coastguard Worker 
376*f6dc9357SAndroid Build Coastguard Worker   const bool splitDest = IsButtonCheckedBool(IDX_EXTRACT_NAME_ENABLE);
377*f6dc9357SAndroid Build Coastguard Worker   if (splitDest)
378*f6dc9357SAndroid Build Coastguard Worker   {
379*f6dc9357SAndroid Build Coastguard Worker     UString pathName;
380*f6dc9357SAndroid Build Coastguard Worker     _pathName.GetText(pathName);
381*f6dc9357SAndroid Build Coastguard Worker     pathName.Trim();
382*f6dc9357SAndroid Build Coastguard Worker     s += pathName;
383*f6dc9357SAndroid Build Coastguard Worker     NName::NormalizeDirPathPrefix(s);
384*f6dc9357SAndroid Build Coastguard Worker   }
385*f6dc9357SAndroid Build Coastguard Worker   if (splitDest != _info.SplitDest.Val)
386*f6dc9357SAndroid Build Coastguard Worker   {
387*f6dc9357SAndroid Build Coastguard Worker     _info.SplitDest.Def = true;
388*f6dc9357SAndroid Build Coastguard Worker     _info.SplitDest.Val = splitDest;
389*f6dc9357SAndroid Build Coastguard Worker   }
390*f6dc9357SAndroid Build Coastguard Worker 
391*f6dc9357SAndroid Build Coastguard Worker   #endif
392*f6dc9357SAndroid Build Coastguard Worker 
393*f6dc9357SAndroid Build Coastguard Worker   DirPath = s;
394*f6dc9357SAndroid Build Coastguard Worker 
395*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_NO_REGISTRY
396*f6dc9357SAndroid Build Coastguard Worker   _info.Paths.Clear();
397*f6dc9357SAndroid Build Coastguard Worker   #ifndef Z7_SFX
398*f6dc9357SAndroid Build Coastguard Worker   AddUniqueString(_info.Paths, s);
399*f6dc9357SAndroid Build Coastguard Worker   #endif
400*f6dc9357SAndroid Build Coastguard Worker   for (int i = 0; i < _path.GetCount(); i++)
401*f6dc9357SAndroid Build Coastguard Worker     if (i != currentItem)
402*f6dc9357SAndroid Build Coastguard Worker     {
403*f6dc9357SAndroid Build Coastguard Worker       UString sTemp;
404*f6dc9357SAndroid Build Coastguard Worker       _path.GetLBText(i, sTemp);
405*f6dc9357SAndroid Build Coastguard Worker       sTemp.Trim();
406*f6dc9357SAndroid Build Coastguard Worker       AddUniqueString(_info.Paths, sTemp);
407*f6dc9357SAndroid Build Coastguard Worker     }
408*f6dc9357SAndroid Build Coastguard Worker   _info.Save();
409*f6dc9357SAndroid Build Coastguard Worker   #endif
410*f6dc9357SAndroid Build Coastguard Worker 
411*f6dc9357SAndroid Build Coastguard Worker   CModalDialog::OnOK();
412*f6dc9357SAndroid Build Coastguard Worker }
413*f6dc9357SAndroid Build Coastguard Worker 
414*f6dc9357SAndroid Build Coastguard Worker #ifndef Z7_NO_REGISTRY
415*f6dc9357SAndroid Build Coastguard Worker #define kHelpTopic "fm/plugins/7-zip/extract.htm"
OnHelp()416*f6dc9357SAndroid Build Coastguard Worker void CExtractDialog::OnHelp()
417*f6dc9357SAndroid Build Coastguard Worker {
418*f6dc9357SAndroid Build Coastguard Worker   ShowHelpWindow(kHelpTopic);
419*f6dc9357SAndroid Build Coastguard Worker   CModalDialog::OnHelp();
420*f6dc9357SAndroid Build Coastguard Worker }
421*f6dc9357SAndroid Build Coastguard Worker #endif
422