blob: c2d2699f3f92af30b7e155502c158b732bac722f [file] [log] [blame]
// CompressDialog.h
#ifndef ZIP7_INC_COMPRESS_DIALOG_H
#define ZIP7_INC_COMPRESS_DIALOG_H
#include "../../../Common/Wildcard.h"
#include "../../../Windows/Control/ComboBox.h"
#include "../../../Windows/Control/Edit.h"
#include "../Common/LoadCodecs.h"
#include "../Common/ZipRegistry.h"
#include "../FileManager/DialogSize.h"
#include "CompressDialogRes.h"
namespace NCompressDialog
{
namespace NUpdateMode
{
enum EEnum
{
kAdd,
kUpdate,
kFresh,
kSync
};
}
struct CInfo
{
NUpdateMode::EEnum UpdateMode;
NWildcard::ECensorPathMode PathMode;
bool SolidIsSpecified;
// bool MultiThreadIsAllowed;
UInt64 SolidBlockSize;
UInt32 NumThreads;
NCompression::CMemUse MemUsage;
CRecordVector<UInt64> VolumeSizes;
UInt32 Level;
UString Method;
UInt64 Dict64;
// UInt64 Dict64_Chain;
bool OrderMode;
UInt32 Order;
UString Options;
UString EncryptionMethod;
bool SFXMode;
bool OpenShareForWrite;
bool DeleteAfterCompressing;
CBoolPair SymLinks;
CBoolPair HardLinks;
CBoolPair AltStreams;
CBoolPair NtSecurity;
CBoolPair PreserveATime;
UInt32 TimePrec;
CBoolPair MTime;
CBoolPair CTime;
CBoolPair ATime;
CBoolPair SetArcMTime;
UString ArcPath; // in: Relative or abs ; out: Relative or abs
// FString CurrentDirPrefix;
bool KeepName;
bool GetFullPathName(UString &result) const;
int FormatIndex;
UString Password;
bool EncryptHeadersIsAllowed;
bool EncryptHeaders;
CInfo():
UpdateMode(NCompressDialog::NUpdateMode::kAdd),
PathMode(NWildcard::k_RelatPath),
SFXMode(false),
OpenShareForWrite(false),
DeleteAfterCompressing(false),
FormatIndex(-1)
{
Level = Order = (UInt32)(Int32)-1;
NumThreads = (UInt32)(Int32)-1;
SolidIsSpecified = false;
Dict64 = (UInt64)(Int64)(-1);
// Dict64_Chain = (UInt64)(Int64)(-1);
OrderMode = false;
Method.Empty();
Options.Empty();
EncryptionMethod.Empty();
TimePrec = (UInt32)(Int32)(-1);
}
};
}
struct CBool1
{
bool Val;
bool Supported;
CBool1(): Val(false), Supported(false) {}
void Init()
{
Val = false;
Supported = false;
}
void SetTrueTrue()
{
Val = true;
Supported = true;
}
void SetVal_as_Supported(bool val)
{
Val = val;
Supported = true;
}
/*
bool IsVal_True_and_Defined() const
{
return Def && Val;
}
*/
};
class CCompressDialog: public NWindows::NControl::CModalDialog
{
NWindows::NControl::CComboBox m_ArchivePath;
NWindows::NControl::CComboBox m_Format;
NWindows::NControl::CComboBox m_Level;
NWindows::NControl::CComboBox m_Method;
NWindows::NControl::CComboBox m_Dictionary;
// NWindows::NControl::CComboBox m_Dictionary_Chain;
NWindows::NControl::CComboBox m_Order;
NWindows::NControl::CComboBox m_Solid;
NWindows::NControl::CComboBox m_NumThreads;
NWindows::NControl::CComboBox m_MemUse;
NWindows::NControl::CComboBox m_Volume;
int _dictionaryCombo_left;
UStringVector _memUse_Strings;
NWindows::NControl::CDialogChildControl m_Params;
NWindows::NControl::CComboBox m_UpdateMode;
NWindows::NControl::CComboBox m_PathMode;
NWindows::NControl::CEdit _password1Control;
NWindows::NControl::CEdit _password2Control;
NWindows::NControl::CComboBox _encryptionMethod;
int _auto_MethodId;
UInt32 _auto_Dict; // (UInt32)(Int32)-1 means unknown
UInt32 _auto_Dict_Chain; // (UInt32)(Int32)-1 means unknown
UInt32 _auto_Order;
UInt64 _auto_Solid;
UInt32 _auto_NumThreads;
int _default_encryptionMethod_Index;
int m_PrevFormat;
UString DirPrefix;
UString StartDirPrefix;
bool _ramSize_Defined;
UInt64 _ramSize; // full RAM size avail
UInt64 _ramSize_Reduced; // full for 64-bit and reduced for 32-bit
UInt64 _ramUsage_Auto;
public:
NCompression::CInfo m_RegistryInfo;
CBool1 SymLinks;
CBool1 HardLinks;
CBool1 AltStreams;
CBool1 NtSecurity;
CBool1 PreserveATime;
void SetArchiveName(const UString &name);
int FindRegistryFormat(const UString &name);
unsigned FindRegistryFormat_Always(const UString &name);
const CArcInfoEx &Get_ArcInfoEx()
{
return (*ArcFormats)[GetFormatIndex()];
}
NCompression::CFormatOptions &Get_FormatOptions();
void CheckSFXNameChange();
void SetArchiveName2(bool prevWasSFX);
unsigned GetStaticFormatIndex();
void SetNearestSelectComboBox(NWindows::NControl::CComboBox &comboBox, UInt32 value);
void SetLevel2();
void SetLevel()
{
SetLevel2();
EnableMultiCombo(IDC_COMPRESS_LEVEL);
SetMethod();
}
void SetMethod2(int keepMethodId);
void SetMethod(int keepMethodId = -1)
{
SetMethod2(keepMethodId);
EnableMultiCombo(IDC_COMPRESS_METHOD);
}
void MethodChanged()
{
SetDictionary2();
EnableMultiCombo(IDC_COMPRESS_DICTIONARY);
// EnableMultiCombo(IDC_COMPRESS_DICTIONARY2);
SetOrder2();
EnableMultiCombo(IDC_COMPRESS_ORDER);
}
int GetMethodID_RAW();
int GetMethodID();
UString GetMethodSpec(UString &estimatedName);
UString GetMethodSpec();
bool IsMethodEqualTo(const UString &s);
UString GetEncryptionMethodSpec();
bool IsZipFormat();
bool IsXzFormat();
void SetEncryptionMethod();
int AddDict2(size_t sizeReal, size_t sizeShow);
int AddDict(size_t size);
// int AddDict_Chain(size_t size);
void SetDictionary2();
UInt32 GetComboValue(NWindows::NControl::CComboBox &c, int defMax = 0);
UInt64 GetComboValue_64(NWindows::NControl::CComboBox &c, int defMax = 0);
UInt32 GetLevel() { return GetComboValue(m_Level); }
UInt32 GetLevelSpec() { return GetComboValue(m_Level, 1); }
UInt32 GetLevel2();
UInt64 GetDictSpec() { return GetComboValue_64(m_Dictionary, 1); }
// UInt64 GetDictChainSpec() { return GetComboValue_64(m_Dictionary_Chain, 1); }
UInt64 GetDict2()
{
UInt64 num = GetDictSpec();
if (num == (UInt64)(Int64)-1)
{
if (_auto_Dict == (UInt32)(Int32)-1)
return (UInt64)(Int64)-1; // unknown
num = _auto_Dict;
}
return num;
}
// UInt32 GetOrder() { return GetComboValue(m_Order); }
UInt32 GetOrderSpec() { return GetComboValue(m_Order, 1); }
UInt32 GetNumThreadsSpec() { return GetComboValue(m_NumThreads, 1); }
UInt32 GetNumThreads2()
{
UInt32 num = GetNumThreadsSpec();
if (num == (UInt32)(Int32)-1)
num = _auto_NumThreads;
return num;
}
UInt32 GetBlockSizeSpec() { return GetComboValue(m_Solid, 1); }
/*
UInt32 GetPrecSpec() { return GetComboValue(m_Prec, 1); }
UInt32 GetPrec() { return GetComboValue(m_Prec, 0); }
*/
int AddOrder(UInt32 size);
int AddOrder_Auto();
void SetOrder2();
bool GetOrderMode();
void SetSolidBlockSize2();
void SetSolidBlockSize(/* bool useDictionary = false */)
{
SetSolidBlockSize2();
EnableMultiCombo(IDC_COMPRESS_SOLID);
}
void SetNumThreads2();
void SetNumThreads()
{
SetNumThreads2();
EnableMultiCombo(IDC_COMPRESS_THREADS);
}
int AddMemComboItem(UInt64 val, bool isPercent = false, bool isDefault = false);
void SetMemUseCombo();
UString Get_MemUse_Spec();
UInt64 Get_MemUse_Bytes();
UInt64 GetMemoryUsage_Dict_DecompMem(UInt64 dict, UInt64 &decompressMemory);
UInt64 GetMemoryUsage_Threads_Dict_DecompMem(UInt32 numThreads, UInt64 dict, UInt64 &decompressMemory);
UInt64 GetMemoryUsage_DecompMem(UInt64 &decompressMemory);
UInt64 GetMemoryUsageComp_Threads_Dict(UInt32 numThreads, UInt64 dict64);
void PrintMemUsage(UINT res, UInt64 value);
void SetMemoryUsage();
void Print_Params();
void SetParams();
void SaveOptionsInMem();
void UpdatePasswordControl();
bool IsShowPasswordChecked() const { return IsButtonCheckedBool(IDX_PASSWORD_SHOW); }
unsigned GetFormatIndex();
bool SetArcPathFields(const UString &path, UString &name, bool always);
bool SetArcPathFields(const UString &path);
bool GetFinalPath_Smart(UString &resPath) const;
void ArcPath_WasChanged(const UString &newPath);
void CheckSFXControlsEnable();
// void CheckVolumeEnable();
void EnableMultiCombo(unsigned id);
void FormatChanged(bool isChanged);
void OnButtonSetArchive();
bool IsSFX();
void OnButtonSFX();
virtual bool OnInit() Z7_override;
virtual bool OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam) Z7_override;
virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
virtual void OnOK() Z7_override;
virtual void OnHelp() Z7_override;
void MessageBoxError(LPCWSTR message)
{
MessageBoxW(*this, message, L"7-Zip", MB_ICONERROR);
}
void ShowOptionsString();
public:
const CObjectVector<CArcInfoEx> *ArcFormats;
CUIntVector ArcIndices; // can not be empty, must contain Info.FormatIndex, if Info.FormatIndex >= 0
AStringVector ExternalMethods;
void SetMethods(const CObjectVector<CCodecInfoUser> &userCodecs);
NCompressDialog::CInfo Info;
UString OriginalFileName; // for bzip2, gzip2
INT_PTR Create(HWND wndParent = NULL)
{
BIG_DIALOG_SIZE(400, 320);
return CModalDialog::Create(SIZED_DIALOG(IDD_COMPRESS), wndParent);
}
CCompressDialog() {}
};
class COptionsDialog: public NWindows::NControl::CModalDialog
{
struct CBoolBox
{
bool IsSupported;
bool DefaultVal;
CBoolPair BoolPair;
unsigned Id;
unsigned Set_Id;
void SetIDs(unsigned id, unsigned set_Id)
{
Id = id;
Set_Id = set_Id;
}
CBoolBox():
IsSupported(false),
DefaultVal(false)
{}
};
CCompressDialog *cd;
NWindows::NControl::CComboBox m_Prec;
UInt32 _auto_Prec;
UInt32 TimePrec;
void Reset_TimePrec() { TimePrec = (UInt32)(Int32)-1; }
bool IsSet_TimePrec() const { return TimePrec != (UInt32)(Int32)-1; }
CBoolBox MTime;
CBoolBox CTime;
CBoolBox ATime;
CBoolBox ZTime;
UString SecString;
UString NsString;
void CheckButton_Bool1(UINT id, const CBool1 &b1);
void GetButton_Bool1(UINT id, CBool1 &b1);
void CheckButton_BoolBox(bool supported, const CBoolPair &b2, CBoolBox &bb);
void GetButton_BoolBox(CBoolBox &bb);
void Store_TimeBoxes();
UInt32 GetComboValue(NWindows::NControl::CComboBox &c, int defMax = 0);
UInt32 GetPrecSpec()
{
UInt32 prec = GetComboValue(m_Prec, 1);
if (prec == _auto_Prec)
prec = (UInt32)(Int32)-1;
return prec;
}
UInt32 GetPrec() { return GetComboValue(m_Prec, 0); }
// void OnButton_TimeDefault();
int AddPrec(unsigned prec, bool isDefault);
void SetPrec();
void SetTimeMAC();
void On_CheckBoxSet_Prec_Clicked();
void On_CheckBoxSet_Clicked(const CBoolBox &bb);
virtual bool OnInit() Z7_override;
virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam) Z7_override;
virtual bool OnButtonClicked(unsigned buttonID, HWND buttonHWND) Z7_override;
virtual void OnOK() Z7_override;
virtual void OnHelp() Z7_override;
public:
INT_PTR Create(HWND wndParent = NULL)
{
BIG_DIALOG_SIZE(240, 232);
return CModalDialog::Create(SIZED_DIALOG(IDD_COMPRESS_OPTIONS), wndParent);
}
COptionsDialog(CCompressDialog *cdLoc):
cd(cdLoc)
// , TimePrec(0)
{
Reset_TimePrec();
}
};
#endif