6644199f311491066007945d74b799078e97205e
[reactos.git] / reactos / dll / win32 / browseui / explorerband.h
1 /*
2 * ReactOS Explorer
3 *
4 * Copyright 2016 Sylvain Deverre <deverre dot sylv at gmail dot com>
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 #define WM_USER_SHELLEVENT WM_USER+88
24 #define WM_USER_FOLDEREVENT WM_USER+88
25
26 class CExplorerBand :
27 public CComCoClass<CExplorerBand, &CLSID_ExplorerBand>,
28 public CComObjectRootEx<CComMultiThreadModelNoCS>,
29 public IDeskBand,
30 public IObjectWithSite,
31 public IInputObject,
32 public IPersistStream,
33 public IOleCommandTarget,
34 public IServiceProvider,
35 public IBandNavigate,
36 public IWinEventHandler,
37 public INamespaceProxy,
38 public IDispatch,
39 public IDropSource,
40 public IDropTarget,
41 public CWindowImpl<CExplorerBand, CWindow, CControlWinTraits>
42 {
43
44 private:
45 class NodeInfo
46 {
47 public:
48 LPITEMIDLIST absolutePidl;
49 LPITEMIDLIST relativePidl;
50 BOOL expanded;
51 };
52
53 // *** BaseBarSite information ***
54 CComPtr<IUnknown> pSite;
55 CComPtr<IShellFolder> pDesktop;
56
57 // *** tree explorer band stuff ***
58 BOOL fVisible;
59 BOOL bFocused;
60 DWORD dwBandID;
61 HIMAGELIST hImageList;
62 HTREEITEM hRoot;
63
64 // *** notification cookies ***
65 DWORD adviseCookie;
66 ULONG shellRegID;
67
68 void InitializeExplorerBand();
69 void DestroyExplorerBand();
70
71 BOOL OnTreeItemExpanding(LPNMTREEVIEW pnmtv);
72 void OnSelectionChanged(LPNMTREEVIEW pnmtv);
73
74 // *** Helper functions ***
75 NodeInfo* GetNodeInfo(HTREEITEM hItem);
76 HRESULT UpdateBrowser(LPITEMIDLIST pidlGoto);
77 HTREEITEM InsertItem(HTREEITEM hParent, IShellFolder *psfParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort);
78 BOOL InsertSubitems(HTREEITEM hItem, NodeInfo *pNodeInfo);
79
80 public:
81 CExplorerBand();
82 virtual ~CExplorerBand();
83
84 // *** IOleWindow methods ***
85 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd);
86 virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode);
87
88 // *** IDockingWindow methods ***
89 virtual HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved);
90 virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved);
91 virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow);
92
93 // *** IDeskBand methods ***
94 virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi);
95
96 // *** IObjectWithSite methods ***
97 virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
98 virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
99
100 // *** IOleCommandTarget methods ***
101 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
102 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
103
104 // *** IServiceProvider methods ***
105 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
106
107 // *** IInputObject methods ***
108 virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
109 virtual HRESULT STDMETHODCALLTYPE HasFocusIO();
110 virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg);
111
112 // *** IPersist methods ***
113 virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
114
115 // *** IPersistStream methods ***
116 virtual HRESULT STDMETHODCALLTYPE IsDirty();
117 virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
118 virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
119 virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize);
120
121 // *** IWinEventHandler methods ***
122 virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult);
123 virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd);
124
125 // *** IBandNavigate methods ***
126 virtual HRESULT STDMETHODCALLTYPE Select(long paramC);
127
128 // *** INamespaceProxy ***
129 virtual HRESULT STDMETHODCALLTYPE GetNavigateTarget(long paramC, long param10, long param14);
130 virtual HRESULT STDMETHODCALLTYPE Invoke(long paramC);
131 virtual HRESULT STDMETHODCALLTYPE OnSelectionChanged(long paramC);
132 virtual HRESULT STDMETHODCALLTYPE RefreshFlags(long paramC, long param10, long param14);
133 virtual HRESULT STDMETHODCALLTYPE CacheItem(long paramC);
134
135 // *** IDispatch methods ***
136 virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
137 virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
138 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
139 virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
140
141 // *** IDropTarget methods ***
142 virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
143 virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
144 virtual HRESULT STDMETHODCALLTYPE DragLeave();
145 virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
146
147 // *** IDropSource methods ***
148 virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState);
149 virtual HRESULT STDMETHODCALLTYPE GiveFeedback(DWORD dwEffect);
150
151 DECLARE_REGISTRY_RESOURCEID(IDR_EXPLORERBAND)
152 DECLARE_NOT_AGGREGATABLE(CExplorerBand)
153
154 DECLARE_PROTECT_FINAL_CONSTRUCT()
155
156 BEGIN_COM_MAP(CExplorerBand)
157 COM_INTERFACE_ENTRY_IID(IID_IDispatch, IDispatch)
158 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
159 COM_INTERFACE_ENTRY_IID(IID_IBandNavigate, IBandNavigate)
160 COM_INTERFACE_ENTRY_IID(IID_INamespaceProxy, INamespaceProxy)
161 COM_INTERFACE_ENTRY2_IID(IID_IOleWindow, IOleWindow, IDeskBand)
162 COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow, IDockingWindow, IDeskBand)
163 COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
164 COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
165 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
166 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
167 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
168 COM_INTERFACE_ENTRY2_IID(IID_IPersist, IPersist, IPersistStream)
169 COM_INTERFACE_ENTRY_IID(IID_IPersistStream, IPersistStream)
170 END_COM_MAP()
171
172 BEGIN_MSG_MAP(CExplorerBand)
173 END_MSG_MAP()
174 };
175
176 extern "C"
177 HRESULT WINAPI CExplorerBand_Constructor(REFIID riid, LPVOID *ppv);