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