forked from coddec/Classic-Shell
- Notifications
You must be signed in to change notification settings - Fork 452
/
Copy pathExplorerBand.h
246 lines (207 loc) · 7.35 KB
/
ExplorerBand.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
// Classic Shell (c) 2009-2017, Ivo Beltchev
// Open-Shell (c) 2017-2018, The Open-Shell Team
// Confidential information of Ivo Beltchev. Not for disclosure or distribution without prior written consent from the author
// ExplorerBand.h : Declaration of the CExplorerBand
#pragma once
#include"resource.h"
#include"ClassicExplorer_h.h"
#include"SettingsParser.h"
#include<vector>
classCBandWindow: publicCWindowImpl<CBandWindow>
{
public:
enum
{
ID_LAST=-1,
ID_SEPARATOR=0,
// standard toolbar commands
ID_SETTINGS=1,
ID_GOUP,
ID_CUT,
ID_COPY,
ID_PASTE,
ID_PASTE_SHORTCUT,
ID_DELETE,
ID_PROPERTIES,
ID_EMAIL,
ID_MOVETO,
ID_COPYTO,
ID_UNDO,
ID_REDO,
ID_SELECTALL,
ID_DESELECT,
ID_INVERT,
ID_GOBACK,
ID_GOFORWARD,
ID_REFRESH,
ID_STOP,
ID_RENAME,
ID_NEWFOLDER,
ID_ZIPFOLDER,
ID_NAVPANE,
ID_DETAILSPANE,
ID_PREVIEWPANE,
ID_MAP_DRIVE,
ID_DISCONNECT,
ID_CUSTOMIZEFOLDER,
ID_FOLDEROPTIONS,
ID_VIEW_TILES,
ID_VIEW_DETAILS,
ID_VIEW_LIST,
ID_VIEW_CONTENT,
ID_VIEW_ICONS1,
ID_VIEW_ICONS2,
ID_VIEW_ICONS3,
ID_VIEW_ICONS4,
ID_SHOW_EXTENSIONS,
ID_HIDDEN_FILES,
ID_SYSTEM_FILES,
ID_CUSTOM=100,
};
DECLARE_WND_CLASS(L"OpenShell.CBandWindow")
enum {
BWM_UPDATEBUTTONS=WM_USER,
BWM_UPDATETOOLBAR,
};
BEGIN_MSG_MAP( CBandWindow )
MESSAGE_HANDLER( WM_CREATE, OnCreate )
MESSAGE_HANDLER( WM_DESTROY, OnDestroy )
MESSAGE_HANDLER( WM_CLEAR, OnUpdateUI )
MESSAGE_HANDLER( WM_COMMAND, OnCommand )
MESSAGE_HANDLER( BWM_UPDATEBUTTONS, OnUpdateButtons )
MESSAGE_HANDLER( BWM_UPDATETOOLBAR, OnUpdateToolbar )
NOTIFY_CODE_HANDLER( NM_RCLICK, OnRClick )
NOTIFY_CODE_HANDLER( TBN_GETINFOTIP, OnGetInfoTip )
NOTIFY_CODE_HANDLER( TBN_DROPDOWN, OnDropDown )
NOTIFY_CODE_HANDLER( RBN_CHEVRONPUSHED, OnChevron )
END_MSG_MAP()
CBandWindow( void ) { m_ImgEnabled=m_ImgDisabled=NULL; m_MenuIconSize=0; }
HWND GetToolbar( void ) { return m_Toolbar.m_hWnd; }
voidSetBrowsers( IShellBrowser *pBrowser, IWebBrowser2 *pWebBrowser );
voidClear( void );
voidUpdateToolbar( void );
voidEnableButton( int cmd, bool bEnable );
voidCheckButton( int cmd, bool bCheck );
boolHasPanes( void ) const;
boolHasFolderSettings( void ) const;
protected:
// Handler prototypes:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnCreate( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnDestroy( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnUpdateUI( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnCommand( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnUpdateButtons( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnUpdateToolbar( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled );
LRESULT OnRClick( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnGetInfoTip( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnDropDown( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
LRESULT OnChevron( int idCtrl, LPNMHDR pnmh, BOOL& bHandled );
private:
CWindow m_Toolbar;
CWindow m_TreeParent;
CComPtr<IShellBrowser> m_pBrowser;
CComPtr<IWebBrowser2> m_pWebBrowser;
CComPtr<IPropertyBag> m_pBrowserBag;
HIMAGELIST m_ImgEnabled;
HIMAGELIST m_ImgDisabled;
int m_MenuIconSize;
structStdToolbarItem
{
int id;
constwchar_t *command;
constwchar_t *link;
constwchar_t *label; // text on the button
constwchar_t *tip; // default tooltip
constwchar_t *iconPath;
constwchar_t *iconPathD;
CString regName; // name of the registry value to check for enabled/checked state
CString labelString, tipString; // additional storage for the strings
const StdToolbarItem *submenu;
mutable HBITMAP menuIcon;
mutable HBITMAP menuIconD;
mutable CString menuText;
mutablebool bIconLoaded; // the menu icon is loaded
bool bDisabled;
bool bChecked;
};
std::vector<StdToolbarItem> m_Items;
std::vector<TBBUTTON> m_Buttons;
CSettingsParser m_Parser;
voidParseToolbar( void );
voidParseToolbarItem( constwchar_t *name, StdToolbarItem &item );
voidSendShellTabCommand( int command );
HMENU CreateDropMenu( const StdToolbarItem *pItem );
HMENU CreateDropMenuRec( const StdToolbarItem *pItem, std::vector<HMODULE> &modules, HMODULE hShell32 );
voidSendEmail( void );
voidSendToZip( void );
voidNewFolder( void );
voidExecuteCommandFile( constwchar_t *pText );
voidExecuteCustomCommand( constwchar_t *pCommand );
voidViewByProperty( IFolderView2 *pView, constwchar_t *pProperty, bool bGroup );
voidUpdateBag( void );
voidUpdateFolderSettings( void );
static LRESULT CALLBACK ToolbarSubclassProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData );
static HRESULT __stdcall BagWriteHook( IPropertyBag *pThis, LPCOLESTR pszPropName, VARIANT *pVar );
};
// CExplorerBand
classATL_NO_VTABLE CExplorerBand :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CExplorerBand,&CLSID_ExplorerBand>,
public IObjectWithSiteImpl<CExplorerBand>,
public IDeskBand,
public IDispEventImpl<1,CExplorerBand,&DIID_DWebBrowserEvents2,&LIBID_SHDocVw,1,1>
{
public:
CExplorerBand( void );
DECLARE_REGISTRY_RESOURCEID_V2_WITHOUT_MODULE(IDR_EXPLORERBAND, CExplorerBand)
BEGIN_SINK_MAP( CExplorerBand )
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_NAVIGATECOMPLETE2, OnNavigateComplete)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_COMMANDSTATECHANGE, OnCommandStateChange)
SINK_ENTRY_EX(1, DIID_DWebBrowserEvents2, DISPID_ONQUIT, OnQuit)
END_SINK_MAP()
BEGIN_COM_MAP(CExplorerBand)
COM_INTERFACE_ENTRY( IOleWindow )
COM_INTERFACE_ENTRY( IObjectWithSite )
COM_INTERFACE_ENTRY_IID( IID_IDockingWindow, IDockingWindow )
COM_INTERFACE_ENTRY_IID( IID_IDeskBand, IDeskBand )
END_COM_MAP()
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct()
{
return S_OK;
}
voidFinalRelease()
{
}
public:
// IDeskBand
STDMETHOD(GetBandInfo)( DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO* pdbi );
// IObjectWithSite
STDMETHOD(SetSite)( IUnknown* pUnkSite );
// IOleWindow
STDMETHOD(GetWindow)( HWND* phwnd );
STDMETHOD(ContextSensitiveHelp)( BOOL fEnterMode );
// IDockingWindow
STDMETHOD(CloseDW)( unsignedlong dwReserved );
STDMETHOD(ResizeBorderDW)( const RECT* prcBorder, IUnknown* punkToolbarSite, BOOL fReserved );
STDMETHOD(ShowDW)( BOOL fShow );
// DWebBrowserEvents2
STDMETHOD(OnNavigateComplete)( IDispatch *pDisp, VARIANT *URL );
STDMETHOD(OnCommandStateChange)( long Command, VARIANT_BOOL Enable );
STDMETHOD(OnQuit)( void );
protected:
bool m_bSubclassRebar; // the rebar needs subclassing
bool m_bSubclassedRebar; // the rebar is subclassed
bool m_bBandNewLine; // our band is on a new line (has RBBS_BREAK style)
bool m_bHandleSetInfo; // mess with the RB_SETBANDINFO message
CBandWindow m_BandWindow;
CComPtr<IWebBrowser2> m_pWebBrowser;
HWND m_TopWindow;
static LRESULT CALLBACK RebarSubclassProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData );
static LRESULT CALLBACK ParentSubclassProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData );
friendclassCBandWindow;
};
OBJECT_ENTRY_AUTO(__uuidof(ExplorerBand), CExplorerBand)