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