xref: /aosp_15_r20/external/lzma/CPP/7zip/UI/FileManager/App.h (revision f6dc9357d832569d4d1f5d24eacdb3935a1ae8e6)
1 // App.h
2 
3 #ifndef ZIP7_INC_APP_H
4 #define ZIP7_INC_APP_H
5 
6 #include "../../../Windows/Control/CommandBar.h"
7 #include "../../../Windows/Control/ImageList.h"
8 
9 #include "AppState.h"
10 #include "Panel.h"
11 
12 class CApp;
13 
14 extern CApp g_App;
15 extern HWND g_HWND;
16 
17 const unsigned kNumPanelsMax = 2;
18 
19 extern bool g_IsSmallScreen;
20 
21 // must be larger than context menu IDs
22 const int kMenuCmdID_Toolbar_Start = 1070;
23 const int kMenuCmdID_Plugin_Start = 1100;
24 
25 enum
26 {
27   kMenuCmdID_Toolbar_Add = kMenuCmdID_Toolbar_Start,
28   kMenuCmdID_Toolbar_Extract,
29   kMenuCmdID_Toolbar_Test,
30   kMenuCmdID_Toolbar_End
31 };
32 
33 class CPanelCallbackImp Z7_final: public CPanelCallback
34 {
35   CApp *_app;
36   unsigned _index;
37 public:
Init(CApp * app,unsigned index)38   void Init(CApp *app, unsigned index)
39   {
40     _app = app;
41     _index = index;
42   }
43   virtual void OnTab() Z7_override;
44   virtual void SetFocusToPath(unsigned index) Z7_override;
45   virtual void OnCopy(bool move, bool copyToSame) Z7_override;
46   virtual void OnSetSameFolder() Z7_override;
47   virtual void OnSetSubFolder() Z7_override;
48   virtual void PanelWasFocused() Z7_override;
49   virtual void DragBegin() Z7_override;
50   virtual void DragEnd() Z7_override;
51   virtual void RefreshTitle(bool always) Z7_override;
52 };
53 
54 
55 class CDropTarget;
56 
57 class CApp
58 {
59 public:
60   NWindows::CWindow _window;
61   bool ShowSystemMenu;
62   bool AutoRefresh_Mode;
63   // bool ShowDeletedFiles;
64   unsigned NumPanels;
65   unsigned LastFocusedPanel;
66 
67   bool ShowStandardToolbar;
68   bool ShowArchiveToolbar;
69   bool ShowButtonsLables;
70   bool LargeButtons;
71 
72   CAppState AppState;
73   CPanelCallbackImp m_PanelCallbackImp[kNumPanelsMax];
74   CPanel Panels[kNumPanelsMax];
75 
76   NWindows::NControl::CImageList _buttonsImageList;
77 
78   #ifdef UNDER_CE
79   NWindows::NControl::CCommandBar _commandBar;
80   #endif
81   NWindows::NControl::CToolBar _toolBar;
82 
83   CDropTarget *_dropTargetSpec;
84   CMyComPtr<IDropTarget> _dropTarget;
85 
86   UString LangString_N_SELECTED_ITEMS;
87 
88   void ReloadLangItems();
89 
CApp()90   CApp():
91     _window(NULL),
92     AutoRefresh_Mode(true),
93     NumPanels(2),
94     LastFocusedPanel(0)
95   {
96     SetPanels_AutoRefresh_Mode();
97   }
98 
99   void CreateDragTarget();
100   void SetFocusedPanel(unsigned index);
101   void DragBegin(unsigned panelIndex);
102   void DragEnd();
103 
104   void OnCopy(bool move, bool copyToSame, unsigned srcPanelIndex);
105   void OnSetSameFolder(unsigned srcPanelIndex);
106   void OnSetSubFolder(unsigned srcPanelIndex);
107 
108   HRESULT CreateOnePanel(unsigned panelIndex, const UString &mainPath, const UString &arcFormat, bool needOpenArc, COpenResult &openRes);
109   HRESULT Create(HWND hwnd, const UString &mainPath, const UString &arcFormat, int xSizes[2], bool needOpenArc, COpenResult &openRes);
110   void Read();
111   void Save();
112   void ReleaseApp();
113 
114   // void SetFocus(int panelIndex) { Panels[panelIndex].SetFocusToList(); }
SetFocusToLastItem()115   void SetFocusToLastItem() { Panels[LastFocusedPanel].SetFocusToLastRememberedItem(); }
GetFocusedPanelIndex()116   unsigned GetFocusedPanelIndex() const { return LastFocusedPanel; }
IsPanelVisible(unsigned index)117   bool IsPanelVisible(unsigned index) const { return (NumPanels > 1 || index == LastFocusedPanel); }
GetFocusedPanel()118   CPanel &GetFocusedPanel() { return Panels[GetFocusedPanelIndex()]; }
119 
120   // File Menu
OpenItem()121   void OpenItem() { GetFocusedPanel().OpenSelectedItems(true); }
OpenItemInside(const wchar_t * type)122   void OpenItemInside(const wchar_t *type) { GetFocusedPanel().OpenFocusedItemAsInternal(type); }
OpenItemOutside()123   void OpenItemOutside() { GetFocusedPanel().OpenSelectedItems(false); }
EditItem(bool useEditor)124   void EditItem(bool useEditor) { GetFocusedPanel().EditItem(useEditor); }
Rename()125   void Rename() { GetFocusedPanel().RenameFile(); }
CopyTo()126   void CopyTo() { OnCopy(false, false, GetFocusedPanelIndex()); }
MoveTo()127   void MoveTo() { OnCopy(true, false, GetFocusedPanelIndex()); }
Delete(bool toRecycleBin)128   void Delete(bool toRecycleBin) { GetFocusedPanel().DeleteItems(toRecycleBin); }
129   HRESULT CalculateCrc2(const UString &methodName);
130   void CalculateCrc(const char *methodName);
131 
132   void DiffFiles(const UString &path1, const UString &path2);
133   void DiffFiles();
134 
135   void VerCtrl(unsigned id);
136 
137   void Split();
138   void Combine();
Properties()139   void Properties() { GetFocusedPanel().Properties(); }
Comment()140   void Comment() { GetFocusedPanel().ChangeComment(); }
141 
142   #ifndef UNDER_CE
143   void Link();
OpenAltStreams()144   void OpenAltStreams() { GetFocusedPanel().OpenAltStreams(); }
145   #endif
146 
CreateFolder()147   void CreateFolder() { GetFocusedPanel().CreateFolder(); }
CreateFile()148   void CreateFile() { GetFocusedPanel().CreateFile(); }
149 
150   // Edit
EditCut()151   void EditCut() { GetFocusedPanel().EditCut(); }
EditCopy()152   void EditCopy() { GetFocusedPanel().EditCopy(); }
EditPaste()153   void EditPaste() { GetFocusedPanel().EditPaste(); }
154 
SelectAll(bool selectMode)155   void SelectAll(bool selectMode) { GetFocusedPanel().SelectAll(selectMode); }
InvertSelection()156   void InvertSelection() { GetFocusedPanel().InvertSelection(); }
SelectSpec(bool selectMode)157   void SelectSpec(bool selectMode) { GetFocusedPanel().SelectSpec(selectMode); }
SelectByType(bool selectMode)158   void SelectByType(bool selectMode) { GetFocusedPanel().SelectByType(selectMode); }
159 
Refresh_StatusBar()160   void Refresh_StatusBar() { GetFocusedPanel().Refresh_StatusBar(); }
161 
SetListViewMode(UInt32 index)162   void SetListViewMode(UInt32 index) { GetFocusedPanel().SetListViewMode(index); }
GetListViewMode()163   UInt32 GetListViewMode() { return GetFocusedPanel().GetListViewMode(); }
GetSortID()164   PROPID GetSortID() { return GetFocusedPanel().GetSortID(); }
165 
SortItemsWithPropID(PROPID propID)166   void SortItemsWithPropID(PROPID propID) { GetFocusedPanel().SortItemsWithPropID(propID); }
167 
OpenRootFolder()168   void OpenRootFolder() { GetFocusedPanel().OpenDrivesFolder(); }
OpenParentFolder()169   void OpenParentFolder() { GetFocusedPanel().OpenParentFolder(); }
FoldersHistory()170   void FoldersHistory() { GetFocusedPanel().FoldersHistory(); }
RefreshView()171   void RefreshView() { GetFocusedPanel().OnReload(); }
RefreshAllPanels()172   void RefreshAllPanels()
173   {
174     for (unsigned i = 0; i < NumPanels; i++)
175     {
176       unsigned index = i;
177       if (NumPanels == 1)
178         index = LastFocusedPanel;
179       Panels[index].OnReload();
180     }
181   }
182 
183   /*
184   void SysIconsWereChanged()
185   {
186     for (unsigned i = 0; i < NumPanels; i++)
187     {
188       unsigned index = i;
189       if (NumPanels == 1)
190         index = LastFocusedPanel;
191       Panels[index].SysIconsWereChanged();
192     }
193   }
194   */
195 
196   void SetListSettings();
197   HRESULT SwitchOnOffOnePanel();
198 
199   CIntVector _timestampLevels;
200 
GetFlatMode()201   bool GetFlatMode() { return Panels[LastFocusedPanel].GetFlatMode(); }
202 
GetTimestampLevel()203   int GetTimestampLevel() const { return Panels[LastFocusedPanel]._timestampLevel; }
SetTimestampLevel(int level)204   void SetTimestampLevel(int level)
205   {
206     for (unsigned i = 0; i < kNumPanelsMax; i++)
207     {
208       CPanel &panel = Panels[i];
209       panel._timestampLevel = level;
210     }
211     RedrawListItems_InPanels();
212   }
213 
RedrawListItems_InPanels()214   void RedrawListItems_InPanels()
215   {
216     for (unsigned i = 0; i < kNumPanelsMax; i++)
217     {
218       CPanel &panel = Panels[i];
219       if (panel.PanelCreated)
220         panel.RedrawListItems();
221     }
222   }
223 
224   // bool Get_ShowNtfsStrems_Mode() { return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode(); }
225 
ChangeFlatMode()226   void ChangeFlatMode() { Panels[LastFocusedPanel].ChangeFlatMode(); }
227   // void Change_ShowNtfsStrems_Mode() { Panels[LastFocusedPanel].Change_ShowNtfsStrems_Mode(); }
228   // void Change_ShowDeleted() { ShowDeletedFiles = !ShowDeletedFiles; }
229 
Get_AutoRefresh_Mode()230   bool Get_AutoRefresh_Mode()
231   {
232     // return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode();
233     return AutoRefresh_Mode;
234   }
Change_AutoRefresh_Mode()235   void Change_AutoRefresh_Mode()
236   {
237     AutoRefresh_Mode = !AutoRefresh_Mode;
238     SetPanels_AutoRefresh_Mode();
239   }
SetPanels_AutoRefresh_Mode()240   void SetPanels_AutoRefresh_Mode()
241   {
242     for (unsigned i = 0; i < kNumPanelsMax; i++)
243       Panels[i].Set_AutoRefresh_Mode(AutoRefresh_Mode);
244   }
245 
OpenBookmark(unsigned index)246   void OpenBookmark(unsigned index) { GetFocusedPanel().OpenBookmark(index); }
SetBookmark(unsigned index)247   void SetBookmark(unsigned index) { GetFocusedPanel().SetBookmark(index); }
248 
249   void ReloadToolbars();
ReadToolbar()250   void ReadToolbar()
251   {
252     const UInt32 mask = ReadToolbarsMask();
253     if (mask & ((UInt32)1 << 31))
254     {
255       ShowButtonsLables = !g_IsSmallScreen;
256       LargeButtons = false;
257       ShowStandardToolbar = ShowArchiveToolbar = true;
258     }
259     else
260     {
261       ShowButtonsLables = ((mask & 1) != 0);
262       LargeButtons = ((mask & 2) != 0);
263       ShowStandardToolbar = ((mask & 4) != 0);
264       ShowArchiveToolbar  = ((mask & 8) != 0);
265     }
266   }
SaveToolbar()267   void SaveToolbar()
268   {
269     UInt32 mask = 0;
270     if (ShowButtonsLables) mask |= 1;
271     if (LargeButtons) mask |= 2;
272     if (ShowStandardToolbar) mask |= 4;
273     if (ShowArchiveToolbar) mask |= 8;
274     SaveToolbarsMask(mask);
275   }
276 
277   void SaveToolbarChanges();
278 
SwitchStandardToolbar()279   void SwitchStandardToolbar()
280   {
281     ShowStandardToolbar = !ShowStandardToolbar;
282     SaveToolbarChanges();
283   }
SwitchArchiveToolbar()284   void SwitchArchiveToolbar()
285   {
286     ShowArchiveToolbar = !ShowArchiveToolbar;
287     SaveToolbarChanges();
288   }
SwitchButtonsLables()289   void SwitchButtonsLables()
290   {
291     ShowButtonsLables = !ShowButtonsLables;
292     SaveToolbarChanges();
293   }
SwitchLargeButtons()294   void SwitchLargeButtons()
295   {
296     LargeButtons = !LargeButtons;
297     SaveToolbarChanges();
298   }
299 
AddToArchive()300   void AddToArchive() { GetFocusedPanel().AddToArchive(); }
ExtractArchives()301   void ExtractArchives() { GetFocusedPanel().ExtractArchives(); }
TestArchives()302   void TestArchives() { GetFocusedPanel().TestArchives(); }
303 
304   void OnNotify(int ctrlID, LPNMHDR pnmh);
305 
306   UString PrevTitle;
307   void RefreshTitle(bool always = false);
RefreshTitleAlways()308   void RefreshTitleAlways() { RefreshTitle(true); }
309   void RefreshTitlePanel(unsigned panelIndex, bool always = false);
310 
311   void MoveSubWindows();
312 };
313 
314 #endif
315