1 // App.h 2 3 #ifndef __APP_H 4 #define __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 const int kMenuCmdID_Plugin_Start = 1000; // must be large them context menu IDs 22 const int kMenuCmdID_Toolbar_Start = 1500; 23 24 enum 25 { 26 kMenuCmdID_Toolbar_Add = kMenuCmdID_Toolbar_Start, 27 kMenuCmdID_Toolbar_Extract, 28 kMenuCmdID_Toolbar_Test, 29 kMenuCmdID_Toolbar_End 30 }; 31 32 class CPanelCallbackImp: public CPanelCallback 33 { 34 CApp *_app; 35 unsigned _index; 36 public: Init(CApp * app,unsigned index)37 void Init(CApp *app, unsigned index) 38 { 39 _app = app; 40 _index = index; 41 } 42 virtual void OnTab(); 43 virtual void SetFocusToPath(unsigned index); 44 virtual void OnCopy(bool move, bool copyToSame); 45 virtual void OnSetSameFolder(); 46 virtual void OnSetSubFolder(); 47 virtual void PanelWasFocused(); 48 virtual void DragBegin(); 49 virtual void DragEnd(); 50 virtual void RefreshTitle(bool always); 51 }; 52 53 class CApp; 54 55 class CDropTarget: 56 public IDropTarget, 57 public CMyUnknownImp 58 { 59 CMyComPtr<IDataObject> m_DataObject; 60 UStringVector m_SourcePaths; 61 int m_SelectionIndex; 62 bool m_DropIsAllowed; // = true, if data contain fillist 63 bool m_PanelDropIsAllowed; // = false, if current target_panel is source_panel. 64 // check it only if m_DropIsAllowed == true 65 int m_SubFolderIndex; 66 UString m_SubFolderName; 67 68 CPanel *m_Panel; 69 bool m_IsAppTarget; // true, if we want to drop to app window (not to panel). 70 71 bool m_SetPathIsOK; 72 73 bool IsItSameDrive() const; 74 75 void QueryGetData(IDataObject *dataObject); 76 bool IsFsFolderPath() const; 77 DWORD GetEffect(DWORD keyState, POINTL pt, DWORD allowedEffect); 78 void RemoveSelection(); 79 void PositionCursor(POINTL ptl); 80 UString GetTargetPath() const; 81 bool SetPath(bool enablePath) const; 82 bool SetPath(); 83 84 public: 85 MY_UNKNOWN_IMP1_MT(IDropTarget) 86 STDMETHOD(DragEnter)(IDataObject * dataObject, DWORD keyState, POINTL pt, DWORD *effect); 87 STDMETHOD(DragOver)(DWORD keyState, POINTL pt, DWORD * effect); 88 STDMETHOD(DragLeave)(); 89 STDMETHOD(Drop)(IDataObject * dataObject, DWORD keyState, POINTL pt, DWORD *effect); 90 CDropTarget()91 CDropTarget(): 92 TargetPanelIndex(-1), 93 SrcPanelIndex(-1), 94 m_IsAppTarget(false), 95 m_Panel(0), 96 App(0), 97 m_PanelDropIsAllowed(false), 98 m_DropIsAllowed(false), 99 m_SelectionIndex(-1), 100 m_SubFolderIndex(-1), 101 m_SetPathIsOK(false) {} 102 103 CApp *App; 104 int SrcPanelIndex; // index of D&D source_panel 105 int TargetPanelIndex; // what panel to use as target_panel of Application 106 }; 107 108 class CApp 109 { 110 public: 111 NWindows::CWindow _window; 112 bool ShowSystemMenu; 113 // bool ShowDeletedFiles; 114 unsigned NumPanels; 115 unsigned LastFocusedPanel; 116 117 bool ShowStandardToolbar; 118 bool ShowArchiveToolbar; 119 bool ShowButtonsLables; 120 bool LargeButtons; 121 122 CAppState AppState; 123 CPanelCallbackImp m_PanelCallbackImp[kNumPanelsMax]; 124 CPanel Panels[kNumPanelsMax]; 125 126 NWindows::NControl::CImageList _buttonsImageList; 127 128 #ifdef UNDER_CE 129 NWindows::NControl::CCommandBar _commandBar; 130 #endif 131 NWindows::NControl::CToolBar _toolBar; 132 133 CDropTarget *_dropTargetSpec; 134 CMyComPtr<IDropTarget> _dropTarget; 135 136 UString LangString_N_SELECTED_ITEMS; 137 138 void ReloadLang(); 139 CApp()140 CApp(): _window(0), NumPanels(2), LastFocusedPanel(0), 141 AutoRefresh_Mode(true) 142 { 143 SetPanels_AutoRefresh_Mode(); 144 } 145 CreateDragTarget()146 void CreateDragTarget() 147 { 148 _dropTargetSpec = new CDropTarget(); 149 _dropTarget = _dropTargetSpec; 150 _dropTargetSpec->App = (this); 151 } 152 SetFocusedPanel(unsigned index)153 void SetFocusedPanel(unsigned index) 154 { 155 LastFocusedPanel = index; 156 _dropTargetSpec->TargetPanelIndex = LastFocusedPanel; 157 } 158 DragBegin(unsigned panelIndex)159 void DragBegin(unsigned panelIndex) 160 { 161 _dropTargetSpec->TargetPanelIndex = (NumPanels > 1) ? 1 - panelIndex : panelIndex; 162 _dropTargetSpec->SrcPanelIndex = panelIndex; 163 } 164 DragEnd()165 void DragEnd() 166 { 167 _dropTargetSpec->TargetPanelIndex = LastFocusedPanel; 168 _dropTargetSpec->SrcPanelIndex = -1; 169 } 170 171 172 void OnCopy(bool move, bool copyToSame, int srcPanelIndex); 173 void OnSetSameFolder(int srcPanelIndex); 174 void OnSetSubFolder(int srcPanelIndex); 175 176 HRESULT CreateOnePanel(int panelIndex, const UString &mainPath, const UString &arcFormat, bool needOpenArc, bool &archiveIsOpened, bool &encrypted); 177 HRESULT Create(HWND hwnd, const UString &mainPath, const UString &arcFormat, int xSizes[2], bool needOpenArc, bool &archiveIsOpened, bool &encrypted); 178 void Read(); 179 void Save(); 180 void Release(); 181 182 // void SetFocus(int panelIndex) { Panels[panelIndex].SetFocusToList(); } SetFocusToLastItem()183 void SetFocusToLastItem() { Panels[LastFocusedPanel].SetFocusToLastRememberedItem(); } GetFocusedPanelIndex()184 unsigned GetFocusedPanelIndex() const { return LastFocusedPanel; } IsPanelVisible(unsigned index)185 bool IsPanelVisible(unsigned index) const { return (NumPanels > 1 || index == LastFocusedPanel); } GetFocusedPanel()186 CPanel &GetFocusedPanel() { return Panels[GetFocusedPanelIndex()]; } 187 188 // File Menu OpenItem()189 void OpenItem() { GetFocusedPanel().OpenSelectedItems(true); } OpenItemInside(const wchar_t * type)190 void OpenItemInside(const wchar_t *type) { GetFocusedPanel().OpenFocusedItemAsInternal(type); } OpenItemOutside()191 void OpenItemOutside() { GetFocusedPanel().OpenSelectedItems(false); } EditItem(bool useEditor)192 void EditItem(bool useEditor) { GetFocusedPanel().EditItem(useEditor); } Rename()193 void Rename() { GetFocusedPanel().RenameFile(); } CopyTo()194 void CopyTo() { OnCopy(false, false, GetFocusedPanelIndex()); } MoveTo()195 void MoveTo() { OnCopy(true, false, GetFocusedPanelIndex()); } Delete(bool toRecycleBin)196 void Delete(bool toRecycleBin) { GetFocusedPanel().DeleteItems(toRecycleBin); } 197 HRESULT CalculateCrc2(const UString &methodName); 198 void CalculateCrc(const char *methodName); 199 void DiffFiles(); 200 void Split(); 201 void Combine(); Properties()202 void Properties() { GetFocusedPanel().Properties(); } Comment()203 void Comment() { GetFocusedPanel().ChangeComment(); } 204 205 #ifndef UNDER_CE 206 void Link(); OpenAltStreams()207 void OpenAltStreams() { GetFocusedPanel().OpenAltStreams(); } 208 #endif 209 CreateFolder()210 void CreateFolder() { GetFocusedPanel().CreateFolder(); } CreateFile()211 void CreateFile() { GetFocusedPanel().CreateFile(); } 212 213 // Edit EditCut()214 void EditCut() { GetFocusedPanel().EditCut(); } EditCopy()215 void EditCopy() { GetFocusedPanel().EditCopy(); } EditPaste()216 void EditPaste() { GetFocusedPanel().EditPaste(); } 217 SelectAll(bool selectMode)218 void SelectAll(bool selectMode) { GetFocusedPanel().SelectAll(selectMode); } InvertSelection()219 void InvertSelection() { GetFocusedPanel().InvertSelection(); } SelectSpec(bool selectMode)220 void SelectSpec(bool selectMode) { GetFocusedPanel().SelectSpec(selectMode); } SelectByType(bool selectMode)221 void SelectByType(bool selectMode) { GetFocusedPanel().SelectByType(selectMode); } 222 Refresh_StatusBar()223 void Refresh_StatusBar() { GetFocusedPanel().Refresh_StatusBar(); } 224 SetListViewMode(UInt32 index)225 void SetListViewMode(UInt32 index) { GetFocusedPanel().SetListViewMode(index); } GetListViewMode()226 UInt32 GetListViewMode() { return GetFocusedPanel().GetListViewMode(); } GetSortID()227 PROPID GetSortID() { return GetFocusedPanel().GetSortID(); } 228 SortItemsWithPropID(PROPID propID)229 void SortItemsWithPropID(PROPID propID) { GetFocusedPanel().SortItemsWithPropID(propID); } 230 OpenRootFolder()231 void OpenRootFolder() { GetFocusedPanel().OpenDrivesFolder(); } OpenParentFolder()232 void OpenParentFolder() { GetFocusedPanel().OpenParentFolder(); } FoldersHistory()233 void FoldersHistory() { GetFocusedPanel().FoldersHistory(); } RefreshView()234 void RefreshView() { GetFocusedPanel().OnReload(); } RefreshAllPanels()235 void RefreshAllPanels() 236 { 237 for (unsigned i = 0; i < NumPanels; i++) 238 { 239 unsigned index = i; 240 if (NumPanels == 1) 241 index = LastFocusedPanel; 242 Panels[index].OnReload(); 243 } 244 } 245 246 /* 247 void SysIconsWereChanged() 248 { 249 for (unsigned i = 0; i < NumPanels; i++) 250 { 251 unsigned index = i; 252 if (NumPanels == 1) 253 index = LastFocusedPanel; 254 Panels[index].SysIconsWereChanged(); 255 } 256 } 257 */ 258 259 void SetListSettings(); 260 HRESULT SwitchOnOffOnePanel(); 261 262 CIntVector _timestampLevels; 263 GetFlatMode()264 bool GetFlatMode() { return Panels[LastFocusedPanel].GetFlatMode(); } 265 GetTimestampLevel()266 int GetTimestampLevel() const { return Panels[LastFocusedPanel]._timestampLevel; } SetTimestampLevel(int level)267 void SetTimestampLevel(int level) 268 { 269 unsigned i; 270 for (i = 0; i < kNumPanelsMax; i++) 271 { 272 CPanel &panel = Panels[i]; 273 panel._timestampLevel = level; 274 if (panel.PanelCreated) 275 panel.RedrawListItems(); 276 } 277 } 278 279 // bool Get_ShowNtfsStrems_Mode() { return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode(); } 280 ChangeFlatMode()281 void ChangeFlatMode() { Panels[LastFocusedPanel].ChangeFlatMode(); } 282 // void Change_ShowNtfsStrems_Mode() { Panels[LastFocusedPanel].Change_ShowNtfsStrems_Mode(); } 283 // void Change_ShowDeleted() { ShowDeletedFiles = !ShowDeletedFiles; } 284 285 bool AutoRefresh_Mode; Get_AutoRefresh_Mode()286 bool Get_AutoRefresh_Mode() 287 { 288 // return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode(); 289 return AutoRefresh_Mode; 290 } Change_AutoRefresh_Mode()291 void Change_AutoRefresh_Mode() 292 { 293 AutoRefresh_Mode = !AutoRefresh_Mode; 294 SetPanels_AutoRefresh_Mode(); 295 } SetPanels_AutoRefresh_Mode()296 void SetPanels_AutoRefresh_Mode() 297 { 298 for (unsigned i = 0; i < kNumPanelsMax; i++) 299 Panels[i].Set_AutoRefresh_Mode(AutoRefresh_Mode); 300 } 301 OpenBookmark(int index)302 void OpenBookmark(int index) { GetFocusedPanel().OpenBookmark(index); } SetBookmark(int index)303 void SetBookmark(int index) { GetFocusedPanel().SetBookmark(index); } 304 305 void ReloadToolbars(); ReadToolbar()306 void ReadToolbar() 307 { 308 UInt32 mask = ReadToolbarsMask(); 309 if (mask & ((UInt32)1 << 31)) 310 { 311 ShowButtonsLables = !g_IsSmallScreen; 312 LargeButtons = false; 313 ShowStandardToolbar = ShowArchiveToolbar = true; 314 } 315 else 316 { 317 ShowButtonsLables = ((mask & 1) != 0); 318 LargeButtons = ((mask & 2) != 0); 319 ShowStandardToolbar = ((mask & 4) != 0); 320 ShowArchiveToolbar = ((mask & 8) != 0); 321 } 322 } SaveToolbar()323 void SaveToolbar() 324 { 325 UInt32 mask = 0; 326 if (ShowButtonsLables) mask |= 1; 327 if (LargeButtons) mask |= 2; 328 if (ShowStandardToolbar) mask |= 4; 329 if (ShowArchiveToolbar) mask |= 8; 330 SaveToolbarsMask(mask); 331 } 332 333 void SaveToolbarChanges(); 334 SwitchStandardToolbar()335 void SwitchStandardToolbar() 336 { 337 ShowStandardToolbar = !ShowStandardToolbar; 338 SaveToolbarChanges(); 339 } SwitchArchiveToolbar()340 void SwitchArchiveToolbar() 341 { 342 ShowArchiveToolbar = !ShowArchiveToolbar; 343 SaveToolbarChanges(); 344 } SwitchButtonsLables()345 void SwitchButtonsLables() 346 { 347 ShowButtonsLables = !ShowButtonsLables; 348 SaveToolbarChanges(); 349 } SwitchLargeButtons()350 void SwitchLargeButtons() 351 { 352 LargeButtons = !LargeButtons; 353 SaveToolbarChanges(); 354 } 355 AddToArchive()356 void AddToArchive() { GetFocusedPanel().AddToArchive(); } ExtractArchives()357 void ExtractArchives() { GetFocusedPanel().ExtractArchives(); } TestArchives()358 void TestArchives() { GetFocusedPanel().TestArchives(); } 359 360 void OnNotify(int ctrlID, LPNMHDR pnmh); 361 362 UString PrevTitle; 363 void RefreshTitle(bool always = false); RefreshTitleAlways()364 void RefreshTitleAlways() { RefreshTitle(true); } 365 void RefreshTitlePanel(unsigned panelIndex, bool always = false); 366 367 void MoveSubWindows(); 368 }; 369 370 #endif 371