xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/Panel.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
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 &currentFolderPrefix,
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