blob: fc54501c61d265697e64e3c6b3f8643c18ac87ec [file] [log] [blame]
// App.h
#ifndef ZIP7_INC_APP_H
#define ZIP7_INC_APP_H
#include "../../../Windows/Control/CommandBar.h"
#include "../../../Windows/Control/ImageList.h"
#include "AppState.h"
#include "Panel.h"
class CApp;
extern CApp g_App;
extern HWND g_HWND;
const unsigned kNumPanelsMax = 2;
extern bool g_IsSmallScreen;
// must be larger than context menu IDs
const int kMenuCmdID_Toolbar_Start = 1070;
const int kMenuCmdID_Plugin_Start = 1100;
enum
{
kMenuCmdID_Toolbar_Add = kMenuCmdID_Toolbar_Start,
kMenuCmdID_Toolbar_Extract,
kMenuCmdID_Toolbar_Test,
kMenuCmdID_Toolbar_End
};
class CPanelCallbackImp Z7_final: public CPanelCallback
{
CApp *_app;
unsigned _index;
public:
void Init(CApp *app, unsigned index)
{
_app = app;
_index = index;
}
virtual void OnTab() Z7_override;
virtual void SetFocusToPath(unsigned index) Z7_override;
virtual void OnCopy(bool move, bool copyToSame) Z7_override;
virtual void OnSetSameFolder() Z7_override;
virtual void OnSetSubFolder() Z7_override;
virtual void PanelWasFocused() Z7_override;
virtual void DragBegin() Z7_override;
virtual void DragEnd() Z7_override;
virtual void RefreshTitle(bool always) Z7_override;
};
class CDropTarget;
class CApp
{
public:
NWindows::CWindow _window;
bool ShowSystemMenu;
bool AutoRefresh_Mode;
// bool ShowDeletedFiles;
unsigned NumPanels;
unsigned LastFocusedPanel;
bool ShowStandardToolbar;
bool ShowArchiveToolbar;
bool ShowButtonsLables;
bool LargeButtons;
CAppState AppState;
CPanelCallbackImp m_PanelCallbackImp[kNumPanelsMax];
CPanel Panels[kNumPanelsMax];
NWindows::NControl::CImageList _buttonsImageList;
#ifdef UNDER_CE
NWindows::NControl::CCommandBar _commandBar;
#endif
NWindows::NControl::CToolBar _toolBar;
CDropTarget *_dropTargetSpec;
CMyComPtr<IDropTarget> _dropTarget;
UString LangString_N_SELECTED_ITEMS;
void ReloadLangItems();
CApp():
_window(NULL),
AutoRefresh_Mode(true),
NumPanels(2),
LastFocusedPanel(0)
{
SetPanels_AutoRefresh_Mode();
}
void CreateDragTarget();
void SetFocusedPanel(unsigned index);
void DragBegin(unsigned panelIndex);
void DragEnd();
void OnCopy(bool move, bool copyToSame, unsigned srcPanelIndex);
void OnSetSameFolder(unsigned srcPanelIndex);
void OnSetSubFolder(unsigned srcPanelIndex);
HRESULT CreateOnePanel(unsigned panelIndex, const UString &mainPath, const UString &arcFormat, bool needOpenArc, COpenResult &openRes);
HRESULT Create(HWND hwnd, const UString &mainPath, const UString &arcFormat, int xSizes[2], bool needOpenArc, COpenResult &openRes);
void Read();
void Save();
void Release();
// void SetFocus(int panelIndex) { Panels[panelIndex].SetFocusToList(); }
void SetFocusToLastItem() { Panels[LastFocusedPanel].SetFocusToLastRememberedItem(); }
unsigned GetFocusedPanelIndex() const { return LastFocusedPanel; }
bool IsPanelVisible(unsigned index) const { return (NumPanels > 1 || index == LastFocusedPanel); }
CPanel &GetFocusedPanel() { return Panels[GetFocusedPanelIndex()]; }
// File Menu
void OpenItem() { GetFocusedPanel().OpenSelectedItems(true); }
void OpenItemInside(const wchar_t *type) { GetFocusedPanel().OpenFocusedItemAsInternal(type); }
void OpenItemOutside() { GetFocusedPanel().OpenSelectedItems(false); }
void EditItem(bool useEditor) { GetFocusedPanel().EditItem(useEditor); }
void Rename() { GetFocusedPanel().RenameFile(); }
void CopyTo() { OnCopy(false, false, GetFocusedPanelIndex()); }
void MoveTo() { OnCopy(true, false, GetFocusedPanelIndex()); }
void Delete(bool toRecycleBin) { GetFocusedPanel().DeleteItems(toRecycleBin); }
HRESULT CalculateCrc2(const UString &methodName);
void CalculateCrc(const char *methodName);
void DiffFiles(const UString &path1, const UString &path2);
void DiffFiles();
void VerCtrl(unsigned id);
void Split();
void Combine();
void Properties() { GetFocusedPanel().Properties(); }
void Comment() { GetFocusedPanel().ChangeComment(); }
#ifndef UNDER_CE
void Link();
void OpenAltStreams() { GetFocusedPanel().OpenAltStreams(); }
#endif
void CreateFolder() { GetFocusedPanel().CreateFolder(); }
void CreateFile() { GetFocusedPanel().CreateFile(); }
// Edit
void EditCut() { GetFocusedPanel().EditCut(); }
void EditCopy() { GetFocusedPanel().EditCopy(); }
void EditPaste() { GetFocusedPanel().EditPaste(); }
void SelectAll(bool selectMode) { GetFocusedPanel().SelectAll(selectMode); }
void InvertSelection() { GetFocusedPanel().InvertSelection(); }
void SelectSpec(bool selectMode) { GetFocusedPanel().SelectSpec(selectMode); }
void SelectByType(bool selectMode) { GetFocusedPanel().SelectByType(selectMode); }
void Refresh_StatusBar() { GetFocusedPanel().Refresh_StatusBar(); }
void SetListViewMode(UInt32 index) { GetFocusedPanel().SetListViewMode(index); }
UInt32 GetListViewMode() { return GetFocusedPanel().GetListViewMode(); }
PROPID GetSortID() { return GetFocusedPanel().GetSortID(); }
void SortItemsWithPropID(PROPID propID) { GetFocusedPanel().SortItemsWithPropID(propID); }
void OpenRootFolder() { GetFocusedPanel().OpenDrivesFolder(); }
void OpenParentFolder() { GetFocusedPanel().OpenParentFolder(); }
void FoldersHistory() { GetFocusedPanel().FoldersHistory(); }
void RefreshView() { GetFocusedPanel().OnReload(); }
void RefreshAllPanels()
{
for (unsigned i = 0; i < NumPanels; i++)
{
unsigned index = i;
if (NumPanels == 1)
index = LastFocusedPanel;
Panels[index].OnReload();
}
}
/*
void SysIconsWereChanged()
{
for (unsigned i = 0; i < NumPanels; i++)
{
unsigned index = i;
if (NumPanels == 1)
index = LastFocusedPanel;
Panels[index].SysIconsWereChanged();
}
}
*/
void SetListSettings();
HRESULT SwitchOnOffOnePanel();
CIntVector _timestampLevels;
bool GetFlatMode() { return Panels[LastFocusedPanel].GetFlatMode(); }
int GetTimestampLevel() const { return Panels[LastFocusedPanel]._timestampLevel; }
void SetTimestampLevel(int level)
{
unsigned i;
for (i = 0; i < kNumPanelsMax; i++)
{
CPanel &panel = Panels[i];
panel._timestampLevel = level;
if (panel.PanelCreated)
panel.RedrawListItems();
}
}
// bool Get_ShowNtfsStrems_Mode() { return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode(); }
void ChangeFlatMode() { Panels[LastFocusedPanel].ChangeFlatMode(); }
// void Change_ShowNtfsStrems_Mode() { Panels[LastFocusedPanel].Change_ShowNtfsStrems_Mode(); }
// void Change_ShowDeleted() { ShowDeletedFiles = !ShowDeletedFiles; }
bool Get_AutoRefresh_Mode()
{
// return Panels[LastFocusedPanel].Get_ShowNtfsStrems_Mode();
return AutoRefresh_Mode;
}
void Change_AutoRefresh_Mode()
{
AutoRefresh_Mode = !AutoRefresh_Mode;
SetPanels_AutoRefresh_Mode();
}
void SetPanels_AutoRefresh_Mode()
{
for (unsigned i = 0; i < kNumPanelsMax; i++)
Panels[i].Set_AutoRefresh_Mode(AutoRefresh_Mode);
}
void OpenBookmark(unsigned index) { GetFocusedPanel().OpenBookmark(index); }
void SetBookmark(unsigned index) { GetFocusedPanel().SetBookmark(index); }
void ReloadToolbars();
void ReadToolbar()
{
const UInt32 mask = ReadToolbarsMask();
if (mask & ((UInt32)1 << 31))
{
ShowButtonsLables = !g_IsSmallScreen;
LargeButtons = false;
ShowStandardToolbar = ShowArchiveToolbar = true;
}
else
{
ShowButtonsLables = ((mask & 1) != 0);
LargeButtons = ((mask & 2) != 0);
ShowStandardToolbar = ((mask & 4) != 0);
ShowArchiveToolbar = ((mask & 8) != 0);
}
}
void SaveToolbar()
{
UInt32 mask = 0;
if (ShowButtonsLables) mask |= 1;
if (LargeButtons) mask |= 2;
if (ShowStandardToolbar) mask |= 4;
if (ShowArchiveToolbar) mask |= 8;
SaveToolbarsMask(mask);
}
void SaveToolbarChanges();
void SwitchStandardToolbar()
{
ShowStandardToolbar = !ShowStandardToolbar;
SaveToolbarChanges();
}
void SwitchArchiveToolbar()
{
ShowArchiveToolbar = !ShowArchiveToolbar;
SaveToolbarChanges();
}
void SwitchButtonsLables()
{
ShowButtonsLables = !ShowButtonsLables;
SaveToolbarChanges();
}
void SwitchLargeButtons()
{
LargeButtons = !LargeButtons;
SaveToolbarChanges();
}
void AddToArchive() { GetFocusedPanel().AddToArchive(); }
void ExtractArchives() { GetFocusedPanel().ExtractArchives(); }
void TestArchives() { GetFocusedPanel().TestArchives(); }
void OnNotify(int ctrlID, LPNMHDR pnmh);
UString PrevTitle;
void RefreshTitle(bool always = false);
void RefreshTitleAlways() { RefreshTitle(true); }
void RefreshTitlePanel(unsigned panelIndex, bool always = false);
void MoveSubWindows();
};
#endif