1*f6dc9357SAndroid Build Coastguard Worker // Panel.h
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #ifndef ZIP7_INC_PANEL_H
4*f6dc9357SAndroid Build Coastguard Worker #define ZIP7_INC_PANEL_H
5*f6dc9357SAndroid Build Coastguard Worker
6*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyWindows.h"
7*f6dc9357SAndroid Build Coastguard Worker
8*f6dc9357SAndroid Build Coastguard Worker #if defined(__MINGW32__) || defined(__MINGW64__)
9*f6dc9357SAndroid Build Coastguard Worker #include <shlobj.h>
10*f6dc9357SAndroid Build Coastguard Worker #else
11*f6dc9357SAndroid Build Coastguard Worker #include <ShlObj.h>
12*f6dc9357SAndroid Build Coastguard Worker #endif
13*f6dc9357SAndroid Build Coastguard Worker
14*f6dc9357SAndroid Build Coastguard Worker #include "../../../../C/Alloc.h"
15*f6dc9357SAndroid Build Coastguard Worker
16*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/Defs.h"
17*f6dc9357SAndroid Build Coastguard Worker #include "../../../Common/MyCom.h"
18*f6dc9357SAndroid Build Coastguard Worker
19*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/DLL.h"
20*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileDir.h"
21*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileFind.h"
22*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/FileName.h"
23*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Handle.h"
24*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/PropVariantConv.h"
25*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Synchronization.h"
26*f6dc9357SAndroid Build Coastguard Worker
27*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ComboBox.h"
28*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Edit.h"
29*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ListView.h"
30*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ReBar.h"
31*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Static.h"
32*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/StatusBar.h"
33*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/ToolBar.h"
34*f6dc9357SAndroid Build Coastguard Worker #include "../../../Windows/Control/Window2.h"
35*f6dc9357SAndroid Build Coastguard Worker
36*f6dc9357SAndroid Build Coastguard Worker #include "../../Archive/IArchive.h"
37*f6dc9357SAndroid Build Coastguard Worker
38*f6dc9357SAndroid Build Coastguard Worker #include "ExtractCallback.h"
39*f6dc9357SAndroid Build Coastguard Worker
40*f6dc9357SAndroid Build Coastguard Worker #include "AppState.h"
41*f6dc9357SAndroid Build Coastguard Worker #include "IFolder.h"
42*f6dc9357SAndroid Build Coastguard Worker #include "MyCom2.h"
43*f6dc9357SAndroid Build Coastguard Worker #include "ProgressDialog2.h"
44*f6dc9357SAndroid Build Coastguard Worker #include "SysIconUtils.h"
45*f6dc9357SAndroid Build Coastguard Worker
46*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
47*f6dc9357SAndroid Build Coastguard Worker #define NON_CE_VAR(_v_)
48*f6dc9357SAndroid Build Coastguard Worker #else
49*f6dc9357SAndroid Build Coastguard Worker #define NON_CE_VAR(_v_) _v_
50*f6dc9357SAndroid Build Coastguard Worker #endif
51*f6dc9357SAndroid Build Coastguard Worker
52*f6dc9357SAndroid Build Coastguard Worker const int kParentFolderID = 100;
53*f6dc9357SAndroid Build Coastguard Worker
54*f6dc9357SAndroid Build Coastguard Worker const unsigned kParentIndex = (unsigned)(int)-1;
55*f6dc9357SAndroid Build Coastguard Worker const UInt32 kParentIndex_UInt32 = (UInt32)(Int32)kParentIndex;
56*f6dc9357SAndroid Build Coastguard Worker
57*f6dc9357SAndroid Build Coastguard Worker #if !defined(_WIN32) || defined(UNDER_CE)
58*f6dc9357SAndroid Build Coastguard Worker #define ROOT_FS_FOLDER L"\\"
59*f6dc9357SAndroid Build Coastguard Worker #else
60*f6dc9357SAndroid Build Coastguard Worker #define ROOT_FS_FOLDER L"C:\\"
61*f6dc9357SAndroid Build Coastguard Worker #endif
62*f6dc9357SAndroid Build Coastguard Worker
63*f6dc9357SAndroid Build Coastguard Worker #if !defined(Z7_WIN32_WINNT_MIN) || Z7_WIN32_WINNT_MIN < 0x0500 // < win2000
64*f6dc9357SAndroid Build Coastguard Worker #define Z7_USE_DYN_ComCtl32Version
65*f6dc9357SAndroid Build Coastguard Worker extern DWORD g_ComCtl32Version;
66*f6dc9357SAndroid Build Coastguard Worker #endif
67*f6dc9357SAndroid Build Coastguard Worker
68*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_BEGIN
69*f6dc9357SAndroid Build Coastguard Worker
DECLARE_INTERFACE(CPanelCallback)70*f6dc9357SAndroid Build Coastguard Worker DECLARE_INTERFACE(CPanelCallback)
71*f6dc9357SAndroid Build Coastguard Worker {
72*f6dc9357SAndroid Build Coastguard Worker virtual void OnTab() = 0;
73*f6dc9357SAndroid Build Coastguard Worker virtual void SetFocusToPath(unsigned index) = 0;
74*f6dc9357SAndroid Build Coastguard Worker virtual void OnCopy(bool move, bool copyToSame) = 0;
75*f6dc9357SAndroid Build Coastguard Worker virtual void OnSetSameFolder() = 0;
76*f6dc9357SAndroid Build Coastguard Worker virtual void OnSetSubFolder() = 0;
77*f6dc9357SAndroid Build Coastguard Worker virtual void PanelWasFocused() = 0;
78*f6dc9357SAndroid Build Coastguard Worker virtual void DragBegin() = 0;
79*f6dc9357SAndroid Build Coastguard Worker virtual void DragEnd() = 0;
80*f6dc9357SAndroid Build Coastguard Worker virtual void RefreshTitle(bool always) = 0;
81*f6dc9357SAndroid Build Coastguard Worker };
82*f6dc9357SAndroid Build Coastguard Worker Z7_PURE_INTERFACES_END
83*f6dc9357SAndroid Build Coastguard Worker
84*f6dc9357SAndroid Build Coastguard Worker void PanelCopyItems();
85*f6dc9357SAndroid Build Coastguard Worker
86*f6dc9357SAndroid Build Coastguard Worker
87*f6dc9357SAndroid Build Coastguard Worker struct CPropColumn
88*f6dc9357SAndroid Build Coastguard Worker {
89*f6dc9357SAndroid Build Coastguard Worker int Order;
90*f6dc9357SAndroid Build Coastguard Worker PROPID ID;
91*f6dc9357SAndroid Build Coastguard Worker VARTYPE Type;
92*f6dc9357SAndroid Build Coastguard Worker bool IsVisible;
93*f6dc9357SAndroid Build Coastguard Worker bool IsRawProp;
94*f6dc9357SAndroid Build Coastguard Worker UInt32 Width;
95*f6dc9357SAndroid Build Coastguard Worker UString Name;
96*f6dc9357SAndroid Build Coastguard Worker
IsEqualToCPropColumn97*f6dc9357SAndroid Build Coastguard Worker bool IsEqualTo(const CPropColumn &a) const
98*f6dc9357SAndroid Build Coastguard Worker {
99*f6dc9357SAndroid Build Coastguard Worker return Order == a.Order
100*f6dc9357SAndroid Build Coastguard Worker && ID == a.ID
101*f6dc9357SAndroid Build Coastguard Worker && Type == a.Type
102*f6dc9357SAndroid Build Coastguard Worker && IsVisible == a.IsVisible
103*f6dc9357SAndroid Build Coastguard Worker && IsRawProp == a.IsRawProp
104*f6dc9357SAndroid Build Coastguard Worker && Width == a.Width
105*f6dc9357SAndroid Build Coastguard Worker && Name == a.Name;
106*f6dc9357SAndroid Build Coastguard Worker }
107*f6dc9357SAndroid Build Coastguard Worker
CompareCPropColumn108*f6dc9357SAndroid Build Coastguard Worker int Compare(const CPropColumn &a) const { return MyCompare(Order, a.Order); }
109*f6dc9357SAndroid Build Coastguard Worker
Compare_NameFirstCPropColumn110*f6dc9357SAndroid Build Coastguard Worker int Compare_NameFirst(const CPropColumn &a) const
111*f6dc9357SAndroid Build Coastguard Worker {
112*f6dc9357SAndroid Build Coastguard Worker if (ID == kpidName)
113*f6dc9357SAndroid Build Coastguard Worker {
114*f6dc9357SAndroid Build Coastguard Worker if (a.ID != kpidName)
115*f6dc9357SAndroid Build Coastguard Worker return -1;
116*f6dc9357SAndroid Build Coastguard Worker }
117*f6dc9357SAndroid Build Coastguard Worker else if (a.ID == kpidName)
118*f6dc9357SAndroid Build Coastguard Worker return 1;
119*f6dc9357SAndroid Build Coastguard Worker return MyCompare(Order, a.Order);
120*f6dc9357SAndroid Build Coastguard Worker }
121*f6dc9357SAndroid Build Coastguard Worker };
122*f6dc9357SAndroid Build Coastguard Worker
123*f6dc9357SAndroid Build Coastguard Worker
124*f6dc9357SAndroid Build Coastguard Worker class CPropColumns: public CObjectVector<CPropColumn>
125*f6dc9357SAndroid Build Coastguard Worker {
126*f6dc9357SAndroid Build Coastguard Worker public:
FindItem_for_PropID(PROPID id)127*f6dc9357SAndroid Build Coastguard Worker int FindItem_for_PropID(PROPID id) const
128*f6dc9357SAndroid Build Coastguard Worker {
129*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, (*this))
130*f6dc9357SAndroid Build Coastguard Worker if ((*this)[i].ID == id)
131*f6dc9357SAndroid Build Coastguard Worker return (int)i;
132*f6dc9357SAndroid Build Coastguard Worker return -1;
133*f6dc9357SAndroid Build Coastguard Worker }
134*f6dc9357SAndroid Build Coastguard Worker
IsEqualTo(const CPropColumns & props)135*f6dc9357SAndroid Build Coastguard Worker bool IsEqualTo(const CPropColumns &props) const
136*f6dc9357SAndroid Build Coastguard Worker {
137*f6dc9357SAndroid Build Coastguard Worker if (Size() != props.Size())
138*f6dc9357SAndroid Build Coastguard Worker return false;
139*f6dc9357SAndroid Build Coastguard Worker FOR_VECTOR (i, (*this))
140*f6dc9357SAndroid Build Coastguard Worker if (!(*this)[i].IsEqualTo(props[i]))
141*f6dc9357SAndroid Build Coastguard Worker return false;
142*f6dc9357SAndroid Build Coastguard Worker return true;
143*f6dc9357SAndroid Build Coastguard Worker }
144*f6dc9357SAndroid Build Coastguard Worker };
145*f6dc9357SAndroid Build Coastguard Worker
146*f6dc9357SAndroid Build Coastguard Worker
147*f6dc9357SAndroid Build Coastguard Worker struct CTempFileInfo
148*f6dc9357SAndroid Build Coastguard Worker {
149*f6dc9357SAndroid Build Coastguard Worker UInt32 FileIndex; // index of file in folder
150*f6dc9357SAndroid Build Coastguard Worker bool NeedDelete;
151*f6dc9357SAndroid Build Coastguard Worker UString RelPath; // Relative path of file from Folder
152*f6dc9357SAndroid Build Coastguard Worker FString FolderPath;
153*f6dc9357SAndroid Build Coastguard Worker FString FilePath;
154*f6dc9357SAndroid Build Coastguard Worker NWindows::NFile::NFind::CFileInfo FileInfo;
155*f6dc9357SAndroid Build Coastguard Worker
CTempFileInfoCTempFileInfo156*f6dc9357SAndroid Build Coastguard Worker CTempFileInfo(): FileIndex((UInt32)(Int32)-1), NeedDelete(false) {}
DeleteDirAndFileCTempFileInfo157*f6dc9357SAndroid Build Coastguard Worker void DeleteDirAndFile() const
158*f6dc9357SAndroid Build Coastguard Worker {
159*f6dc9357SAndroid Build Coastguard Worker if (NeedDelete)
160*f6dc9357SAndroid Build Coastguard Worker {
161*f6dc9357SAndroid Build Coastguard Worker NWindows::NFile::NDir::DeleteFileAlways(FilePath);
162*f6dc9357SAndroid Build Coastguard Worker NWindows::NFile::NDir::RemoveDir(FolderPath);
163*f6dc9357SAndroid Build Coastguard Worker }
164*f6dc9357SAndroid Build Coastguard Worker }
WasChanged_from_TempFileInfoCTempFileInfo165*f6dc9357SAndroid Build Coastguard Worker bool WasChanged_from_TempFileInfo(const NWindows::NFile::NFind::CFileInfo &newFileInfo) const
166*f6dc9357SAndroid Build Coastguard Worker {
167*f6dc9357SAndroid Build Coastguard Worker return newFileInfo.Size != FileInfo.Size ||
168*f6dc9357SAndroid Build Coastguard Worker CompareFileTime(&newFileInfo.MTime, &FileInfo.MTime) != 0;
169*f6dc9357SAndroid Build Coastguard Worker }
170*f6dc9357SAndroid Build Coastguard Worker };
171*f6dc9357SAndroid Build Coastguard Worker
172*f6dc9357SAndroid Build Coastguard Worker
173*f6dc9357SAndroid Build Coastguard Worker struct CFolderLink: public CTempFileInfo
174*f6dc9357SAndroid Build Coastguard Worker {
175*f6dc9357SAndroid Build Coastguard Worker bool IsVirtual; // == true (if archive was open via IInStream):
176*f6dc9357SAndroid Build Coastguard Worker // archive was open from another archive,
177*f6dc9357SAndroid Build Coastguard Worker // archive size meets the size conditions derived from g_RAM_Size.
178*f6dc9357SAndroid Build Coastguard Worker // VirtFileSystem was used
179*f6dc9357SAndroid Build Coastguard Worker // archive was fully extracted to memory.
180*f6dc9357SAndroid Build Coastguard Worker bool UsePassword;
181*f6dc9357SAndroid Build Coastguard Worker NWindows::NDLL::CLibrary Library;
182*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderFolder> ParentFolder; // can be NULL, if parent is FS folder (in _parentFolders[0])
183*f6dc9357SAndroid Build Coastguard Worker UString ParentFolderPath; // including tail slash (doesn't include paths parts of parent in next level)
184*f6dc9357SAndroid Build Coastguard Worker UString Password;
185*f6dc9357SAndroid Build Coastguard Worker UString VirtualPath; // without tail slash
186*f6dc9357SAndroid Build Coastguard Worker CByteBuffer ZoneBuf; // ZoneBuf for virtaul stream (IsVirtual)
187*f6dc9357SAndroid Build Coastguard Worker
CFolderLinkCFolderLink188*f6dc9357SAndroid Build Coastguard Worker CFolderLink(): IsVirtual(false), UsePassword(false) {}
WasChanged_from_FolderLinkCFolderLink189*f6dc9357SAndroid Build Coastguard Worker bool WasChanged_from_FolderLink(const NWindows::NFile::NFind::CFileInfo &newFileInfo) const
190*f6dc9357SAndroid Build Coastguard Worker {
191*f6dc9357SAndroid Build Coastguard Worker // we call it, if we have two real files.
192*f6dc9357SAndroid Build Coastguard Worker // if archive was virtual, it means that we have updated that virtual to real file.
193*f6dc9357SAndroid Build Coastguard Worker return IsVirtual || CTempFileInfo::WasChanged_from_TempFileInfo(newFileInfo);
194*f6dc9357SAndroid Build Coastguard Worker }
195*f6dc9357SAndroid Build Coastguard Worker };
196*f6dc9357SAndroid Build Coastguard Worker
197*f6dc9357SAndroid Build Coastguard Worker
198*f6dc9357SAndroid Build Coastguard Worker enum MyMessages
199*f6dc9357SAndroid Build Coastguard Worker {
200*f6dc9357SAndroid Build Coastguard Worker // we can use WM_USER, since we have defined new window class.
201*f6dc9357SAndroid Build Coastguard Worker // so we don't need WM_APP.
202*f6dc9357SAndroid Build Coastguard Worker kShiftSelectMessage = WM_USER + 1,
203*f6dc9357SAndroid Build Coastguard Worker kReLoadMessage,
204*f6dc9357SAndroid Build Coastguard Worker kSetFocusToListView,
205*f6dc9357SAndroid Build Coastguard Worker kOpenItemChanged,
206*f6dc9357SAndroid Build Coastguard Worker kRefresh_StatusBar
207*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
208*f6dc9357SAndroid Build Coastguard Worker , kRefresh_HeaderComboBox
209*f6dc9357SAndroid Build Coastguard Worker #endif
210*f6dc9357SAndroid Build Coastguard Worker };
211*f6dc9357SAndroid Build Coastguard Worker
212*f6dc9357SAndroid Build Coastguard Worker UString GetFolderPath(IFolderFolder *folder);
213*f6dc9357SAndroid Build Coastguard Worker
214*f6dc9357SAndroid Build Coastguard Worker class CPanel;
215*f6dc9357SAndroid Build Coastguard Worker
216*f6dc9357SAndroid Build Coastguard Worker class CMyListView Z7_final: public NWindows::NControl::CListView2
217*f6dc9357SAndroid Build Coastguard Worker {
218*f6dc9357SAndroid Build Coastguard Worker // ~CMyListView() ZIP7_eq_delete;
219*f6dc9357SAndroid Build Coastguard Worker // CMyListView() ZIP7_eq_delete;
220*f6dc9357SAndroid Build Coastguard Worker public:
221*f6dc9357SAndroid Build Coastguard Worker // CMyListView() {}
222*f6dc9357SAndroid Build Coastguard Worker // ~CMyListView() Z7_DESTRUCTOR_override {} // change it
223*f6dc9357SAndroid Build Coastguard Worker CPanel *_panel;
224*f6dc9357SAndroid Build Coastguard Worker LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
225*f6dc9357SAndroid Build Coastguard Worker };
226*f6dc9357SAndroid Build Coastguard Worker
227*f6dc9357SAndroid Build Coastguard Worker /*
228*f6dc9357SAndroid Build Coastguard Worker class CMyComboBox: public NWindows::NControl::CComboBoxEx
229*f6dc9357SAndroid Build Coastguard Worker {
230*f6dc9357SAndroid Build Coastguard Worker public:
231*f6dc9357SAndroid Build Coastguard Worker WNDPROC _origWindowProc;
232*f6dc9357SAndroid Build Coastguard Worker CPanel *_panel;
233*f6dc9357SAndroid Build Coastguard Worker LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
234*f6dc9357SAndroid Build Coastguard Worker };
235*f6dc9357SAndroid Build Coastguard Worker */
236*f6dc9357SAndroid Build Coastguard Worker class CMyComboBoxEdit: public NWindows::NControl::CEdit
237*f6dc9357SAndroid Build Coastguard Worker {
238*f6dc9357SAndroid Build Coastguard Worker public:
239*f6dc9357SAndroid Build Coastguard Worker WNDPROC _origWindowProc;
240*f6dc9357SAndroid Build Coastguard Worker CPanel *_panel;
241*f6dc9357SAndroid Build Coastguard Worker LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam);
242*f6dc9357SAndroid Build Coastguard Worker };
243*f6dc9357SAndroid Build Coastguard Worker
244*f6dc9357SAndroid Build Coastguard Worker struct CSelectedState
245*f6dc9357SAndroid Build Coastguard Worker {
246*f6dc9357SAndroid Build Coastguard Worker int FocusedItem;
247*f6dc9357SAndroid Build Coastguard Worker bool SelectFocused;
248*f6dc9357SAndroid Build Coastguard Worker bool FocusedName_Defined;
249*f6dc9357SAndroid Build Coastguard Worker bool CalledFromTimer;
250*f6dc9357SAndroid Build Coastguard Worker UString FocusedName;
251*f6dc9357SAndroid Build Coastguard Worker UStringVector SelectedNames;
252*f6dc9357SAndroid Build Coastguard Worker
CSelectedStateCSelectedState253*f6dc9357SAndroid Build Coastguard Worker CSelectedState():
254*f6dc9357SAndroid Build Coastguard Worker FocusedItem(-1),
255*f6dc9357SAndroid Build Coastguard Worker SelectFocused(true),
256*f6dc9357SAndroid Build Coastguard Worker FocusedName_Defined(false),
257*f6dc9357SAndroid Build Coastguard Worker CalledFromTimer(false)
258*f6dc9357SAndroid Build Coastguard Worker {}
259*f6dc9357SAndroid Build Coastguard Worker };
260*f6dc9357SAndroid Build Coastguard Worker
261*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
262*f6dc9357SAndroid Build Coastguard Worker #define MY_NMLISTVIEW_NMITEMACTIVATE NMLISTVIEW
263*f6dc9357SAndroid Build Coastguard Worker #else
264*f6dc9357SAndroid Build Coastguard Worker #define MY_NMLISTVIEW_NMITEMACTIVATE NMITEMACTIVATE
265*f6dc9357SAndroid Build Coastguard Worker #endif
266*f6dc9357SAndroid Build Coastguard Worker
267*f6dc9357SAndroid Build Coastguard Worker struct CCopyToOptions
268*f6dc9357SAndroid Build Coastguard Worker {
269*f6dc9357SAndroid Build Coastguard Worker bool streamMode;
270*f6dc9357SAndroid Build Coastguard Worker bool moveMode;
271*f6dc9357SAndroid Build Coastguard Worker bool testMode;
272*f6dc9357SAndroid Build Coastguard Worker bool includeAltStreams;
273*f6dc9357SAndroid Build Coastguard Worker bool replaceAltStreamChars;
274*f6dc9357SAndroid Build Coastguard Worker bool showErrorMessages;
275*f6dc9357SAndroid Build Coastguard Worker
276*f6dc9357SAndroid Build Coastguard Worker bool NeedRegistryZone;
277*f6dc9357SAndroid Build Coastguard Worker NExtract::NZoneIdMode::EEnum ZoneIdMode;
278*f6dc9357SAndroid Build Coastguard Worker CByteBuffer ZoneBuf;
279*f6dc9357SAndroid Build Coastguard Worker
280*f6dc9357SAndroid Build Coastguard Worker UString folder;
281*f6dc9357SAndroid Build Coastguard Worker
282*f6dc9357SAndroid Build Coastguard Worker UStringVector hashMethods;
283*f6dc9357SAndroid Build Coastguard Worker
284*f6dc9357SAndroid Build Coastguard Worker CVirtFileSystem *VirtFileSystemSpec;
285*f6dc9357SAndroid Build Coastguard Worker // ISequentialOutStream *VirtFileSystem;
286*f6dc9357SAndroid Build Coastguard Worker
CCopyToOptionsCCopyToOptions287*f6dc9357SAndroid Build Coastguard Worker CCopyToOptions():
288*f6dc9357SAndroid Build Coastguard Worker streamMode(false),
289*f6dc9357SAndroid Build Coastguard Worker moveMode(false),
290*f6dc9357SAndroid Build Coastguard Worker testMode(false),
291*f6dc9357SAndroid Build Coastguard Worker includeAltStreams(true),
292*f6dc9357SAndroid Build Coastguard Worker replaceAltStreamChars(false),
293*f6dc9357SAndroid Build Coastguard Worker showErrorMessages(false),
294*f6dc9357SAndroid Build Coastguard Worker NeedRegistryZone(true),
295*f6dc9357SAndroid Build Coastguard Worker ZoneIdMode(NExtract::NZoneIdMode::kNone),
296*f6dc9357SAndroid Build Coastguard Worker VirtFileSystemSpec(NULL)
297*f6dc9357SAndroid Build Coastguard Worker // , VirtFileSystem(NULL)
298*f6dc9357SAndroid Build Coastguard Worker {}
299*f6dc9357SAndroid Build Coastguard Worker };
300*f6dc9357SAndroid Build Coastguard Worker
301*f6dc9357SAndroid Build Coastguard Worker
302*f6dc9357SAndroid Build Coastguard Worker
303*f6dc9357SAndroid Build Coastguard Worker struct COpenResult
304*f6dc9357SAndroid Build Coastguard Worker {
305*f6dc9357SAndroid Build Coastguard Worker // bool needOpenArc;
306*f6dc9357SAndroid Build Coastguard Worker // out:
307*f6dc9357SAndroid Build Coastguard Worker bool ArchiveIsOpened;
308*f6dc9357SAndroid Build Coastguard Worker bool Encrypted;
309*f6dc9357SAndroid Build Coastguard Worker UString ErrorMessage;
310*f6dc9357SAndroid Build Coastguard Worker
COpenResultCOpenResult311*f6dc9357SAndroid Build Coastguard Worker COpenResult():
312*f6dc9357SAndroid Build Coastguard Worker // needOpenArc(false),
313*f6dc9357SAndroid Build Coastguard Worker ArchiveIsOpened(false), Encrypted(false) {}
314*f6dc9357SAndroid Build Coastguard Worker };
315*f6dc9357SAndroid Build Coastguard Worker
316*f6dc9357SAndroid Build Coastguard Worker
317*f6dc9357SAndroid Build Coastguard Worker
318*f6dc9357SAndroid Build Coastguard Worker
319*f6dc9357SAndroid Build Coastguard Worker class CPanel Z7_final: public NWindows::NControl::CWindow2
320*f6dc9357SAndroid Build Coastguard Worker {
321*f6dc9357SAndroid Build Coastguard Worker bool _thereAre_ListView_Items;
322*f6dc9357SAndroid Build Coastguard Worker // bool _virtualMode;
323*f6dc9357SAndroid Build Coastguard Worker bool _enableItemChangeNotify;
324*f6dc9357SAndroid Build Coastguard Worker bool _thereAreDeletedItems;
325*f6dc9357SAndroid Build Coastguard Worker bool _markDeletedItems;
326*f6dc9357SAndroid Build Coastguard Worker bool _dontShowMode;
327*f6dc9357SAndroid Build Coastguard Worker bool _needSaveInfo;
328*f6dc9357SAndroid Build Coastguard Worker
329*f6dc9357SAndroid Build Coastguard Worker public:
330*f6dc9357SAndroid Build Coastguard Worker bool PanelCreated;
331*f6dc9357SAndroid Build Coastguard Worker bool _mySelectMode;
332*f6dc9357SAndroid Build Coastguard Worker bool _showDots;
333*f6dc9357SAndroid Build Coastguard Worker bool _showRealFileIcons;
334*f6dc9357SAndroid Build Coastguard Worker bool _flatMode;
335*f6dc9357SAndroid Build Coastguard Worker bool _flatModeForArc;
336*f6dc9357SAndroid Build Coastguard Worker bool _flatModeForDisk;
337*f6dc9357SAndroid Build Coastguard Worker bool _selectionIsDefined;
338*f6dc9357SAndroid Build Coastguard Worker // bool _showNtfsStrems_Mode;
339*f6dc9357SAndroid Build Coastguard Worker // bool _showNtfsStrems_ModeForDisk;
340*f6dc9357SAndroid Build Coastguard Worker // bool _showNtfsStrems_ModeForArc;
341*f6dc9357SAndroid Build Coastguard Worker
342*f6dc9357SAndroid Build Coastguard Worker bool _selectMark;
343*f6dc9357SAndroid Build Coastguard Worker bool _lastFocusedIsList;
344*f6dc9357SAndroid Build Coastguard Worker
345*f6dc9357SAndroid Build Coastguard Worker bool _processTimer;
346*f6dc9357SAndroid Build Coastguard Worker bool _processNotify;
347*f6dc9357SAndroid Build Coastguard Worker bool _processStatusBar;
348*f6dc9357SAndroid Build Coastguard Worker
349*f6dc9357SAndroid Build Coastguard Worker public:
350*f6dc9357SAndroid Build Coastguard Worker bool _ascending;
351*f6dc9357SAndroid Build Coastguard Worker PROPID _sortID;
352*f6dc9357SAndroid Build Coastguard Worker // int _sortIndex;
353*f6dc9357SAndroid Build Coastguard Worker Int32 _isRawSortProp;
354*f6dc9357SAndroid Build Coastguard Worker
355*f6dc9357SAndroid Build Coastguard Worker CMyListView _listView;
356*f6dc9357SAndroid Build Coastguard Worker CPanelCallback *_panelCallback;
357*f6dc9357SAndroid Build Coastguard Worker
358*f6dc9357SAndroid Build Coastguard Worker private:
359*f6dc9357SAndroid Build Coastguard Worker
360*f6dc9357SAndroid Build Coastguard Worker // CExtToIconMap _extToIconMap;
361*f6dc9357SAndroid Build Coastguard Worker UINT _baseID;
362*f6dc9357SAndroid Build Coastguard Worker unsigned _comboBoxID;
363*f6dc9357SAndroid Build Coastguard Worker UINT _statusBarID;
364*f6dc9357SAndroid Build Coastguard Worker
365*f6dc9357SAndroid Build Coastguard Worker public:
366*f6dc9357SAndroid Build Coastguard Worker DWORD _exStyle;
367*f6dc9357SAndroid Build Coastguard Worker // CUIntVector _realIndices;
368*f6dc9357SAndroid Build Coastguard Worker int _timestampLevel;
369*f6dc9357SAndroid Build Coastguard Worker UInt32 _listViewMode;
370*f6dc9357SAndroid Build Coastguard Worker int _xSize;
371*f6dc9357SAndroid Build Coastguard Worker private:
372*f6dc9357SAndroid Build Coastguard Worker int _startGroupSelect;
373*f6dc9357SAndroid Build Coastguard Worker int _prevFocusedItem;
374*f6dc9357SAndroid Build Coastguard Worker
375*f6dc9357SAndroid Build Coastguard Worker CAppState *_appState;
376*f6dc9357SAndroid Build Coastguard Worker
377*f6dc9357SAndroid Build Coastguard Worker virtual bool OnCommand(unsigned code, unsigned itemID, LPARAM lParam, LRESULT &result) Z7_override;
378*f6dc9357SAndroid Build Coastguard Worker virtual LRESULT OnMessage(UINT message, WPARAM wParam, LPARAM lParam) Z7_override;
379*f6dc9357SAndroid Build Coastguard Worker virtual bool OnCreate(CREATESTRUCT *createStruct) Z7_override;
380*f6dc9357SAndroid Build Coastguard Worker virtual bool OnSize(WPARAM wParam, int xSize, int ySize) Z7_override;
381*f6dc9357SAndroid Build Coastguard Worker virtual void OnDestroy() Z7_override;
382*f6dc9357SAndroid Build Coastguard Worker virtual bool OnNotify(UINT controlID, LPNMHDR lParam, LRESULT &result) Z7_override;
383*f6dc9357SAndroid Build Coastguard Worker
384*f6dc9357SAndroid Build Coastguard Worker void AddComboBoxItem(const UString &name, int iconIndex, unsigned indent, bool addToList);
385*f6dc9357SAndroid Build Coastguard Worker
386*f6dc9357SAndroid Build Coastguard Worker bool OnComboBoxCommand(UINT code, LPARAM param, LRESULT &result);
387*f6dc9357SAndroid Build Coastguard Worker
388*f6dc9357SAndroid Build Coastguard Worker #ifndef UNDER_CE
389*f6dc9357SAndroid Build Coastguard Worker
390*f6dc9357SAndroid Build Coastguard Worker LRESULT OnNotifyComboBoxEnter(const UString &s);
391*f6dc9357SAndroid Build Coastguard Worker bool OnNotifyComboBoxEndEdit(PNMCBEENDEDITW info, LRESULT &result);
392*f6dc9357SAndroid Build Coastguard Worker #ifndef _UNICODE
393*f6dc9357SAndroid Build Coastguard Worker bool OnNotifyComboBoxEndEdit(PNMCBEENDEDIT info, LRESULT &result);
394*f6dc9357SAndroid Build Coastguard Worker #endif
395*f6dc9357SAndroid Build Coastguard Worker
396*f6dc9357SAndroid Build Coastguard Worker #endif
397*f6dc9357SAndroid Build Coastguard Worker
398*f6dc9357SAndroid Build Coastguard Worker bool OnNotifyReBar(LPNMHDR lParam, LRESULT &result);
399*f6dc9357SAndroid Build Coastguard Worker bool OnNotifyComboBox(LPNMHDR lParam, LRESULT &result);
400*f6dc9357SAndroid Build Coastguard Worker void OnItemChanged(NMLISTVIEW *item);
401*f6dc9357SAndroid Build Coastguard Worker void OnNotifyActivateItems();
402*f6dc9357SAndroid Build Coastguard Worker bool OnNotifyList(LPNMHDR lParam, LRESULT &result);
403*f6dc9357SAndroid Build Coastguard Worker void OnDrag(LPNMLISTVIEW nmListView, bool isRightButton = false);
404*f6dc9357SAndroid Build Coastguard Worker bool OnKeyDown(LPNMLVKEYDOWN keyDownInfo, LRESULT &result);
405*f6dc9357SAndroid Build Coastguard Worker BOOL OnBeginLabelEdit(LV_DISPINFOW * lpnmh);
406*f6dc9357SAndroid Build Coastguard Worker BOOL OnEndLabelEdit(LV_DISPINFOW * lpnmh);
407*f6dc9357SAndroid Build Coastguard Worker void OnColumnClick(LPNMLISTVIEW info);
408*f6dc9357SAndroid Build Coastguard Worker bool OnCustomDraw(LPNMLVCUSTOMDRAW lplvcd, LRESULT &result);
409*f6dc9357SAndroid Build Coastguard Worker
410*f6dc9357SAndroid Build Coastguard Worker
411*f6dc9357SAndroid Build Coastguard Worker void ChangeWindowSize(int xSize, int ySize);
412*f6dc9357SAndroid Build Coastguard Worker HRESULT InitColumns();
413*f6dc9357SAndroid Build Coastguard Worker void DeleteColumn(unsigned index);
414*f6dc9357SAndroid Build Coastguard Worker void AddColumn(const CPropColumn &prop);
415*f6dc9357SAndroid Build Coastguard Worker
416*f6dc9357SAndroid Build Coastguard Worker void SetFocusedSelectedItem(int index, bool select);
417*f6dc9357SAndroid Build Coastguard Worker
418*f6dc9357SAndroid Build Coastguard Worker void OnShiftSelectMessage();
419*f6dc9357SAndroid Build Coastguard Worker void OnArrowWithShift();
420*f6dc9357SAndroid Build Coastguard Worker
421*f6dc9357SAndroid Build Coastguard Worker void OnInsert();
422*f6dc9357SAndroid Build Coastguard Worker // void OnUpWithShift();
423*f6dc9357SAndroid Build Coastguard Worker // void OnDownWithShift();
424*f6dc9357SAndroid Build Coastguard Worker // UString GetFileType(UInt32 index);
425*f6dc9357SAndroid Build Coastguard Worker LRESULT SetItemText(LVITEMW &item);
426*f6dc9357SAndroid Build Coastguard Worker // CRecordVector<PROPID> m_ColumnsPropIDs;
427*f6dc9357SAndroid Build Coastguard Worker
428*f6dc9357SAndroid Build Coastguard Worker public:
429*f6dc9357SAndroid Build Coastguard Worker HWND _mainWindow;
430*f6dc9357SAndroid Build Coastguard Worker
431*f6dc9357SAndroid Build Coastguard Worker NWindows::NControl::CReBar _headerReBar;
432*f6dc9357SAndroid Build Coastguard Worker NWindows::NControl::CToolBar _headerToolBar;
433*f6dc9357SAndroid Build Coastguard Worker NWindows::NControl::
434*f6dc9357SAndroid Build Coastguard Worker #ifdef UNDER_CE
435*f6dc9357SAndroid Build Coastguard Worker CComboBox
436*f6dc9357SAndroid Build Coastguard Worker #else
437*f6dc9357SAndroid Build Coastguard Worker CComboBoxEx
438*f6dc9357SAndroid Build Coastguard Worker #endif
439*f6dc9357SAndroid Build Coastguard Worker _headerComboBox;
440*f6dc9357SAndroid Build Coastguard Worker UStringVector ComboBoxPaths;
441*f6dc9357SAndroid Build Coastguard Worker // CMyComboBox _headerComboBox;
442*f6dc9357SAndroid Build Coastguard Worker CMyComboBoxEdit _comboBoxEdit;
443*f6dc9357SAndroid Build Coastguard Worker NWindows::NControl::CStatusBar _statusBar;
444*f6dc9357SAndroid Build Coastguard Worker // NWindows::NControl::CStatusBar _statusBar2;
445*f6dc9357SAndroid Build Coastguard Worker
446*f6dc9357SAndroid Build Coastguard Worker CBoolVector _selectedStatusVector;
447*f6dc9357SAndroid Build Coastguard Worker CSelectedState _selectedState;
448*f6dc9357SAndroid Build Coastguard Worker
449*f6dc9357SAndroid Build Coastguard Worker UString _currentFolderPrefix;
450*f6dc9357SAndroid Build Coastguard Worker
451*f6dc9357SAndroid Build Coastguard Worker CObjectVector<CFolderLink> _parentFolders;
452*f6dc9357SAndroid Build Coastguard Worker NWindows::NDLL::CLibrary _library;
453*f6dc9357SAndroid Build Coastguard Worker
454*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderFolder> _folder;
455*f6dc9357SAndroid Build Coastguard Worker CBoolVector _isDirVector;
456*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderCompare> _folderCompare;
457*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderGetItemName> _folderGetItemName;
458*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IArchiveGetRawProps> _folderRawProps;
459*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderAltStreams> _folderAltStreams;
460*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IFolderOperations> _folderOperations;
461*f6dc9357SAndroid Build Coastguard Worker
462*f6dc9357SAndroid Build Coastguard Worker // for drag and drop highliting
463*f6dc9357SAndroid Build Coastguard Worker int m_DropHighlighted_SelectionIndex;
464*f6dc9357SAndroid Build Coastguard Worker // int m_SubFolderIndex; // realIndex of item in m_Panel list (if drop cursor to that item)
465*f6dc9357SAndroid Build Coastguard Worker UString m_DropHighlighted_SubFolderName; // name of folder in m_Panel list (if drop cursor to that folder)
466*f6dc9357SAndroid Build Coastguard Worker
467*f6dc9357SAndroid Build Coastguard Worker // CMyComPtr<IFolderGetSystemIconIndex> _folderGetSystemIconIndex;
468*f6dc9357SAndroid Build Coastguard Worker UStringVector _fastFolders;
469*f6dc9357SAndroid Build Coastguard Worker
470*f6dc9357SAndroid Build Coastguard Worker UString _typeIDString;
471*f6dc9357SAndroid Build Coastguard Worker CListViewInfo _listViewInfo;
472*f6dc9357SAndroid Build Coastguard Worker
473*f6dc9357SAndroid Build Coastguard Worker CPropColumns _columns;
474*f6dc9357SAndroid Build Coastguard Worker CPropColumns _visibleColumns;
475*f6dc9357SAndroid Build Coastguard Worker
476*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> _sevenZipContextMenu;
477*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> _systemContextMenu;
478*f6dc9357SAndroid Build Coastguard Worker
479*f6dc9357SAndroid Build Coastguard Worker void UpdateSelection();
480*f6dc9357SAndroid Build Coastguard Worker void SelectSpec(bool selectMode);
481*f6dc9357SAndroid Build Coastguard Worker void SelectByType(bool selectMode);
482*f6dc9357SAndroid Build Coastguard Worker void SelectAll(bool selectMode);
483*f6dc9357SAndroid Build Coastguard Worker void InvertSelection();
484*f6dc9357SAndroid Build Coastguard Worker
RedrawListItems()485*f6dc9357SAndroid Build Coastguard Worker void RedrawListItems()
486*f6dc9357SAndroid Build Coastguard Worker {
487*f6dc9357SAndroid Build Coastguard Worker _listView.RedrawAllItems();
488*f6dc9357SAndroid Build Coastguard Worker }
DeleteListItems()489*f6dc9357SAndroid Build Coastguard Worker void DeleteListItems()
490*f6dc9357SAndroid Build Coastguard Worker {
491*f6dc9357SAndroid Build Coastguard Worker if (_thereAre_ListView_Items)
492*f6dc9357SAndroid Build Coastguard Worker {
493*f6dc9357SAndroid Build Coastguard Worker const bool b = _enableItemChangeNotify;
494*f6dc9357SAndroid Build Coastguard Worker _enableItemChangeNotify = false;
495*f6dc9357SAndroid Build Coastguard Worker _listView.DeleteAllItems();
496*f6dc9357SAndroid Build Coastguard Worker _thereAre_ListView_Items = false;
497*f6dc9357SAndroid Build Coastguard Worker _enableItemChangeNotify = b;
498*f6dc9357SAndroid Build Coastguard Worker }
499*f6dc9357SAndroid Build Coastguard Worker }
500*f6dc9357SAndroid Build Coastguard Worker
501*f6dc9357SAndroid Build Coastguard Worker // void SysIconsWereChanged() { _extToIconMap.Clear(); }
502*f6dc9357SAndroid Build Coastguard Worker
503*f6dc9357SAndroid Build Coastguard Worker void DeleteItems(bool toRecycleBin);
504*f6dc9357SAndroid Build Coastguard Worker void CreateFolder();
505*f6dc9357SAndroid Build Coastguard Worker void CreateFile();
506*f6dc9357SAndroid Build Coastguard Worker bool CorrectFsPath(const UString &path, UString &result);
507*f6dc9357SAndroid Build Coastguard Worker // bool IsPathForPlugin(const UString &path);
508*f6dc9357SAndroid Build Coastguard Worker
509*f6dc9357SAndroid Build Coastguard Worker
510*f6dc9357SAndroid Build Coastguard Worker HWND GetParent() const;
511*f6dc9357SAndroid Build Coastguard Worker
GetRealIndex(const LVITEMW & item)512*f6dc9357SAndroid Build Coastguard Worker UInt32 GetRealIndex(const LVITEMW &item) const
513*f6dc9357SAndroid Build Coastguard Worker {
514*f6dc9357SAndroid Build Coastguard Worker /*
515*f6dc9357SAndroid Build Coastguard Worker if (_virtualMode)
516*f6dc9357SAndroid Build Coastguard Worker return _realIndices[item.iItem];
517*f6dc9357SAndroid Build Coastguard Worker */
518*f6dc9357SAndroid Build Coastguard Worker return (UInt32)item.lParam;
519*f6dc9357SAndroid Build Coastguard Worker }
520*f6dc9357SAndroid Build Coastguard Worker
GetRealItemIndex(int indexInListView)521*f6dc9357SAndroid Build Coastguard Worker unsigned GetRealItemIndex(int indexInListView) const
522*f6dc9357SAndroid Build Coastguard Worker {
523*f6dc9357SAndroid Build Coastguard Worker /*
524*f6dc9357SAndroid Build Coastguard Worker if (_virtualMode)
525*f6dc9357SAndroid Build Coastguard Worker return indexInListView;
526*f6dc9357SAndroid Build Coastguard Worker */
527*f6dc9357SAndroid Build Coastguard Worker LPARAM param;
528*f6dc9357SAndroid Build Coastguard Worker if (!_listView.GetItemParam((unsigned)indexInListView, param))
529*f6dc9357SAndroid Build Coastguard Worker throw 1;
530*f6dc9357SAndroid Build Coastguard Worker return (unsigned)param;
531*f6dc9357SAndroid Build Coastguard Worker }
532*f6dc9357SAndroid Build Coastguard Worker
533*f6dc9357SAndroid Build Coastguard Worker void ReleaseFolder();
534*f6dc9357SAndroid Build Coastguard Worker void SetNewFolder(IFolderFolder *newFolder);
535*f6dc9357SAndroid Build Coastguard Worker void GetSelectedNames(UStringVector &selectedNames);
536*f6dc9357SAndroid Build Coastguard Worker void SaveSelectedState(CSelectedState &s);
537*f6dc9357SAndroid Build Coastguard Worker HRESULT RefreshListCtrl(const CSelectedState &s);
538*f6dc9357SAndroid Build Coastguard Worker HRESULT RefreshListCtrl_SaveFocused(bool onTimer = false);
539*f6dc9357SAndroid Build Coastguard Worker
540*f6dc9357SAndroid Build Coastguard Worker // UInt32 GetItem_Attrib(UInt32 itemIndex) const;
541*f6dc9357SAndroid Build Coastguard Worker
542*f6dc9357SAndroid Build Coastguard Worker bool GetItem_BoolProp(UInt32 itemIndex, PROPID propID) const;
543*f6dc9357SAndroid Build Coastguard Worker
544*f6dc9357SAndroid Build Coastguard Worker bool IsItem_Deleted(unsigned itemIndex) const;
545*f6dc9357SAndroid Build Coastguard Worker bool IsItem_Folder(unsigned itemIndex) const;
546*f6dc9357SAndroid Build Coastguard Worker bool IsItem_AltStream(unsigned itemIndex) const;
547*f6dc9357SAndroid Build Coastguard Worker
548*f6dc9357SAndroid Build Coastguard Worker UString GetItemName(unsigned itemIndex) const;
549*f6dc9357SAndroid Build Coastguard Worker UString GetItemName_for_Copy(unsigned itemIndex) const;
550*f6dc9357SAndroid Build Coastguard Worker void GetItemName(unsigned itemIndex, UString &s) const;
551*f6dc9357SAndroid Build Coastguard Worker UString GetItemPrefix(unsigned itemIndex) const;
552*f6dc9357SAndroid Build Coastguard Worker UString GetItemRelPath(unsigned itemIndex) const;
553*f6dc9357SAndroid Build Coastguard Worker UString GetItemRelPath2(unsigned itemIndex) const;
554*f6dc9357SAndroid Build Coastguard Worker
555*f6dc9357SAndroid Build Coastguard Worker void Add_ItemRelPath2_To_String(unsigned itemIndex, UString &s) const;
556*f6dc9357SAndroid Build Coastguard Worker
557*f6dc9357SAndroid Build Coastguard Worker UString GetItemFullPath(unsigned itemIndex) const;
558*f6dc9357SAndroid Build Coastguard Worker UInt64 GetItem_UInt64Prop(unsigned itemIndex, PROPID propID) const;
559*f6dc9357SAndroid Build Coastguard Worker UInt64 GetItemSize(unsigned itemIndex) const;
560*f6dc9357SAndroid Build Coastguard Worker
561*f6dc9357SAndroid Build Coastguard Worker ////////////////////////
562*f6dc9357SAndroid Build Coastguard Worker // PanelFolderChange.cpp
563*f6dc9357SAndroid Build Coastguard Worker
564*f6dc9357SAndroid Build Coastguard Worker void SetToRootFolder();
565*f6dc9357SAndroid Build Coastguard Worker HRESULT BindToPath(const UString &fullPath, const UString &arcFormat, COpenResult &openRes); // can be prefix
566*f6dc9357SAndroid Build Coastguard Worker HRESULT BindToPathAndRefresh(const UString &path);
567*f6dc9357SAndroid Build Coastguard Worker void OpenDrivesFolder();
568*f6dc9357SAndroid Build Coastguard Worker
569*f6dc9357SAndroid Build Coastguard Worker void SetBookmark(unsigned index);
570*f6dc9357SAndroid Build Coastguard Worker void OpenBookmark(unsigned index);
571*f6dc9357SAndroid Build Coastguard Worker
572*f6dc9357SAndroid Build Coastguard Worker void LoadFullPath();
573*f6dc9357SAndroid Build Coastguard Worker void LoadFullPathAndShow();
574*f6dc9357SAndroid Build Coastguard Worker void FoldersHistory();
575*f6dc9357SAndroid Build Coastguard Worker void OpenParentFolder();
576*f6dc9357SAndroid Build Coastguard Worker void CloseOneLevel();
577*f6dc9357SAndroid Build Coastguard Worker void CloseOpenFolders();
578*f6dc9357SAndroid Build Coastguard Worker void OpenRootFolder();
579*f6dc9357SAndroid Build Coastguard Worker
580*f6dc9357SAndroid Build Coastguard Worker UString GetParentDirPrefix() const;
581*f6dc9357SAndroid Build Coastguard Worker
582*f6dc9357SAndroid Build Coastguard Worker HRESULT Create(HWND mainWindow, HWND parentWindow,
583*f6dc9357SAndroid Build Coastguard Worker UINT id,
584*f6dc9357SAndroid Build Coastguard Worker const UString ¤tFolderPrefix,
585*f6dc9357SAndroid Build Coastguard Worker const UString &arcFormat,
586*f6dc9357SAndroid Build Coastguard Worker CPanelCallback *panelCallback,
587*f6dc9357SAndroid Build Coastguard Worker CAppState *appState,
588*f6dc9357SAndroid Build Coastguard Worker bool needOpenArc,
589*f6dc9357SAndroid Build Coastguard Worker COpenResult &openRes);
590*f6dc9357SAndroid Build Coastguard Worker
591*f6dc9357SAndroid Build Coastguard Worker void SetFocusToList();
592*f6dc9357SAndroid Build Coastguard Worker void SetFocusToLastRememberedItem();
593*f6dc9357SAndroid Build Coastguard Worker
594*f6dc9357SAndroid Build Coastguard Worker
595*f6dc9357SAndroid Build Coastguard Worker void SaveListViewInfo();
596*f6dc9357SAndroid Build Coastguard Worker
CPanel()597*f6dc9357SAndroid Build Coastguard Worker CPanel() :
598*f6dc9357SAndroid Build Coastguard Worker _thereAre_ListView_Items(false),
599*f6dc9357SAndroid Build Coastguard Worker // _virtualMode(false),
600*f6dc9357SAndroid Build Coastguard Worker _enableItemChangeNotify(true),
601*f6dc9357SAndroid Build Coastguard Worker _thereAreDeletedItems(false),
602*f6dc9357SAndroid Build Coastguard Worker _markDeletedItems(true),
603*f6dc9357SAndroid Build Coastguard Worker _dontShowMode(false),
604*f6dc9357SAndroid Build Coastguard Worker _needSaveInfo(false),
605*f6dc9357SAndroid Build Coastguard Worker
606*f6dc9357SAndroid Build Coastguard Worker PanelCreated(false),
607*f6dc9357SAndroid Build Coastguard Worker _mySelectMode(false),
608*f6dc9357SAndroid Build Coastguard Worker _showDots(false),
609*f6dc9357SAndroid Build Coastguard Worker _showRealFileIcons(false),
610*f6dc9357SAndroid Build Coastguard Worker _flatMode(false),
611*f6dc9357SAndroid Build Coastguard Worker _flatModeForArc(false),
612*f6dc9357SAndroid Build Coastguard Worker _flatModeForDisk(false),
613*f6dc9357SAndroid Build Coastguard Worker _selectionIsDefined(false),
614*f6dc9357SAndroid Build Coastguard Worker // _showNtfsStrems_Mode(false),
615*f6dc9357SAndroid Build Coastguard Worker // _showNtfsStrems_ModeForDisk(false),
616*f6dc9357SAndroid Build Coastguard Worker // _showNtfsStrems_ModeForArc(false),
617*f6dc9357SAndroid Build Coastguard Worker
618*f6dc9357SAndroid Build Coastguard Worker _exStyle(0),
619*f6dc9357SAndroid Build Coastguard Worker _timestampLevel(kTimestampPrintLevel_MIN),
620*f6dc9357SAndroid Build Coastguard Worker _listViewMode(3),
621*f6dc9357SAndroid Build Coastguard Worker _xSize(300),
622*f6dc9357SAndroid Build Coastguard Worker _startGroupSelect(0),
623*f6dc9357SAndroid Build Coastguard Worker m_DropHighlighted_SelectionIndex(-1)
624*f6dc9357SAndroid Build Coastguard Worker {}
625*f6dc9357SAndroid Build Coastguard Worker
626*f6dc9357SAndroid Build Coastguard Worker ~CPanel() Z7_DESTRUCTOR_override;
627*f6dc9357SAndroid Build Coastguard Worker
628*f6dc9357SAndroid Build Coastguard Worker void ReleasePanel();
629*f6dc9357SAndroid Build Coastguard Worker
SetExtendedStyle()630*f6dc9357SAndroid Build Coastguard Worker void SetExtendedStyle()
631*f6dc9357SAndroid Build Coastguard Worker {
632*f6dc9357SAndroid Build Coastguard Worker if (_listView)
633*f6dc9357SAndroid Build Coastguard Worker _listView.SetExtendedListViewStyle(_exStyle);
634*f6dc9357SAndroid Build Coastguard Worker }
635*f6dc9357SAndroid Build Coastguard Worker
636*f6dc9357SAndroid Build Coastguard Worker void SetSortRawStatus();
637*f6dc9357SAndroid Build Coastguard Worker void OnLeftClick(MY_NMLISTVIEW_NMITEMACTIVATE *itemActivate);
638*f6dc9357SAndroid Build Coastguard Worker bool OnRightClick(MY_NMLISTVIEW_NMITEMACTIVATE *itemActivate, LRESULT &result);
639*f6dc9357SAndroid Build Coastguard Worker void ShowColumnsContextMenu(int x, int y);
640*f6dc9357SAndroid Build Coastguard Worker
641*f6dc9357SAndroid Build Coastguard Worker void OnTimer();
642*f6dc9357SAndroid Build Coastguard Worker void OnReload(bool onTimer = false);
643*f6dc9357SAndroid Build Coastguard Worker bool OnContextMenu(HANDLE windowHandle, int xPos, int yPos);
644*f6dc9357SAndroid Build Coastguard Worker
645*f6dc9357SAndroid Build Coastguard Worker HRESULT CreateShellContextMenu(
646*f6dc9357SAndroid Build Coastguard Worker const CRecordVector<UInt32> &operatedIndices,
647*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> &systemContextMenu);
648*f6dc9357SAndroid Build Coastguard Worker
649*f6dc9357SAndroid Build Coastguard Worker void CreateSystemMenu(HMENU menu,
650*f6dc9357SAndroid Build Coastguard Worker bool showExtendedVerbs,
651*f6dc9357SAndroid Build Coastguard Worker const CRecordVector<UInt32> &operatedIndices,
652*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> &systemContextMenu);
653*f6dc9357SAndroid Build Coastguard Worker
654*f6dc9357SAndroid Build Coastguard Worker void CreateSevenZipMenu(HMENU menu,
655*f6dc9357SAndroid Build Coastguard Worker bool showExtendedVerbs,
656*f6dc9357SAndroid Build Coastguard Worker const CRecordVector<UInt32> &operatedIndices,
657*f6dc9357SAndroid Build Coastguard Worker int firstDirIndex,
658*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> &sevenZipContextMenu);
659*f6dc9357SAndroid Build Coastguard Worker
660*f6dc9357SAndroid Build Coastguard Worker void CreateFileMenu(HMENU menu,
661*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> &sevenZipContextMenu,
662*f6dc9357SAndroid Build Coastguard Worker CMyComPtr<IContextMenu> &systemContextMenu,
663*f6dc9357SAndroid Build Coastguard Worker bool programMenu);
664*f6dc9357SAndroid Build Coastguard Worker
665*f6dc9357SAndroid Build Coastguard Worker void CreateFileMenu(HMENU menu);
666*f6dc9357SAndroid Build Coastguard Worker bool InvokePluginCommand(unsigned id);
667*f6dc9357SAndroid Build Coastguard Worker bool InvokePluginCommand(unsigned id, IContextMenu *sevenZipContextMenu,
668*f6dc9357SAndroid Build Coastguard Worker IContextMenu *systemContextMenu);
669*f6dc9357SAndroid Build Coastguard Worker
670*f6dc9357SAndroid Build Coastguard Worker void InvokeSystemCommand(const char *command);
671*f6dc9357SAndroid Build Coastguard Worker void Properties();
672*f6dc9357SAndroid Build Coastguard Worker void EditCut();
673*f6dc9357SAndroid Build Coastguard Worker void EditCopy();
674*f6dc9357SAndroid Build Coastguard Worker void EditPaste();
675*f6dc9357SAndroid Build Coastguard Worker
676*f6dc9357SAndroid Build Coastguard Worker
677*f6dc9357SAndroid Build Coastguard Worker // void SortItems(int index);
678*f6dc9357SAndroid Build Coastguard Worker void SortItemsWithPropID(PROPID propID);
679*f6dc9357SAndroid Build Coastguard Worker
680*f6dc9357SAndroid Build Coastguard Worker void Get_ItemIndices_Selected(CRecordVector<UInt32> &indices) const;
681*f6dc9357SAndroid Build Coastguard Worker void Get_ItemIndices_Operated(CRecordVector<UInt32> &indices) const;
682*f6dc9357SAndroid Build Coastguard Worker void Get_ItemIndices_All(CRecordVector<UInt32> &indices) const;
683*f6dc9357SAndroid Build Coastguard Worker void Get_ItemIndices_OperSmart(CRecordVector<UInt32> &indices) const;
684*f6dc9357SAndroid Build Coastguard Worker // void GetOperatedListViewIndices(CRecordVector<UInt32> &indices) const;
685*f6dc9357SAndroid Build Coastguard Worker void KillSelection();
686*f6dc9357SAndroid Build Coastguard Worker
687*f6dc9357SAndroid Build Coastguard Worker UString GetFolderTypeID() const;
688*f6dc9357SAndroid Build Coastguard Worker
689*f6dc9357SAndroid Build Coastguard Worker bool IsFolderTypeEqTo(const char *s) const;
690*f6dc9357SAndroid Build Coastguard Worker bool IsRootFolder() const;
691*f6dc9357SAndroid Build Coastguard Worker bool IsFSFolder() const;
692*f6dc9357SAndroid Build Coastguard Worker bool IsFSDrivesFolder() const;
693*f6dc9357SAndroid Build Coastguard Worker bool IsAltStreamsFolder() const;
694*f6dc9357SAndroid Build Coastguard Worker bool IsArcFolder() const;
695*f6dc9357SAndroid Build Coastguard Worker bool IsHashFolder() const;
696*f6dc9357SAndroid Build Coastguard Worker
697*f6dc9357SAndroid Build Coastguard Worker /*
698*f6dc9357SAndroid Build Coastguard Worker c:\Dir
699*f6dc9357SAndroid Build Coastguard Worker Computer\
700*f6dc9357SAndroid Build Coastguard Worker \\?\
701*f6dc9357SAndroid Build Coastguard Worker \\.\
702*f6dc9357SAndroid Build Coastguard Worker */
Is_IO_FS_Folder()703*f6dc9357SAndroid Build Coastguard Worker bool Is_IO_FS_Folder() const
704*f6dc9357SAndroid Build Coastguard Worker {
705*f6dc9357SAndroid Build Coastguard Worker return IsFSFolder() || IsFSDrivesFolder() || IsAltStreamsFolder();
706*f6dc9357SAndroid Build Coastguard Worker }
707*f6dc9357SAndroid Build Coastguard Worker
Is_Slow_Icon_Folder()708*f6dc9357SAndroid Build Coastguard Worker bool Is_Slow_Icon_Folder() const
709*f6dc9357SAndroid Build Coastguard Worker {
710*f6dc9357SAndroid Build Coastguard Worker return IsFSFolder() || IsAltStreamsFolder();
711*f6dc9357SAndroid Build Coastguard Worker }
712*f6dc9357SAndroid Build Coastguard Worker
713*f6dc9357SAndroid Build Coastguard Worker // bool IsFsOrDrivesFolder() const { return IsFSFolder() || IsFSDrivesFolder(); }
IsDeviceDrivesPrefix()714*f6dc9357SAndroid Build Coastguard Worker bool IsDeviceDrivesPrefix() const { return _currentFolderPrefix == L"\\\\.\\"; }
IsSuperDrivesPrefix()715*f6dc9357SAndroid Build Coastguard Worker bool IsSuperDrivesPrefix() const { return _currentFolderPrefix == L"\\\\?\\"; }
716*f6dc9357SAndroid Build Coastguard Worker
717*f6dc9357SAndroid Build Coastguard Worker /*
718*f6dc9357SAndroid Build Coastguard Worker c:\Dir
719*f6dc9357SAndroid Build Coastguard Worker Computer\
720*f6dc9357SAndroid Build Coastguard Worker \\?\
721*f6dc9357SAndroid Build Coastguard Worker */
IsFsOrPureDrivesFolder()722*f6dc9357SAndroid Build Coastguard Worker bool IsFsOrPureDrivesFolder() const { return IsFSFolder() || (IsFSDrivesFolder() && !IsDeviceDrivesPrefix()); }
723*f6dc9357SAndroid Build Coastguard Worker
724*f6dc9357SAndroid Build Coastguard Worker /*
725*f6dc9357SAndroid Build Coastguard Worker c:\Dir
726*f6dc9357SAndroid Build Coastguard Worker Computer\
727*f6dc9357SAndroid Build Coastguard Worker \\?\
728*f6dc9357SAndroid Build Coastguard Worker \\SERVER\
729*f6dc9357SAndroid Build Coastguard Worker */
IsFolder_with_FsItems()730*f6dc9357SAndroid Build Coastguard Worker bool IsFolder_with_FsItems() const
731*f6dc9357SAndroid Build Coastguard Worker {
732*f6dc9357SAndroid Build Coastguard Worker if (IsFsOrPureDrivesFolder())
733*f6dc9357SAndroid Build Coastguard Worker return true;
734*f6dc9357SAndroid Build Coastguard Worker #if defined(_WIN32) && !defined(UNDER_CE)
735*f6dc9357SAndroid Build Coastguard Worker FString prefix = us2fs(GetFsPath());
736*f6dc9357SAndroid Build Coastguard Worker return (prefix.Len() == NWindows::NFile::NName::GetNetworkServerPrefixSize(prefix));
737*f6dc9357SAndroid Build Coastguard Worker #else
738*f6dc9357SAndroid Build Coastguard Worker return false;
739*f6dc9357SAndroid Build Coastguard Worker #endif
740*f6dc9357SAndroid Build Coastguard Worker }
741*f6dc9357SAndroid Build Coastguard Worker
742*f6dc9357SAndroid Build Coastguard Worker UString GetFsPath() const;
743*f6dc9357SAndroid Build Coastguard Worker UString GetDriveOrNetworkPrefix() const;
744*f6dc9357SAndroid Build Coastguard Worker
DoesItSupportOperations()745*f6dc9357SAndroid Build Coastguard Worker bool DoesItSupportOperations() const { return _folderOperations != NULL; }
746*f6dc9357SAndroid Build Coastguard Worker bool IsThereReadOnlyFolder() const;
747*f6dc9357SAndroid Build Coastguard Worker bool CheckBeforeUpdate(UINT resourceID);
748*f6dc9357SAndroid Build Coastguard Worker
Disable_Processing_Timer_Notify_StatusBar()749*f6dc9357SAndroid Build Coastguard Worker void Disable_Processing_Timer_Notify_StatusBar()
750*f6dc9357SAndroid Build Coastguard Worker {
751*f6dc9357SAndroid Build Coastguard Worker _processTimer = false;
752*f6dc9357SAndroid Build Coastguard Worker _processNotify = false;
753*f6dc9357SAndroid Build Coastguard Worker _processStatusBar = false;
754*f6dc9357SAndroid Build Coastguard Worker }
755*f6dc9357SAndroid Build Coastguard Worker
756*f6dc9357SAndroid Build Coastguard Worker class CDisableTimerProcessing
757*f6dc9357SAndroid Build Coastguard Worker {
758*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CDisableTimerProcessing)
759*f6dc9357SAndroid Build Coastguard Worker
760*f6dc9357SAndroid Build Coastguard Worker bool _processTimer;
761*f6dc9357SAndroid Build Coastguard Worker CPanel &_panel;
762*f6dc9357SAndroid Build Coastguard Worker
763*f6dc9357SAndroid Build Coastguard Worker public:
764*f6dc9357SAndroid Build Coastguard Worker
CDisableTimerProcessing(CPanel & panel)765*f6dc9357SAndroid Build Coastguard Worker CDisableTimerProcessing(CPanel &panel): _panel(panel) { Disable(); }
~CDisableTimerProcessing()766*f6dc9357SAndroid Build Coastguard Worker ~CDisableTimerProcessing() { Restore(); }
Disable()767*f6dc9357SAndroid Build Coastguard Worker void Disable()
768*f6dc9357SAndroid Build Coastguard Worker {
769*f6dc9357SAndroid Build Coastguard Worker _processTimer = _panel._processTimer;
770*f6dc9357SAndroid Build Coastguard Worker _panel._processTimer = false;
771*f6dc9357SAndroid Build Coastguard Worker }
Restore()772*f6dc9357SAndroid Build Coastguard Worker void Restore()
773*f6dc9357SAndroid Build Coastguard Worker {
774*f6dc9357SAndroid Build Coastguard Worker _panel._processTimer = _processTimer;
775*f6dc9357SAndroid Build Coastguard Worker }
776*f6dc9357SAndroid Build Coastguard Worker };
777*f6dc9357SAndroid Build Coastguard Worker
778*f6dc9357SAndroid Build Coastguard Worker class CDisableTimerProcessing2
779*f6dc9357SAndroid Build Coastguard Worker {
780*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CDisableTimerProcessing2)
781*f6dc9357SAndroid Build Coastguard Worker
782*f6dc9357SAndroid Build Coastguard Worker bool _processTimer;
783*f6dc9357SAndroid Build Coastguard Worker CPanel *_panel;
784*f6dc9357SAndroid Build Coastguard Worker
785*f6dc9357SAndroid Build Coastguard Worker public:
786*f6dc9357SAndroid Build Coastguard Worker
CDisableTimerProcessing2(CPanel * panel)787*f6dc9357SAndroid Build Coastguard Worker CDisableTimerProcessing2(CPanel *panel): _processTimer(true), _panel(panel) { Disable(); }
~CDisableTimerProcessing2()788*f6dc9357SAndroid Build Coastguard Worker ~CDisableTimerProcessing2() { Restore(); }
Disable()789*f6dc9357SAndroid Build Coastguard Worker void Disable()
790*f6dc9357SAndroid Build Coastguard Worker {
791*f6dc9357SAndroid Build Coastguard Worker if (_panel)
792*f6dc9357SAndroid Build Coastguard Worker {
793*f6dc9357SAndroid Build Coastguard Worker _processTimer = _panel->_processTimer;
794*f6dc9357SAndroid Build Coastguard Worker _panel->_processTimer = false;
795*f6dc9357SAndroid Build Coastguard Worker }
796*f6dc9357SAndroid Build Coastguard Worker }
Restore()797*f6dc9357SAndroid Build Coastguard Worker void Restore()
798*f6dc9357SAndroid Build Coastguard Worker {
799*f6dc9357SAndroid Build Coastguard Worker if (_panel)
800*f6dc9357SAndroid Build Coastguard Worker {
801*f6dc9357SAndroid Build Coastguard Worker _panel->_processTimer = _processTimer;
802*f6dc9357SAndroid Build Coastguard Worker _panel = NULL;
803*f6dc9357SAndroid Build Coastguard Worker }
804*f6dc9357SAndroid Build Coastguard Worker }
805*f6dc9357SAndroid Build Coastguard Worker };
806*f6dc9357SAndroid Build Coastguard Worker
807*f6dc9357SAndroid Build Coastguard Worker class CDisableNotify
808*f6dc9357SAndroid Build Coastguard Worker {
809*f6dc9357SAndroid Build Coastguard Worker Z7_CLASS_NO_COPY(CDisableNotify)
810*f6dc9357SAndroid Build Coastguard Worker
811*f6dc9357SAndroid Build Coastguard Worker bool _processNotify;
812*f6dc9357SAndroid Build Coastguard Worker bool _processStatusBar;
813*f6dc9357SAndroid Build Coastguard Worker
814*f6dc9357SAndroid Build Coastguard Worker CPanel &_panel;
815*f6dc9357SAndroid Build Coastguard Worker
816*f6dc9357SAndroid Build Coastguard Worker public:
817*f6dc9357SAndroid Build Coastguard Worker
CDisableNotify(CPanel & panel)818*f6dc9357SAndroid Build Coastguard Worker CDisableNotify(CPanel &panel): _panel(panel) { Disable(); }
~CDisableNotify()819*f6dc9357SAndroid Build Coastguard Worker ~CDisableNotify() { Restore(); }
Disable()820*f6dc9357SAndroid Build Coastguard Worker void Disable()
821*f6dc9357SAndroid Build Coastguard Worker {
822*f6dc9357SAndroid Build Coastguard Worker _processNotify = _panel._processNotify;
823*f6dc9357SAndroid Build Coastguard Worker _processStatusBar = _panel._processStatusBar;
824*f6dc9357SAndroid Build Coastguard Worker _panel._processNotify = false;
825*f6dc9357SAndroid Build Coastguard Worker _panel._processStatusBar = false;
826*f6dc9357SAndroid Build Coastguard Worker }
SetMemMode_Enable()827*f6dc9357SAndroid Build Coastguard Worker void SetMemMode_Enable()
828*f6dc9357SAndroid Build Coastguard Worker {
829*f6dc9357SAndroid Build Coastguard Worker _processNotify = true;
830*f6dc9357SAndroid Build Coastguard Worker _processStatusBar = true;
831*f6dc9357SAndroid Build Coastguard Worker }
Restore()832*f6dc9357SAndroid Build Coastguard Worker void Restore()
833*f6dc9357SAndroid Build Coastguard Worker {
834*f6dc9357SAndroid Build Coastguard Worker _panel._processNotify = _processNotify;
835*f6dc9357SAndroid Build Coastguard Worker _panel._processStatusBar = _processStatusBar;
836*f6dc9357SAndroid Build Coastguard Worker }
837*f6dc9357SAndroid Build Coastguard Worker };
838*f6dc9357SAndroid Build Coastguard Worker
InvalidateList()839*f6dc9357SAndroid Build Coastguard Worker void InvalidateList() { _listView.InvalidateRect(NULL, true); }
840*f6dc9357SAndroid Build Coastguard Worker
841*f6dc9357SAndroid Build Coastguard Worker HRESULT RefreshListCtrl();
842*f6dc9357SAndroid Build Coastguard Worker
843*f6dc9357SAndroid Build Coastguard Worker
844*f6dc9357SAndroid Build Coastguard Worker // void MessageBox_Info(LPCWSTR message, LPCWSTR caption) const;
845*f6dc9357SAndroid Build Coastguard Worker // void MessageBox_Warning(LPCWSTR message) const;
846*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_Caption(LPCWSTR message, LPCWSTR caption) const;
847*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error(LPCWSTR message) const;
848*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_HRESULT_Caption(HRESULT errorCode, LPCWSTR caption) const;
849*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_HRESULT(HRESULT errorCode) const;
850*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_2Lines_Message_HRESULT(LPCWSTR message, HRESULT errorCode) const;
851*f6dc9357SAndroid Build Coastguard Worker void MessageBox_LastError(LPCWSTR caption) const;
852*f6dc9357SAndroid Build Coastguard Worker void MessageBox_LastError() const;
853*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_LangID(UINT resourceID) const;
854*f6dc9357SAndroid Build Coastguard Worker void MessageBox_Error_UnsupportOperation() const;
855*f6dc9357SAndroid Build Coastguard Worker // void MessageBoxErrorForUpdate(HRESULT errorCode, UINT resourceID);
856*f6dc9357SAndroid Build Coastguard Worker
857*f6dc9357SAndroid Build Coastguard Worker
858*f6dc9357SAndroid Build Coastguard Worker void OpenAltStreams();
859*f6dc9357SAndroid Build Coastguard Worker
860*f6dc9357SAndroid Build Coastguard Worker void OpenFocusedItemAsInternal(const wchar_t *type = NULL);
861*f6dc9357SAndroid Build Coastguard Worker void OpenSelectedItems(bool internal);
862*f6dc9357SAndroid Build Coastguard Worker
863*f6dc9357SAndroid Build Coastguard Worker void OpenFolderExternal(unsigned index);
864*f6dc9357SAndroid Build Coastguard Worker
865*f6dc9357SAndroid Build Coastguard Worker void OpenFolder(unsigned index);
866*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenParentArchiveFolder();
867*f6dc9357SAndroid Build Coastguard Worker
868*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenAsArc(IInStream *inStream,
869*f6dc9357SAndroid Build Coastguard Worker const CTempFileInfo &tempFileInfo,
870*f6dc9357SAndroid Build Coastguard Worker const UString &virtualFilePath,
871*f6dc9357SAndroid Build Coastguard Worker const UString &arcFormat,
872*f6dc9357SAndroid Build Coastguard Worker COpenResult &openRes);
873*f6dc9357SAndroid Build Coastguard Worker
874*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenAsArc_Msg(IInStream *inStream,
875*f6dc9357SAndroid Build Coastguard Worker const CTempFileInfo &tempFileInfo,
876*f6dc9357SAndroid Build Coastguard Worker const UString &virtualFilePath,
877*f6dc9357SAndroid Build Coastguard Worker const UString &arcFormat
878*f6dc9357SAndroid Build Coastguard Worker // , bool showErrorMessage
879*f6dc9357SAndroid Build Coastguard Worker );
880*f6dc9357SAndroid Build Coastguard Worker
881*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenAsArc_Name(const UString &relPath, const UString &arcFormat
882*f6dc9357SAndroid Build Coastguard Worker // , bool showErrorMessage
883*f6dc9357SAndroid Build Coastguard Worker );
884*f6dc9357SAndroid Build Coastguard Worker HRESULT OpenAsArc_Index(unsigned index, const wchar_t *type /* = NULL */
885*f6dc9357SAndroid Build Coastguard Worker // , bool showErrorMessage
886*f6dc9357SAndroid Build Coastguard Worker );
887*f6dc9357SAndroid Build Coastguard Worker
888*f6dc9357SAndroid Build Coastguard Worker void OpenItemInArchive(unsigned index, bool tryInternal, bool tryExternal,
889*f6dc9357SAndroid Build Coastguard Worker bool editMode, bool useEditor, const wchar_t *type = NULL);
890*f6dc9357SAndroid Build Coastguard Worker
891*f6dc9357SAndroid Build Coastguard Worker HRESULT OnOpenItemChanged(UInt32 index, const wchar_t *fullFilePath, bool usePassword, const UString &password);
892*f6dc9357SAndroid Build Coastguard Worker LRESULT OnOpenItemChanged(LPARAM lParam);
893*f6dc9357SAndroid Build Coastguard Worker
894*f6dc9357SAndroid Build Coastguard Worker bool IsVirus_Message(const UString &name);
895*f6dc9357SAndroid Build Coastguard Worker void OpenItem(unsigned index, bool tryInternal, bool tryExternal, const wchar_t *type = NULL);
896*f6dc9357SAndroid Build Coastguard Worker void EditItem(bool useEditor);
897*f6dc9357SAndroid Build Coastguard Worker void EditItem(unsigned index, bool useEditor);
898*f6dc9357SAndroid Build Coastguard Worker
899*f6dc9357SAndroid Build Coastguard Worker void RenameFile();
900*f6dc9357SAndroid Build Coastguard Worker void ChangeComment();
901*f6dc9357SAndroid Build Coastguard Worker
902*f6dc9357SAndroid Build Coastguard Worker void SetListViewMode(UInt32 index);
GetListViewMode()903*f6dc9357SAndroid Build Coastguard Worker UInt32 GetListViewMode() const { return _listViewMode; }
GetSortID()904*f6dc9357SAndroid Build Coastguard Worker PROPID GetSortID() const { return _sortID; }
905*f6dc9357SAndroid Build Coastguard Worker
906*f6dc9357SAndroid Build Coastguard Worker void ChangeFlatMode();
907*f6dc9357SAndroid Build Coastguard Worker void Change_ShowNtfsStrems_Mode();
GetFlatMode()908*f6dc9357SAndroid Build Coastguard Worker bool GetFlatMode() const { return _flatMode; }
909*f6dc9357SAndroid Build Coastguard Worker // bool Get_ShowNtfsStrems_Mode() const { return _showNtfsStrems_Mode; }
910*f6dc9357SAndroid Build Coastguard Worker
911*f6dc9357SAndroid Build Coastguard Worker bool AutoRefresh_Mode;
Set_AutoRefresh_Mode(bool mode)912*f6dc9357SAndroid Build Coastguard Worker void Set_AutoRefresh_Mode(bool mode)
913*f6dc9357SAndroid Build Coastguard Worker {
914*f6dc9357SAndroid Build Coastguard Worker AutoRefresh_Mode = mode;
915*f6dc9357SAndroid Build Coastguard Worker }
916*f6dc9357SAndroid Build Coastguard Worker
917*f6dc9357SAndroid Build Coastguard Worker void Post_Refresh_StatusBar();
918*f6dc9357SAndroid Build Coastguard Worker void Refresh_StatusBar();
919*f6dc9357SAndroid Build Coastguard Worker
920*f6dc9357SAndroid Build Coastguard Worker void AddToArchive();
921*f6dc9357SAndroid Build Coastguard Worker
922*f6dc9357SAndroid Build Coastguard Worker int FindDir_InOperatedList(const CRecordVector<UInt32> &indices) const;
923*f6dc9357SAndroid Build Coastguard Worker void GetFilePaths(const CRecordVector<UInt32> &indices, UStringVector &paths) const;
924*f6dc9357SAndroid Build Coastguard Worker void ExtractArchives();
925*f6dc9357SAndroid Build Coastguard Worker void TestArchives();
926*f6dc9357SAndroid Build Coastguard Worker
927*f6dc9357SAndroid Build Coastguard Worker void Get_ZoneId_Stream_from_ParentFolders(CByteBuffer &buf);
928*f6dc9357SAndroid Build Coastguard Worker
929*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyTo(CCopyToOptions &options,
930*f6dc9357SAndroid Build Coastguard Worker const CRecordVector<UInt32> &indices,
931*f6dc9357SAndroid Build Coastguard Worker UStringVector *messages,
932*f6dc9357SAndroid Build Coastguard Worker bool &usePassword, UString &password,
933*f6dc9357SAndroid Build Coastguard Worker const UStringVector *filePaths = NULL);
934*f6dc9357SAndroid Build Coastguard Worker
CopyTo(CCopyToOptions & options,const CRecordVector<UInt32> & indices,UStringVector * messages)935*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyTo(CCopyToOptions &options,
936*f6dc9357SAndroid Build Coastguard Worker const CRecordVector<UInt32> &indices,
937*f6dc9357SAndroid Build Coastguard Worker UStringVector *messages)
938*f6dc9357SAndroid Build Coastguard Worker {
939*f6dc9357SAndroid Build Coastguard Worker bool usePassword = false;
940*f6dc9357SAndroid Build Coastguard Worker UString password;
941*f6dc9357SAndroid Build Coastguard Worker if (!_parentFolders.IsEmpty())
942*f6dc9357SAndroid Build Coastguard Worker {
943*f6dc9357SAndroid Build Coastguard Worker const CFolderLink &fl = _parentFolders.Back();
944*f6dc9357SAndroid Build Coastguard Worker usePassword = fl.UsePassword;
945*f6dc9357SAndroid Build Coastguard Worker password = fl.Password;
946*f6dc9357SAndroid Build Coastguard Worker }
947*f6dc9357SAndroid Build Coastguard Worker return CopyTo(options, indices, messages, usePassword, password);
948*f6dc9357SAndroid Build Coastguard Worker }
949*f6dc9357SAndroid Build Coastguard Worker
CopyFsItems(CCopyToOptions & options,const UStringVector & filePaths,UStringVector * messages)950*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyFsItems(CCopyToOptions &options,
951*f6dc9357SAndroid Build Coastguard Worker const UStringVector &filePaths,
952*f6dc9357SAndroid Build Coastguard Worker UStringVector *messages)
953*f6dc9357SAndroid Build Coastguard Worker {
954*f6dc9357SAndroid Build Coastguard Worker bool usePassword = false;
955*f6dc9357SAndroid Build Coastguard Worker UString password;
956*f6dc9357SAndroid Build Coastguard Worker CRecordVector<UInt32> indices;
957*f6dc9357SAndroid Build Coastguard Worker return CopyTo(options, indices, messages, usePassword, password, &filePaths);
958*f6dc9357SAndroid Build Coastguard Worker }
959*f6dc9357SAndroid Build Coastguard Worker
960*f6dc9357SAndroid Build Coastguard Worker
961*f6dc9357SAndroid Build Coastguard Worker HRESULT CopyFrom(bool moveMode, const UString &folderPrefix, const UStringVector &filePaths,
962*f6dc9357SAndroid Build Coastguard Worker bool showErrorMessages, UStringVector *messages);
963*f6dc9357SAndroid Build Coastguard Worker
964*f6dc9357SAndroid Build Coastguard Worker void CopyFromNoAsk(bool moveMode, const UStringVector &filePaths);
965*f6dc9357SAndroid Build Coastguard Worker
966*f6dc9357SAndroid Build Coastguard Worker void CompressDropFiles(
967*f6dc9357SAndroid Build Coastguard Worker const UStringVector &filePaths,
968*f6dc9357SAndroid Build Coastguard Worker const UString &folderPath,
969*f6dc9357SAndroid Build Coastguard Worker bool createNewArchive,
970*f6dc9357SAndroid Build Coastguard Worker bool moveMode,
971*f6dc9357SAndroid Build Coastguard Worker UInt32 sourceFlags,
972*f6dc9357SAndroid Build Coastguard Worker UInt32 &targetFlags);
973*f6dc9357SAndroid Build Coastguard Worker
974*f6dc9357SAndroid Build Coastguard Worker void RefreshTitle(bool always = false) { _panelCallback->RefreshTitle(always); }
RefreshTitleAlways()975*f6dc9357SAndroid Build Coastguard Worker void RefreshTitleAlways() { RefreshTitle(true); }
976*f6dc9357SAndroid Build Coastguard Worker
977*f6dc9357SAndroid Build Coastguard Worker UString GetItemsInfoString(const CRecordVector<UInt32> &indices);
978*f6dc9357SAndroid Build Coastguard Worker };
979*f6dc9357SAndroid Build Coastguard Worker
980*f6dc9357SAndroid Build Coastguard Worker
981*f6dc9357SAndroid Build Coastguard Worker class CMyBuffer
982*f6dc9357SAndroid Build Coastguard Worker {
983*f6dc9357SAndroid Build Coastguard Worker void *_data;
984*f6dc9357SAndroid Build Coastguard Worker public:
CMyBuffer()985*f6dc9357SAndroid Build Coastguard Worker CMyBuffer(): _data(NULL) {}
986*f6dc9357SAndroid Build Coastguard Worker operator void *() { return _data; }
Allocate(size_t size)987*f6dc9357SAndroid Build Coastguard Worker bool Allocate(size_t size)
988*f6dc9357SAndroid Build Coastguard Worker {
989*f6dc9357SAndroid Build Coastguard Worker if (_data)
990*f6dc9357SAndroid Build Coastguard Worker return false;
991*f6dc9357SAndroid Build Coastguard Worker _data = ::MidAlloc(size);
992*f6dc9357SAndroid Build Coastguard Worker return _data != NULL;
993*f6dc9357SAndroid Build Coastguard Worker }
~CMyBuffer()994*f6dc9357SAndroid Build Coastguard Worker ~CMyBuffer() { ::MidFree(_data); }
995*f6dc9357SAndroid Build Coastguard Worker };
996*f6dc9357SAndroid Build Coastguard Worker
997*f6dc9357SAndroid Build Coastguard Worker struct CExitEventLauncher
998*f6dc9357SAndroid Build Coastguard Worker {
999*f6dc9357SAndroid Build Coastguard Worker NWindows::NSynchronization::CManualResetEvent _exitEvent;
1000*f6dc9357SAndroid Build Coastguard Worker bool _needExit;
1001*f6dc9357SAndroid Build Coastguard Worker unsigned _numActiveThreads;
1002*f6dc9357SAndroid Build Coastguard Worker CRecordVector< ::CThread > _threads;
1003*f6dc9357SAndroid Build Coastguard Worker
CExitEventLauncherCExitEventLauncher1004*f6dc9357SAndroid Build Coastguard Worker CExitEventLauncher()
1005*f6dc9357SAndroid Build Coastguard Worker {
1006*f6dc9357SAndroid Build Coastguard Worker _needExit = false;
1007*f6dc9357SAndroid Build Coastguard Worker if (_exitEvent.Create(false) != S_OK)
1008*f6dc9357SAndroid Build Coastguard Worker throw 9387173;
1009*f6dc9357SAndroid Build Coastguard Worker _needExit = true;
1010*f6dc9357SAndroid Build Coastguard Worker _numActiveThreads = 0;
1011*f6dc9357SAndroid Build Coastguard Worker }
1012*f6dc9357SAndroid Build Coastguard Worker
~CExitEventLauncherCExitEventLauncher1013*f6dc9357SAndroid Build Coastguard Worker ~CExitEventLauncher() { Exit(true); }
1014*f6dc9357SAndroid Build Coastguard Worker
1015*f6dc9357SAndroid Build Coastguard Worker void Exit(bool hardExit);
1016*f6dc9357SAndroid Build Coastguard Worker };
1017*f6dc9357SAndroid Build Coastguard Worker
1018*f6dc9357SAndroid Build Coastguard Worker extern CExitEventLauncher g_ExitEventLauncher;
1019*f6dc9357SAndroid Build Coastguard Worker
1020*f6dc9357SAndroid Build Coastguard Worker #endif
1021