[BROWSEUI]
[reactos.git] / dll / win32 / browseui / internettoolbar.h
1 /*
2 * ReactOS Explorer
3 *
4 * Copyright 2009 Andrew Hill <ash77 at domain reactos.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20
21 #pragma once
22
23 static const int gBackCommandID = 0xa121;
24 static const int gForwardCommandID = 0xa122;
25 static const int gUpLevelCommandID = 0xa022;
26 static const int gSearchCommandID = 1003;
27 static const int gFoldersCommandID = 1004;
28 static const int gMoveToCommandID = 0x701f;
29 static const int gCopyToCommandID = 0x701e;
30 static const int gDeleteCommandID = 0x7011;
31 static const int gUndoCommandID = 0x701b;
32 static const int gViewsCommandID = 0x7031;
33 static const int gStopCommandID = 1010;
34 static const int gRefreshCommandID = 0xa220;
35 static const int gHomeCommandID = 1012;
36 static const int gMapDriveCommandID = 41089;
37 static const int gDisconnectCommandID = 41090;
38 static const int gFavoritesCommandID = 1015;
39 static const int gHistoryCommandID = 1016;
40 static const int gFullScreenCommandID = 1017;
41 static const int gPropertiesCommandID = 0x7013;
42 static const int gCutCommandID = 0x7018;
43 static const int gCopyCommandID = 0x7019;
44 static const int gPasteCommandID = 0x701a;
45 static const int gFolderOptionsCommandID = 41251;
46
47 class CMenuCallback :
48 public CComObjectRootEx<CComMultiThreadModelNoCS>,
49 public IShellMenuCallback
50 {
51 private:
52 CComPtr<IShellMenu> fFavoritesMenu;
53 public:
54 CMenuCallback();
55 ~CMenuCallback();
56
57 HRESULT STDMETHODCALLTYPE GetObject(LPSMDATA psmd, REFIID riid, void **ppvObject);
58 public:
59 // *** IShellMenuCallback methods ***
60 virtual HRESULT STDMETHODCALLTYPE CallbackSM(LPSMDATA psmd, UINT uMsg, WPARAM wParam, LPARAM lParam);
61
62 BEGIN_COM_MAP(CMenuCallback)
63 COM_INTERFACE_ENTRY_IID(IID_IShellMenuCallback, IShellMenuCallback)
64 END_COM_MAP()
65 };
66
67 class CInternetToolbar :
68 public CWindowImpl<CInternetToolbar, CWindow, CControlWinTraits>,
69 public CComCoClass<CInternetToolbar, &CLSID_InternetToolbar>,
70 public CComObjectRootEx<CComMultiThreadModelNoCS>,
71 public IInputObject,
72 public IDockingWindow,
73 public IPersistStreamInit,
74 public IOleCommandTarget,
75 public IDispatch,
76 public IExplorerToolbar,
77 public IShellChangeNotify,
78 public IObjectWithSite,
79 public IServiceProvider,
80 public IWinEventHandler,
81 public IBandSite
82 {
83 public:
84 CComPtr<IUnknown> fSite; // our site
85 HWND fMainReBar; // rebar for top of window
86 bool fLocked; // is bar locked to prevent changes?
87 CComPtr<IShellMenu> fMenuBar; // the menu rebar
88 HWND fMenuBandWindow;
89 HWND fNavigationWindow;
90 CComPtr<IUnknown> fLogoBar; // the reactos logo
91 CComPtr<IUnknown> fControlsBar; // navigation controls
92 CComPtr<IUnknown> fNavigationBar; // address bar
93 CComObject<CMenuCallback> fMenuCallback;
94 CComPtr<IOleCommandTarget> fCommandTarget;
95 GUID fCommandCategory;
96 HWND fToolbarWindow;
97 DWORD fAdviseCookie;
98 CComPtr<IBandProxy> fBandProxy;
99 BOOL fSizing;
100 POINT fStartPosition;
101 LONG fStartHeight;
102 public:
103 CInternetToolbar();
104 ~CInternetToolbar();
105 void AddDockItem(IUnknown *newItem, int bandID, int flags);
106 HRESULT ReserveBorderSpace(LONG maxHeight = -1);
107 HRESULT CreateMenuBar(IShellMenu **menuBar);
108 HRESULT CreateBrandBand(IUnknown **logoBar);
109 HRESULT CreateToolsBar(IUnknown **toolsBar);
110 HRESULT CreateAddressBand(IUnknown **toolsBar);
111 HRESULT LockUnlockToolbars(bool locked);
112 HRESULT CommandStateChanged(bool newValue, int commandID);
113 HRESULT CreateAndInitBandProxy();
114 public:
115 // *** IInputObject specific methods ***
116 virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
117 virtual HRESULT STDMETHODCALLTYPE HasFocusIO();
118 virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
119
120 // *** IOleWindow methods ***
121 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd);
122 virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
123
124 // *** IDockingWindow methods ***
125 virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow);
126 virtual HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved);
127 virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(LPCRECT prcBorder, IUnknown *punkToolbarSite, BOOL fReserved);
128
129 // *** IPersist methods ***
130 virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
131
132 // *** IPersistStreamInit methods ***
133 virtual HRESULT STDMETHODCALLTYPE IsDirty();
134 virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
135 virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
136 virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
137 virtual HRESULT STDMETHODCALLTYPE InitNew();
138
139 // *** IOleCommandTarget methods ***
140 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[ ], OLECMDTEXT *pCmdText);
141 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
142
143 // *** IDispatch methods ***
144 virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
145 virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
146 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
147 virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
148
149 // *** IExplorerToolbar methods ***
150 virtual HRESULT STDMETHODCALLTYPE SetCommandTarget(IUnknown *theTarget, GUID *category, long param14);
151 virtual HRESULT STDMETHODCALLTYPE Unknown1();
152 virtual HRESULT STDMETHODCALLTYPE AddButtons(const GUID *pguidCmdGroup, long buttonCount, TBBUTTON *buttons);
153 virtual HRESULT STDMETHODCALLTYPE AddString(const GUID *pguidCmdGroup, HINSTANCE param10, LPCTSTR param14, long *param18);
154 virtual HRESULT STDMETHODCALLTYPE GetButton(const GUID *pguidCmdGroup, long param10, long param14);
155 virtual HRESULT STDMETHODCALLTYPE GetState(const GUID *pguidCmdGroup, long commandID, long *theState);
156 virtual HRESULT STDMETHODCALLTYPE SetState(const GUID *pguidCmdGroup, long commandID, long theState);
157 virtual HRESULT STDMETHODCALLTYPE AddBitmap(const GUID *pguidCmdGroup, long param10, long buttonCount, TBADDBITMAP *lParam, long *newIndex, COLORREF param20);
158 virtual HRESULT STDMETHODCALLTYPE GetBitmapSize(long *paramC);
159 virtual HRESULT STDMETHODCALLTYPE SendToolbarMsg(const GUID *pguidCmdGroup, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *result);
160 virtual HRESULT STDMETHODCALLTYPE SetImageList(const GUID *pguidCmdGroup, HIMAGELIST param10, HIMAGELIST param14, HIMAGELIST param18);
161 virtual HRESULT STDMETHODCALLTYPE ModifyButton(const GUID *pguidCmdGroup, long param10, long param14);
162
163 // *** IShellChangeNotify methods ***
164 virtual HRESULT STDMETHODCALLTYPE OnChange(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2);
165
166 // *** IObjectWithSite methods ***
167 virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
168 virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
169
170 // *** IServiceProvider methods ***
171 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
172
173 // *** IWinEventHandler methods ***
174 virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult);
175 virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd);
176
177 // *** IBandSite specific methods ***
178 virtual HRESULT STDMETHODCALLTYPE AddBand(IUnknown *punk);
179 virtual HRESULT STDMETHODCALLTYPE EnumBands(UINT uBand, DWORD *pdwBandID);
180 virtual HRESULT STDMETHODCALLTYPE QueryBand(DWORD dwBandID, IDeskBand **ppstb, DWORD *pdwState, LPWSTR pszName, int cchName);
181 virtual HRESULT STDMETHODCALLTYPE SetBandState(DWORD dwBandID, DWORD dwMask, DWORD dwState);
182 virtual HRESULT STDMETHODCALLTYPE RemoveBand(DWORD dwBandID);
183 virtual HRESULT STDMETHODCALLTYPE GetBandObject(DWORD dwBandID, REFIID riid, void **ppv);
184 virtual HRESULT STDMETHODCALLTYPE SetBandSiteInfo(const BANDSITEINFO *pbsinfo);
185 virtual HRESULT STDMETHODCALLTYPE GetBandSiteInfo(BANDSITEINFO *pbsinfo);
186
187 // message handlers
188 LRESULT OnTravelBack(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
189 LRESULT OnTravelForward(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
190 LRESULT OnUpLevel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
191 LRESULT OnSearch(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
192 LRESULT OnFolders(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
193 LRESULT OnForwardToCommandTarget(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL &bHandled);
194 LRESULT OnMenuDropDown(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled);
195 LRESULT OnQueryInsert(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled);
196 LRESULT OnQueryDelete(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled);
197 LRESULT OnNavigateCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
198 LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
199 LRESULT OnSize(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
200 LRESULT OnSetCursor(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
201 LRESULT OnTipText(UINT idControl, NMHDR *pNMHDR, BOOL &bHandled);
202 LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
203 LRESULT OnNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
204 LRESULT OnLDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
205 LRESULT OnLUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
206 LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
207
208 BEGIN_MSG_MAP(CInternetToolbar)
209 COMMAND_ID_HANDLER(gBackCommandID, OnTravelBack)
210 COMMAND_ID_HANDLER(gForwardCommandID, OnTravelForward)
211 COMMAND_ID_HANDLER(gUpLevelCommandID, OnUpLevel)
212 COMMAND_ID_HANDLER(gSearchCommandID, OnSearch)
213 COMMAND_ID_HANDLER(gFoldersCommandID, OnFolders)
214 COMMAND_RANGE_HANDLER(0x7000, 0x7fff, OnForwardToCommandTarget)
215 NOTIFY_HANDLER(0, TBN_DROPDOWN, OnMenuDropDown)
216 NOTIFY_HANDLER(0, TBN_QUERYINSERT, OnQueryInsert)
217 NOTIFY_HANDLER(0, TBN_QUERYDELETE, OnQueryDelete)
218 MESSAGE_HANDLER(WM_COMMAND, OnCommand)
219 MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu)
220 MESSAGE_HANDLER(WM_SIZE, OnSize)
221 MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
222 NOTIFY_CODE_HANDLER(TTN_NEEDTEXTW, OnTipText)
223 MESSAGE_HANDLER(WM_NOTIFY, OnNotify)
224 MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLDown)
225 MESSAGE_HANDLER(WM_LBUTTONUP, OnLUp)
226 MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
227 END_MSG_MAP()
228
229 DECLARE_REGISTRY_RESOURCEID(IDR_INTERNETTOOLBAR)
230 DECLARE_NOT_AGGREGATABLE(CInternetToolbar)
231
232 DECLARE_PROTECT_FINAL_CONSTRUCT()
233
234 BEGIN_COM_MAP(CInternetToolbar)
235 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
236 COM_INTERFACE_ENTRY_IID(IID_IOleWindow, IOleWindow)
237 COM_INTERFACE_ENTRY_IID(IID_IDockingWindow, IDockingWindow)
238 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
239 // COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
240 COM_INTERFACE_ENTRY_IID(IID_IPersistStreamInit, IPersistStreamInit)
241 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
242 COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
243 COM_INTERFACE_ENTRY_IID(IID_IExplorerToolbar, IExplorerToolbar)
244 COM_INTERFACE_ENTRY_IID(IID_IShellChangeNotify, IShellChangeNotify)
245 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
246 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
247 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
248 COM_INTERFACE_ENTRY_IID(IID_IBandSite, IBandSite)
249 END_COM_MAP()
250 };