xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/GUI/CompressDialog.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1*f6dc9357SAndroid Build Coastguard Worker // CompressDialog.h
2*f6dc9357SAndroid Build Coastguard Worker 
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_COMPRESS_DIALOG_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_COMPRESS_DIALOG_H
5*f6dc9357SAndroid Build Coastguard Worker 
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Wildcard.h"
7*f6dc9357SAndroid Build Coastguard Worker 
8*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ComboBox.h"
9*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Edit.h"
10*f6dc9357SAndroid Build Coastguard Worker 
11*f6dc9357SAndroid Build Coastguard Worker #include "../Common/LoadCodecs.h"
12*f6dc9357SAndroid Build Coastguard Worker #include "../Common/ZipRegistry.h"
13*f6dc9357SAndroid Build Coastguard Worker 
14*f6dc9357SAndroid Build Coastguard Worker #include "../FileManager/DialogSize.h"
15*f6dc9357SAndroid Build Coastguard Worker 
16*f6dc9357SAndroid Build Coastguard Worker #include "CompressDialogRes.h"
17*f6dc9357SAndroid Build Coastguard Worker 
18*f6dc9357SAndroid Build Coastguard Worker namespace NCompressDialog
19*f6dc9357SAndroid Build Coastguard Worker {
20*f6dc9357SAndroid Build Coastguard Worker   namespace NUpdateMode
21*f6dc9357SAndroid Build Coastguard Worker   {
22*f6dc9357SAndroid Build Coastguard Worker     enum EEnum
23*f6dc9357SAndroid Build Coastguard Worker     {
24*f6dc9357SAndroid Build Coastguard Worker       kAdd,
25*f6dc9357SAndroid Build Coastguard Worker       kUpdate,
26*f6dc9357SAndroid Build Coastguard Worker       kFresh,
27*f6dc9357SAndroid Build Coastguard Worker       kSync
28*f6dc9357SAndroid Build Coastguard Worker     };
29*f6dc9357SAndroid Build Coastguard Worker   }
30*f6dc9357SAndroid Build Coastguard Worker 
31*f6dc9357SAndroid Build Coastguard Worker   struct CInfo
32*f6dc9357SAndroid Build Coastguard Worker   {
33*f6dc9357SAndroid Build Coastguard Worker     NUpdateMode::EEnum UpdateMode;
34*f6dc9357SAndroid Build Coastguard Worker     NWildcard::ECensorPathMode PathMode;
35*f6dc9357SAndroid Build Coastguard Worker 
36*f6dc9357SAndroid Build Coastguard Worker     bool SolidIsSpecified;
37*f6dc9357SAndroid Build Coastguard Worker     // bool MultiThreadIsAllowed;
38*f6dc9357SAndroid Build Coastguard Worker     UInt64 SolidBlockSize;
39*f6dc9357SAndroid Build Coastguard Worker     UInt32 NumThreads;
40*f6dc9357SAndroid Build Coastguard Worker 
41*f6dc9357SAndroid Build Coastguard Worker     NCompression::CMemUse MemUsage;
42*f6dc9357SAndroid Build Coastguard Worker 
43*f6dc9357SAndroid Build Coastguard Worker     CRecordVector<UInt64> VolumeSizes;
44*f6dc9357SAndroid Build Coastguard Worker 
45*f6dc9357SAndroid Build Coastguard Worker     UInt32 Level;
46*f6dc9357SAndroid Build Coastguard Worker     UString Method;
47*f6dc9357SAndroid Build Coastguard Worker     UInt64 Dict64;
48*f6dc9357SAndroid Build Coastguard Worker     // UInt64 Dict64_Chain;
49*f6dc9357SAndroid Build Coastguard Worker     bool OrderMode;
50*f6dc9357SAndroid Build Coastguard Worker     UInt32 Order;
51*f6dc9357SAndroid Build Coastguard Worker     UString Options;
52*f6dc9357SAndroid Build Coastguard Worker 
53*f6dc9357SAndroid Build Coastguard Worker     UString EncryptionMethod;
54*f6dc9357SAndroid Build Coastguard Worker 
55*f6dc9357SAndroid Build Coastguard Worker     bool SFXMode;
56*f6dc9357SAndroid Build Coastguard Worker     bool OpenShareForWrite;
57*f6dc9357SAndroid Build Coastguard Worker     bool DeleteAfterCompressing;
58*f6dc9357SAndroid Build Coastguard Worker 
59*f6dc9357SAndroid Build Coastguard Worker     CBoolPair SymLinks;
60*f6dc9357SAndroid Build Coastguard Worker     CBoolPair HardLinks;
61*f6dc9357SAndroid Build Coastguard Worker     CBoolPair AltStreams;
62*f6dc9357SAndroid Build Coastguard Worker     CBoolPair NtSecurity;
63*f6dc9357SAndroid Build Coastguard Worker 
64*f6dc9357SAndroid Build Coastguard Worker     CBoolPair PreserveATime;
65*f6dc9357SAndroid Build Coastguard Worker 
66*f6dc9357SAndroid Build Coastguard Worker     UInt32 TimePrec;
67*f6dc9357SAndroid Build Coastguard Worker     CBoolPair MTime;
68*f6dc9357SAndroid Build Coastguard Worker     CBoolPair CTime;
69*f6dc9357SAndroid Build Coastguard Worker     CBoolPair ATime;
70*f6dc9357SAndroid Build Coastguard Worker     CBoolPair SetArcMTime;
71*f6dc9357SAndroid Build Coastguard Worker 
72*f6dc9357SAndroid Build Coastguard Worker     UString ArcPath; // in: Relative or abs ; out: Relative or abs
73*f6dc9357SAndroid Build Coastguard Worker 
74*f6dc9357SAndroid Build Coastguard Worker     // FString CurrentDirPrefix;
75*f6dc9357SAndroid Build Coastguard Worker     bool KeepName;
76*f6dc9357SAndroid Build Coastguard Worker 
77*f6dc9357SAndroid Build Coastguard Worker     bool GetFullPathName(UString &result) const;
78*f6dc9357SAndroid Build Coastguard Worker 
79*f6dc9357SAndroid Build Coastguard Worker     int FormatIndex;
80*f6dc9357SAndroid Build Coastguard Worker 
81*f6dc9357SAndroid Build Coastguard Worker     UString Password;
82*f6dc9357SAndroid Build Coastguard Worker     bool EncryptHeadersIsAllowed;
83*f6dc9357SAndroid Build Coastguard Worker     bool EncryptHeaders;
84*f6dc9357SAndroid Build Coastguard Worker 
CInfoCInfo85*f6dc9357SAndroid Build Coastguard Worker     CInfo():
86*f6dc9357SAndroid Build Coastguard Worker         UpdateMode(NCompressDialog::NUpdateMode::kAdd),
87*f6dc9357SAndroid Build Coastguard Worker         PathMode(NWildcard::k_RelatPath),
88*f6dc9357SAndroid Build Coastguard Worker         SFXMode(false),
89*f6dc9357SAndroid Build Coastguard Worker         OpenShareForWrite(false),
90*f6dc9357SAndroid Build Coastguard Worker         DeleteAfterCompressing(false),
91*f6dc9357SAndroid Build Coastguard Worker         FormatIndex(-1)
92*f6dc9357SAndroid Build Coastguard Worker     {
93*f6dc9357SAndroid Build Coastguard Worker       Level = Order = (UInt32)(Int32)-1;
94*f6dc9357SAndroid Build Coastguard Worker       NumThreads = (UInt32)(Int32)-1;
95*f6dc9357SAndroid Build Coastguard Worker       SolidIsSpecified = false;
96*f6dc9357SAndroid Build Coastguard Worker       Dict64 = (UInt64)(Int64)(-1);
97*f6dc9357SAndroid Build Coastguard Worker       // Dict64_Chain = (UInt64)(Int64)(-1);
98*f6dc9357SAndroid Build Coastguard Worker       OrderMode = false;
99*f6dc9357SAndroid Build Coastguard Worker       Method.Empty();
100*f6dc9357SAndroid Build Coastguard Worker       Options.Empty();
101*f6dc9357SAndroid Build Coastguard Worker       EncryptionMethod.Empty();
102*f6dc9357SAndroid Build Coastguard Worker       TimePrec = (UInt32)(Int32)(-1);
103*f6dc9357SAndroid Build Coastguard Worker     }
104*f6dc9357SAndroid Build Coastguard Worker   };
105*f6dc9357SAndroid Build Coastguard Worker }
106*f6dc9357SAndroid Build Coastguard Worker 
107*f6dc9357SAndroid Build Coastguard Worker 
108*f6dc9357SAndroid Build Coastguard Worker struct CBool1
109*f6dc9357SAndroid Build Coastguard Worker {
110*f6dc9357SAndroid Build Coastguard Worker   bool Val;
111*f6dc9357SAndroid Build Coastguard Worker   bool Supported;
112*f6dc9357SAndroid Build Coastguard Worker 
CBool1CBool1113*f6dc9357SAndroid Build Coastguard Worker   CBool1(): Val(false), Supported(false) {}
114*f6dc9357SAndroid Build Coastguard Worker 
InitCBool1115*f6dc9357SAndroid Build Coastguard Worker   void Init()
116*f6dc9357SAndroid Build Coastguard Worker   {
117*f6dc9357SAndroid Build Coastguard Worker     Val = false;
118*f6dc9357SAndroid Build Coastguard Worker     Supported = false;
119*f6dc9357SAndroid Build Coastguard Worker   }
120*f6dc9357SAndroid Build Coastguard Worker 
SetTrueTrueCBool1121*f6dc9357SAndroid Build Coastguard Worker   void SetTrueTrue()
122*f6dc9357SAndroid Build Coastguard Worker   {
123*f6dc9357SAndroid Build Coastguard Worker     Val = true;
124*f6dc9357SAndroid Build Coastguard Worker     Supported = true;
125*f6dc9357SAndroid Build Coastguard Worker   }
126*f6dc9357SAndroid Build Coastguard Worker 
SetVal_as_SupportedCBool1127*f6dc9357SAndroid Build Coastguard Worker   void SetVal_as_Supported(bool val)
128*f6dc9357SAndroid Build Coastguard Worker   {
129*f6dc9357SAndroid Build Coastguard Worker     Val = val;
130*f6dc9357SAndroid Build Coastguard Worker     Supported = true;
131*f6dc9357SAndroid Build Coastguard Worker   }
132*f6dc9357SAndroid Build Coastguard Worker 
133*f6dc9357SAndroid Build Coastguard Worker   /*
134*f6dc9357SAndroid Build Coastguard Worker   bool IsVal_True_and_Defined() const
135*f6dc9357SAndroid Build Coastguard Worker   {
136*f6dc9357SAndroid Build Coastguard Worker     return Def && Val;
137*f6dc9357SAndroid Build Coastguard Worker   }
138*f6dc9357SAndroid Build Coastguard Worker   */
139*f6dc9357SAndroid Build Coastguard Worker };
140*f6dc9357SAndroid Build Coastguard Worker 
141*f6dc9357SAndroid Build Coastguard Worker 
142*f6dc9357SAndroid Build Coastguard Worker class CCompressDialog: public NWindows::NControl::CModalDialog
143*f6dc9357SAndroid Build Coastguard Worker {
144*f6dc9357SAndroid Build Coastguard Worker public:
145*f6dc9357SAndroid Build Coastguard Worker   CBool1 SymLinks;
146*f6dc9357SAndroid Build Coastguard Worker   CBool1 HardLinks;
147*f6dc9357SAndroid Build Coastguard Worker   CBool1 AltStreams;
148*f6dc9357SAndroid Build Coastguard Worker   CBool1 NtSecurity;
149*f6dc9357SAndroid Build Coastguard Worker   CBool1 PreserveATime;
150*f6dc9357SAndroid Build Coastguard Worker private:
151*f6dc9357SAndroid Build Coastguard Worker   bool _ramSize_Defined;
152*f6dc9357SAndroid Build Coastguard Worker 
153*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_ArchivePath;
154*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Format;
155*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Level;
156*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Method;
157*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Dictionary;
158*f6dc9357SAndroid Build Coastguard Worker   // NWindows::NControl::CComboBox m_Dictionary_Chain;
159*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Order;
160*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Solid;
161*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_NumThreads;
162*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_MemUse;
163*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Volume;
164*f6dc9357SAndroid Build Coastguard Worker 
165*f6dc9357SAndroid Build Coastguard Worker   int _dictionaryCombo_left;
166*f6dc9357SAndroid Build Coastguard Worker 
167*f6dc9357SAndroid Build Coastguard Worker   UStringVector _memUse_Strings;
168*f6dc9357SAndroid Build Coastguard Worker 
169*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CDialogChildControl m_Params;
170*f6dc9357SAndroid Build Coastguard Worker 
171*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_UpdateMode;
172*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_PathMode;
173*f6dc9357SAndroid Build Coastguard Worker 
174*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CEdit _password1Control;
175*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CEdit _password2Control;
176*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox _encryptionMethod;
177*f6dc9357SAndroid Build Coastguard Worker 
178*f6dc9357SAndroid Build Coastguard Worker   int _auto_MethodId;
179*f6dc9357SAndroid Build Coastguard Worker   UInt32 _auto_Dict; // (UInt32)(Int32)-1 means unknown
180*f6dc9357SAndroid Build Coastguard Worker   UInt32 _auto_Dict_Chain; // (UInt32)(Int32)-1 means unknown
181*f6dc9357SAndroid Build Coastguard Worker   UInt32 _auto_Order;
182*f6dc9357SAndroid Build Coastguard Worker   UInt64 _auto_Solid;
183*f6dc9357SAndroid Build Coastguard Worker   UInt32 _auto_NumThreads;
184*f6dc9357SAndroid Build Coastguard Worker 
185*f6dc9357SAndroid Build Coastguard Worker   int _default_encryptionMethod_Index;
186*f6dc9357SAndroid Build Coastguard Worker 
187*f6dc9357SAndroid Build Coastguard Worker   int m_PrevFormat;
188*f6dc9357SAndroid Build Coastguard Worker   UString DirPrefix;
189*f6dc9357SAndroid Build Coastguard Worker   UString StartDirPrefix;
190*f6dc9357SAndroid Build Coastguard Worker 
191*f6dc9357SAndroid Build Coastguard Worker   size_t _ramSize;         // full RAM size avail
192*f6dc9357SAndroid Build Coastguard Worker   size_t _ramSize_Reduced; // full for 64-bit and reduced for 32-bit
193*f6dc9357SAndroid Build Coastguard Worker   UInt64 _ramUsage_Auto;
194*f6dc9357SAndroid Build Coastguard Worker 
195*f6dc9357SAndroid Build Coastguard Worker public:
196*f6dc9357SAndroid Build Coastguard Worker   NCompression::CInfo m_RegistryInfo;
197*f6dc9357SAndroid Build Coastguard Worker 
198*f6dc9357SAndroid Build Coastguard Worker   void SetArchiveName(const UString &name);
199*f6dc9357SAndroid Build Coastguard Worker   int FindRegistryFormat(const UString &name);
200*f6dc9357SAndroid Build Coastguard Worker   unsigned FindRegistryFormat_Always(const UString &name);
201*f6dc9357SAndroid Build Coastguard Worker 
Get_ArcInfoEx()202*f6dc9357SAndroid Build Coastguard Worker   const CArcInfoEx &Get_ArcInfoEx()
203*f6dc9357SAndroid Build Coastguard Worker   {
204*f6dc9357SAndroid Build Coastguard Worker     return (*ArcFormats)[GetFormatIndex()];
205*f6dc9357SAndroid Build Coastguard Worker   }
206*f6dc9357SAndroid Build Coastguard Worker 
207*f6dc9357SAndroid Build Coastguard Worker   NCompression::CFormatOptions &Get_FormatOptions();
208*f6dc9357SAndroid Build Coastguard Worker 
209*f6dc9357SAndroid Build Coastguard Worker   void CheckSFXNameChange();
210*f6dc9357SAndroid Build Coastguard Worker   void SetArchiveName2(bool prevWasSFX);
211*f6dc9357SAndroid Build Coastguard Worker 
212*f6dc9357SAndroid Build Coastguard Worker   unsigned GetStaticFormatIndex();
213*f6dc9357SAndroid Build Coastguard Worker 
214*f6dc9357SAndroid Build Coastguard Worker   void SetNearestSelectComboBox(NWindows::NControl::CComboBox &comboBox, UInt32 value);
215*f6dc9357SAndroid Build Coastguard Worker 
216*f6dc9357SAndroid Build Coastguard Worker   void SetLevel2();
SetLevel()217*f6dc9357SAndroid Build Coastguard Worker   void SetLevel()
218*f6dc9357SAndroid Build Coastguard Worker   {
219*f6dc9357SAndroid Build Coastguard Worker     SetLevel2();
220*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_LEVEL);
221*f6dc9357SAndroid Build Coastguard Worker     SetMethod();
222*f6dc9357SAndroid Build Coastguard Worker   }
223*f6dc9357SAndroid Build Coastguard Worker 
224*f6dc9357SAndroid Build Coastguard Worker   void SetMethod2(int keepMethodId);
225*f6dc9357SAndroid Build Coastguard Worker   void SetMethod(int keepMethodId = -1)
226*f6dc9357SAndroid Build Coastguard Worker   {
227*f6dc9357SAndroid Build Coastguard Worker     SetMethod2(keepMethodId);
228*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_METHOD);
229*f6dc9357SAndroid Build Coastguard Worker   }
230*f6dc9357SAndroid Build Coastguard Worker 
MethodChanged()231*f6dc9357SAndroid Build Coastguard Worker   void MethodChanged()
232*f6dc9357SAndroid Build Coastguard Worker   {
233*f6dc9357SAndroid Build Coastguard Worker     SetDictionary2();
234*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_DICTIONARY);
235*f6dc9357SAndroid Build Coastguard Worker     // EnableMultiCombo(IDC_COMPRESS_DICTIONARY2);
236*f6dc9357SAndroid Build Coastguard Worker     SetOrder2();
237*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_ORDER);
238*f6dc9357SAndroid Build Coastguard Worker   }
239*f6dc9357SAndroid Build Coastguard Worker 
240*f6dc9357SAndroid Build Coastguard Worker   int GetMethodID_RAW();
241*f6dc9357SAndroid Build Coastguard Worker   int GetMethodID();
242*f6dc9357SAndroid Build Coastguard Worker 
243*f6dc9357SAndroid Build Coastguard Worker   UString GetMethodSpec(UString &estimatedName);
244*f6dc9357SAndroid Build Coastguard Worker   UString GetMethodSpec();
245*f6dc9357SAndroid Build Coastguard Worker   bool IsMethodEqualTo(const UString &s);
246*f6dc9357SAndroid Build Coastguard Worker   UString GetEncryptionMethodSpec();
247*f6dc9357SAndroid Build Coastguard Worker 
248*f6dc9357SAndroid Build Coastguard Worker   bool IsZipFormat();
249*f6dc9357SAndroid Build Coastguard Worker   bool IsXzFormat();
250*f6dc9357SAndroid Build Coastguard Worker 
251*f6dc9357SAndroid Build Coastguard Worker   void SetEncryptionMethod();
252*f6dc9357SAndroid Build Coastguard Worker 
253*f6dc9357SAndroid Build Coastguard Worker   int AddDict2(size_t sizeReal, size_t sizeShow);
254*f6dc9357SAndroid Build Coastguard Worker   int AddDict(size_t size);
255*f6dc9357SAndroid Build Coastguard Worker   // int AddDict_Chain(size_t size);
256*f6dc9357SAndroid Build Coastguard Worker 
257*f6dc9357SAndroid Build Coastguard Worker   void SetDictionary2();
258*f6dc9357SAndroid Build Coastguard Worker 
259*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetComboValue(NWindows::NControl::CComboBox &c, int defMax = 0);
260*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetComboValue_64(NWindows::NControl::CComboBox &c, int defMax = 0);
261*f6dc9357SAndroid Build Coastguard Worker 
GetLevel()262*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetLevel()  { return GetComboValue(m_Level); }
GetLevelSpec()263*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetLevelSpec()  { return GetComboValue(m_Level, 1); }
264*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetLevel2();
265*f6dc9357SAndroid Build Coastguard Worker 
GetDictSpec()266*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetDictSpec() { return GetComboValue_64(m_Dictionary, 1); }
267*f6dc9357SAndroid Build Coastguard Worker   // UInt64 GetDictChainSpec() { return GetComboValue_64(m_Dictionary_Chain, 1); }
268*f6dc9357SAndroid Build Coastguard Worker 
GetDict2()269*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetDict2()
270*f6dc9357SAndroid Build Coastguard Worker   {
271*f6dc9357SAndroid Build Coastguard Worker     UInt64 num = GetDictSpec();
272*f6dc9357SAndroid Build Coastguard Worker     if (num == (UInt64)(Int64)-1)
273*f6dc9357SAndroid Build Coastguard Worker     {
274*f6dc9357SAndroid Build Coastguard Worker       if (_auto_Dict == (UInt32)(Int32)-1)
275*f6dc9357SAndroid Build Coastguard Worker         return (UInt64)(Int64)-1; // unknown
276*f6dc9357SAndroid Build Coastguard Worker       num = _auto_Dict;
277*f6dc9357SAndroid Build Coastguard Worker     }
278*f6dc9357SAndroid Build Coastguard Worker     return num;
279*f6dc9357SAndroid Build Coastguard Worker   }
280*f6dc9357SAndroid Build Coastguard Worker 
281*f6dc9357SAndroid Build Coastguard Worker   // UInt32 GetOrder() { return GetComboValue(m_Order); }
GetOrderSpec()282*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetOrderSpec() { return GetComboValue(m_Order, 1); }
GetNumThreadsSpec()283*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetNumThreadsSpec() { return GetComboValue(m_NumThreads, 1); }
284*f6dc9357SAndroid Build Coastguard Worker 
GetNumThreads2()285*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetNumThreads2()
286*f6dc9357SAndroid Build Coastguard Worker   {
287*f6dc9357SAndroid Build Coastguard Worker     UInt32 num = GetNumThreadsSpec();
288*f6dc9357SAndroid Build Coastguard Worker     if (num == (UInt32)(Int32)-1)
289*f6dc9357SAndroid Build Coastguard Worker       num = _auto_NumThreads;
290*f6dc9357SAndroid Build Coastguard Worker     return num;
291*f6dc9357SAndroid Build Coastguard Worker   }
292*f6dc9357SAndroid Build Coastguard Worker 
GetBlockSizeSpec()293*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetBlockSizeSpec() { return GetComboValue(m_Solid, 1); }
294*f6dc9357SAndroid Build Coastguard Worker 
295*f6dc9357SAndroid Build Coastguard Worker   /*
296*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetPrecSpec() { return GetComboValue(m_Prec, 1); }
297*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetPrec() { return GetComboValue(m_Prec, 0); }
298*f6dc9357SAndroid Build Coastguard Worker   */
299*f6dc9357SAndroid Build Coastguard Worker 
300*f6dc9357SAndroid Build Coastguard Worker 
301*f6dc9357SAndroid Build Coastguard Worker   int AddOrder(UInt32 size);
302*f6dc9357SAndroid Build Coastguard Worker   int AddOrder_Auto();
303*f6dc9357SAndroid Build Coastguard Worker 
304*f6dc9357SAndroid Build Coastguard Worker   void SetOrder2();
305*f6dc9357SAndroid Build Coastguard Worker 
306*f6dc9357SAndroid Build Coastguard Worker   bool GetOrderMode();
307*f6dc9357SAndroid Build Coastguard Worker 
308*f6dc9357SAndroid Build Coastguard Worker   void SetSolidBlockSize2();
SetSolidBlockSize()309*f6dc9357SAndroid Build Coastguard Worker   void SetSolidBlockSize(/* bool useDictionary = false */)
310*f6dc9357SAndroid Build Coastguard Worker   {
311*f6dc9357SAndroid Build Coastguard Worker     SetSolidBlockSize2();
312*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_SOLID);
313*f6dc9357SAndroid Build Coastguard Worker   }
314*f6dc9357SAndroid Build Coastguard Worker 
315*f6dc9357SAndroid Build Coastguard Worker   void SetNumThreads2();
SetNumThreads()316*f6dc9357SAndroid Build Coastguard Worker   void SetNumThreads()
317*f6dc9357SAndroid Build Coastguard Worker   {
318*f6dc9357SAndroid Build Coastguard Worker     SetNumThreads2();
319*f6dc9357SAndroid Build Coastguard Worker     EnableMultiCombo(IDC_COMPRESS_THREADS);
320*f6dc9357SAndroid Build Coastguard Worker   }
321*f6dc9357SAndroid Build Coastguard Worker 
322*f6dc9357SAndroid Build Coastguard Worker   int AddMemComboItem(UInt64 val, bool isPercent = false, bool isDefault = false);
323*f6dc9357SAndroid Build Coastguard Worker   void SetMemUseCombo();
324*f6dc9357SAndroid Build Coastguard Worker   UString Get_MemUse_Spec();
325*f6dc9357SAndroid Build Coastguard Worker   UInt64 Get_MemUse_Bytes();
326*f6dc9357SAndroid Build Coastguard Worker 
327*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetMemoryUsage_Dict_DecompMem(UInt64 dict, UInt64 &decompressMemory);
328*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetMemoryUsage_Threads_Dict_DecompMem(UInt32 numThreads, UInt64 dict, UInt64 &decompressMemory);
329*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetMemoryUsage_DecompMem(UInt64 &decompressMemory);
330*f6dc9357SAndroid Build Coastguard Worker   UInt64 GetMemoryUsageComp_Threads_Dict(UInt32 numThreads, UInt64 dict64);
331*f6dc9357SAndroid Build Coastguard Worker 
332*f6dc9357SAndroid Build Coastguard Worker   void PrintMemUsage(UINT res, UInt64 value);
333*f6dc9357SAndroid Build Coastguard Worker   void SetMemoryUsage();
334*f6dc9357SAndroid Build Coastguard Worker   void Print_Params();
335*f6dc9357SAndroid Build Coastguard Worker 
336*f6dc9357SAndroid Build Coastguard Worker   void SetParams();
337*f6dc9357SAndroid Build Coastguard Worker 
338*f6dc9357SAndroid Build Coastguard Worker   void SaveOptionsInMem();
339*f6dc9357SAndroid Build Coastguard Worker 
340*f6dc9357SAndroid Build Coastguard Worker   void UpdatePasswordControl();
IsShowPasswordChecked()341*f6dc9357SAndroid Build Coastguard Worker   bool IsShowPasswordChecked() const { return IsButtonCheckedBool(IDX_PASSWORD_SHOW); }
342*f6dc9357SAndroid Build Coastguard Worker 
343*f6dc9357SAndroid Build Coastguard Worker   unsigned GetFormatIndex();
344*f6dc9357SAndroid Build Coastguard Worker   bool SetArcPathFields(const UString &path, UString &name, bool always);
345*f6dc9357SAndroid Build Coastguard Worker   bool SetArcPathFields(const UString &path);
346*f6dc9357SAndroid Build Coastguard Worker   bool GetFinalPath_Smart(UString &resPath) const;
347*f6dc9357SAndroid Build Coastguard Worker   void ArcPath_WasChanged(const UString &newPath);
348*f6dc9357SAndroid Build Coastguard Worker 
349*f6dc9357SAndroid Build Coastguard Worker   void CheckSFXControlsEnable();
350*f6dc9357SAndroid Build Coastguard Worker   // void CheckVolumeEnable();
351*f6dc9357SAndroid Build Coastguard Worker   void EnableMultiCombo(unsigned id);
352*f6dc9357SAndroid Build Coastguard Worker   void FormatChanged(bool isChanged);
353*f6dc9357SAndroid Build Coastguard Worker 
354*f6dc9357SAndroid Build Coastguard Worker   void OnButtonSetArchive();
355*f6dc9357SAndroid Build Coastguard Worker   bool IsSFX();
356*f6dc9357SAndroid Build Coastguard Worker   void OnButtonSFX();
357*f6dc9357SAndroid Build Coastguard Worker 
358*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnInit() Z7_override;
359*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
360*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam) Z7_override;
361*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
362*f6dc9357SAndroid Build Coastguard Worker   virtual void OnOK() Z7_override;
363*f6dc9357SAndroid Build Coastguard Worker   virtual void OnHelp() Z7_override;
364*f6dc9357SAndroid Build Coastguard Worker 
MessageBoxError(LPCWSTR message)365*f6dc9357SAndroid Build Coastguard Worker   void MessageBoxError(LPCWSTR message)
366*f6dc9357SAndroid Build Coastguard Worker   {
367*f6dc9357SAndroid Build Coastguard Worker     MessageBoxW(*this, message, L"7-Zip", MB_ICONERROR);
368*f6dc9357SAndroid Build Coastguard Worker   }
369*f6dc9357SAndroid Build Coastguard Worker 
370*f6dc9357SAndroid Build Coastguard Worker   void ShowOptionsString();
371*f6dc9357SAndroid Build Coastguard Worker 
372*f6dc9357SAndroid Build Coastguard Worker public:
373*f6dc9357SAndroid Build Coastguard Worker   const CObjectVector<CArcInfoEx> *ArcFormats;
374*f6dc9357SAndroid Build Coastguard Worker   CUIntVector ArcIndices; // can not be empty, must contain Info.FormatIndex, if Info.FormatIndex >= 0
375*f6dc9357SAndroid Build Coastguard Worker   AStringVector ExternalMethods;
376*f6dc9357SAndroid Build Coastguard Worker 
377*f6dc9357SAndroid Build Coastguard Worker   void SetMethods(const CObjectVector<CCodecInfoUser> &userCodecs);
378*f6dc9357SAndroid Build Coastguard Worker 
379*f6dc9357SAndroid Build Coastguard Worker   NCompressDialog::CInfo Info;
380*f6dc9357SAndroid Build Coastguard Worker   UString OriginalFileName; // for bzip2, gzip2
381*f6dc9357SAndroid Build Coastguard Worker 
382*f6dc9357SAndroid Build Coastguard Worker   INT_PTR Create(HWND wndParent = NULL)
383*f6dc9357SAndroid Build Coastguard Worker   {
384*f6dc9357SAndroid Build Coastguard Worker     BIG_DIALOG_SIZE(400, 320);
385*f6dc9357SAndroid Build Coastguard Worker     return CModalDialog::Create(SIZED_DIALOG(IDD_COMPRESS), wndParent);
386*f6dc9357SAndroid Build Coastguard Worker   }
387*f6dc9357SAndroid Build Coastguard Worker 
CCompressDialog()388*f6dc9357SAndroid Build Coastguard Worker   CCompressDialog() {}
389*f6dc9357SAndroid Build Coastguard Worker };
390*f6dc9357SAndroid Build Coastguard Worker 
391*f6dc9357SAndroid Build Coastguard Worker 
392*f6dc9357SAndroid Build Coastguard Worker 
393*f6dc9357SAndroid Build Coastguard Worker 
394*f6dc9357SAndroid Build Coastguard Worker class COptionsDialog: public NWindows::NControl::CModalDialog
395*f6dc9357SAndroid Build Coastguard Worker {
396*f6dc9357SAndroid Build Coastguard Worker   struct CBoolBox
397*f6dc9357SAndroid Build Coastguard Worker   {
398*f6dc9357SAndroid Build Coastguard Worker     bool IsSupported;
399*f6dc9357SAndroid Build Coastguard Worker     bool DefaultVal;
400*f6dc9357SAndroid Build Coastguard Worker     CBoolPair BoolPair;
401*f6dc9357SAndroid Build Coastguard Worker 
402*f6dc9357SAndroid Build Coastguard Worker     unsigned Id;
403*f6dc9357SAndroid Build Coastguard Worker     unsigned Set_Id;
404*f6dc9357SAndroid Build Coastguard Worker 
SetIDsCBoolBox405*f6dc9357SAndroid Build Coastguard Worker     void SetIDs(unsigned id, unsigned set_Id)
406*f6dc9357SAndroid Build Coastguard Worker     {
407*f6dc9357SAndroid Build Coastguard Worker       Id = id;
408*f6dc9357SAndroid Build Coastguard Worker       Set_Id = set_Id;
409*f6dc9357SAndroid Build Coastguard Worker     }
410*f6dc9357SAndroid Build Coastguard Worker 
CBoolBoxCBoolBox411*f6dc9357SAndroid Build Coastguard Worker     CBoolBox():
412*f6dc9357SAndroid Build Coastguard Worker         IsSupported(false),
413*f6dc9357SAndroid Build Coastguard Worker         DefaultVal(false)
414*f6dc9357SAndroid Build Coastguard Worker         {}
415*f6dc9357SAndroid Build Coastguard Worker   };
416*f6dc9357SAndroid Build Coastguard Worker 
417*f6dc9357SAndroid Build Coastguard Worker   CCompressDialog *cd;
418*f6dc9357SAndroid Build Coastguard Worker 
419*f6dc9357SAndroid Build Coastguard Worker   NWindows::NControl::CComboBox m_Prec;
420*f6dc9357SAndroid Build Coastguard Worker 
421*f6dc9357SAndroid Build Coastguard Worker   UInt32 _auto_Prec;
422*f6dc9357SAndroid Build Coastguard Worker   UInt32 TimePrec;
423*f6dc9357SAndroid Build Coastguard Worker 
Reset_TimePrec()424*f6dc9357SAndroid Build Coastguard Worker   void Reset_TimePrec() { TimePrec = (UInt32)(Int32)-1; }
IsSet_TimePrec()425*f6dc9357SAndroid Build Coastguard Worker   bool IsSet_TimePrec() const { return TimePrec != (UInt32)(Int32)-1; }
426*f6dc9357SAndroid Build Coastguard Worker 
427*f6dc9357SAndroid Build Coastguard Worker   CBoolBox MTime;
428*f6dc9357SAndroid Build Coastguard Worker   CBoolBox CTime;
429*f6dc9357SAndroid Build Coastguard Worker   CBoolBox ATime;
430*f6dc9357SAndroid Build Coastguard Worker   CBoolBox ZTime;
431*f6dc9357SAndroid Build Coastguard Worker 
432*f6dc9357SAndroid Build Coastguard Worker   UString SecString;
433*f6dc9357SAndroid Build Coastguard Worker   UString NsString;
434*f6dc9357SAndroid Build Coastguard Worker 
435*f6dc9357SAndroid Build Coastguard Worker 
436*f6dc9357SAndroid Build Coastguard Worker   void CheckButton_Bool1(UINT id, const CBool1 &b1);
437*f6dc9357SAndroid Build Coastguard Worker   void GetButton_Bool1(UINT id, CBool1 &b1);
438*f6dc9357SAndroid Build Coastguard Worker   void CheckButton_BoolBox(bool supported, const CBoolPair &b2, CBoolBox &bb);
439*f6dc9357SAndroid Build Coastguard Worker   void GetButton_BoolBox(CBoolBox &bb);
440*f6dc9357SAndroid Build Coastguard Worker 
441*f6dc9357SAndroid Build Coastguard Worker   void Store_TimeBoxes();
442*f6dc9357SAndroid Build Coastguard Worker 
443*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetComboValue(NWindows::NControl::CComboBox &c, int defMax = 0);
GetPrecSpec()444*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetPrecSpec()
445*f6dc9357SAndroid Build Coastguard Worker   {
446*f6dc9357SAndroid Build Coastguard Worker     UInt32 prec = GetComboValue(m_Prec, 1);
447*f6dc9357SAndroid Build Coastguard Worker     if (prec == _auto_Prec)
448*f6dc9357SAndroid Build Coastguard Worker       prec = (UInt32)(Int32)-1;
449*f6dc9357SAndroid Build Coastguard Worker     return prec;
450*f6dc9357SAndroid Build Coastguard Worker   }
GetPrec()451*f6dc9357SAndroid Build Coastguard Worker   UInt32 GetPrec() { return GetComboValue(m_Prec, 0); }
452*f6dc9357SAndroid Build Coastguard Worker 
453*f6dc9357SAndroid Build Coastguard Worker   // void OnButton_TimeDefault();
454*f6dc9357SAndroid Build Coastguard Worker   int AddPrec(unsigned prec, bool isDefault);
455*f6dc9357SAndroid Build Coastguard Worker   void SetPrec();
456*f6dc9357SAndroid Build Coastguard Worker   void SetTimeMAC();
457*f6dc9357SAndroid Build Coastguard Worker 
458*f6dc9357SAndroid Build Coastguard Worker   void On_CheckBoxSet_Prec_Clicked();
459*f6dc9357SAndroid Build Coastguard Worker   void On_CheckBoxSet_Clicked(const CBoolBox &bb);
460*f6dc9357SAndroid Build Coastguard Worker 
461*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnInit() Z7_override;
462*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam) Z7_override;
463*f6dc9357SAndroid Build Coastguard Worker   virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
464*f6dc9357SAndroid Build Coastguard Worker   virtual void OnOK() Z7_override;
465*f6dc9357SAndroid Build Coastguard Worker   virtual void OnHelp() Z7_override;
466*f6dc9357SAndroid Build Coastguard Worker 
467*f6dc9357SAndroid Build Coastguard Worker public:
468*f6dc9357SAndroid Build Coastguard Worker 
469*f6dc9357SAndroid Build Coastguard Worker   INT_PTR Create(HWND wndParent = NULL)
470*f6dc9357SAndroid Build Coastguard Worker   {
471*f6dc9357SAndroid Build Coastguard Worker     BIG_DIALOG_SIZE(240, 232);
472*f6dc9357SAndroid Build Coastguard Worker     return CModalDialog::Create(SIZED_DIALOG(IDD_COMPRESS_OPTIONS), wndParent);
473*f6dc9357SAndroid Build Coastguard Worker   }
474*f6dc9357SAndroid Build Coastguard Worker 
COptionsDialog(CCompressDialog * cdLoc)475*f6dc9357SAndroid Build Coastguard Worker   COptionsDialog(CCompressDialog *cdLoc):
476*f6dc9357SAndroid Build Coastguard Worker       cd(cdLoc)
477*f6dc9357SAndroid Build Coastguard Worker       // , TimePrec(0)
478*f6dc9357SAndroid Build Coastguard Worker       {
479*f6dc9357SAndroid Build Coastguard Worker         Reset_TimePrec();
480*f6dc9357SAndroid Build Coastguard Worker       }
481*f6dc9357SAndroid Build Coastguard Worker };
482*f6dc9357SAndroid Build Coastguard Worker 
483*f6dc9357SAndroid Build Coastguard Worker #endif
484