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