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