ReactOS 0.4.15-dev-5874-gc762234
explorerband.h
Go to the documentation of this file.
1/*
2 * ReactOS Explorer
3 *
4 * Copyright 2016 Sylvain Deverre <deverre dot sylv at gmail dot com>
5 * Copyright 2020 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with this library; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21
22#pragma once
23
24#define WM_USER_SHELLEVENT WM_USER+88
25#define WM_USER_FOLDEREVENT WM_USER+88
26
28 public CComCoClass<CExplorerBand, &CLSID_ExplorerBand>,
29 public CComObjectRootEx<CComMultiThreadModelNoCS>,
30 public IDeskBand,
31 public IObjectWithSite,
32 public IInputObject,
33 public IPersistStream,
34 public IOleCommandTarget,
35 public IServiceProvider,
36 public IBandNavigate,
37 public IWinEventHandler,
38 public INamespaceProxy,
39 public IDispatch,
40 public IDropSource,
41 public IDropTarget,
42 public CWindowImpl<CExplorerBand, CWindow, CControlWinTraits>
43{
44
45private:
47 {
48 public:
52 };
53
54 // *** BaseBarSite information ***
55 CComPtr<IUnknown> m_pSite;
56 CComPtr<IShellFolder> m_pDesktop;
57
58 // *** tree explorer band stuff ***
68
69 // *** notification cookies ***
72
73 // *** Drop target information ***
74 CComPtr<IDropTarget> m_pDropTarget;
76 CComPtr<IDataObject> m_pCurObject;
77
80 HRESULT ExecuteCommand(CComPtr<IContextMenu>& menu, UINT nCmd);
81
82 // *** notifications handling ***
86 void OnTreeItemDragging(LPNMTREEVIEW pnmtv, BOOL isRightClick);
87
88 // *** ATL event handlers ***
94
95 // *** Helper functions ***
98 HTREEITEM InsertItem(HTREEITEM hParent, IShellFolder *psfParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort);
99 HTREEITEM InsertItem(HTREEITEM hParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort);
102 BOOL DeleteItem(LPITEMIDLIST toDelete);
103 BOOL RenameItem(HTREEITEM toRename, LPITEMIDLIST newPidl);
106
107 // *** Tree item sorting callback ***
108 static int CALLBACK CompareTreeItems(LPARAM p1, LPARAM p2, LPARAM p3);
109
110public:
112 virtual ~CExplorerBand();
113
114 // *** IOleWindow methods ***
115 virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd);
117
118 // *** IDockingWindow methods ***
120 virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved);
121 virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow);
122
123 // *** IDeskBand methods ***
124 virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi);
125
126 // *** IObjectWithSite methods ***
127 virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite);
128 virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite);
129
130 // *** IOleCommandTarget methods ***
131 virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds [], OLECMDTEXT *pCmdText);
132 virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut);
133
134 // *** IServiceProvider methods ***
135 virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject);
136
137 // *** IInputObject methods ***
138 virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg);
141
142 // *** IPersist methods ***
143 virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID);
144
145 // *** IPersistStream methods ***
147 virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm);
148 virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty);
150
151 // *** IWinEventHandler methods ***
154
155 // *** IBandNavigate methods ***
156 virtual HRESULT STDMETHODCALLTYPE Select(long paramC);
157
158 // *** INamespaceProxy ***
159 virtual HRESULT STDMETHODCALLTYPE GetNavigateTarget(long paramC, long param10, long param14);
160 virtual HRESULT STDMETHODCALLTYPE Invoke(long paramC);
161 virtual HRESULT STDMETHODCALLTYPE OnSelectionChanged(long paramC);
162 virtual HRESULT STDMETHODCALLTYPE RefreshFlags(long paramC, long param10, long param14);
163 virtual HRESULT STDMETHODCALLTYPE CacheItem(long paramC);
164
165 // *** IDispatch methods ***
167 virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
168 virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
169 virtual HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
170
171 // *** IDropTarget methods ***
172 virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
173 virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
175 virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect);
176
177 // *** IDropSource methods ***
178 virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState);
180
183
185
188 COM_INTERFACE_ENTRY_IID(IID_IWinEventHandler, IWinEventHandler)
189 COM_INTERFACE_ENTRY_IID(IID_IBandNavigate, IBandNavigate)
190 COM_INTERFACE_ENTRY_IID(IID_INamespaceProxy, INamespaceProxy)
193 COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
195 COM_INTERFACE_ENTRY_IID(IID_IOleCommandTarget, IOleCommandTarget)
196 COM_INTERFACE_ENTRY_IID(IID_IServiceProvider, IServiceProvider)
197 COM_INTERFACE_ENTRY_IID(IID_IInputObject, IInputObject)
201
207 // MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
209};
HWND hWnd
Definition: settings.c:17
#define STDMETHODCALLTYPE
Definition: bdasup.h:9
LPITEMIDLIST relativePidl
Definition: explorerband.h:50
LPITEMIDLIST absolutePidl
Definition: explorerband.h:49
HTREEITEM InsertItem(HTREEITEM hParent, IShellFolder *psfParent, LPITEMIDLIST pElt, LPITEMIDLIST pEltRelative, BOOL bSort)
HTREEITEM m_hRoot
Definition: explorerband.h:65
BOOL OnTreeItemExpanding(LPNMTREEVIEW pnmtv)
virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
HTREEITEM m_oldSelected
Definition: explorerband.h:66
void DestroyExplorerBand()
virtual HRESULT STDMETHODCALLTYPE DragOver(DWORD glfKeyState, POINTL pt, DWORD *pdwEffect)
virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo)
virtual HRESULT STDMETHODCALLTYPE TranslateAcceleratorIO(LPMSG lpMsg)
HIMAGELIST m_hImageList
Definition: explorerband.h:64
void OnSelectionChanged(LPNMTREEVIEW pnmtv)
virtual HRESULT STDMETHODCALLTYPE QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
virtual HRESULT STDMETHODCALLTYPE Drop(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect)
virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *pClassID)
HRESULT ExecuteCommand(CComPtr< IContextMenu > &menu, UINT nCmd)
virtual HRESULT STDMETHODCALLTYPE RefreshFlags(long paramC, long param10, long param14)
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
virtual HRESULT STDMETHODCALLTYPE Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
virtual HRESULT STDMETHODCALLTYPE QueryContinueDrag(BOOL fEscapePressed, DWORD grfKeyState)
virtual HRESULT STDMETHODCALLTYPE Save(IStream *pStm, BOOL fClearDirty)
virtual HRESULT STDMETHODCALLTYPE GetNavigateTarget(long paramC, long param10, long param14)
BOOL m_bNavigating
Definition: explorerband.h:60
virtual HRESULT STDMETHODCALLTYPE UIActivateIO(BOOL fActivate, LPMSG lpMsg)
virtual HRESULT STDMETHODCALLTYPE DragLeave()
virtual HRESULT STDMETHODCALLTYPE Select(long paramC)
void InitializeExplorerBand()
virtual HRESULT STDMETHODCALLTYPE QueryService(REFGUID guidService, REFIID riid, void **ppvObject)
HTREEITEM m_childTargetNode
Definition: explorerband.h:75
DWORD m_dwBandID
Definition: explorerband.h:62
virtual HRESULT STDMETHODCALLTYPE IsWindowOwner(HWND hWnd)
virtual HRESULT STDMETHODCALLTYPE Load(IStream *pStm)
static int CALLBACK CompareTreeItems(LPARAM p1, LPARAM p2, LPARAM p3)
virtual HRESULT STDMETHODCALLTYPE CacheItem(long paramC)
virtual HRESULT STDMETHODCALLTYPE GetBandInfo(DWORD dwBandID, DWORD dwViewMode, DESKBANDINFO *pdbi)
HRESULT UpdateBrowser(LPITEMIDLIST pidlGoto)
virtual HRESULT STDMETHODCALLTYPE ShowDW(BOOL fShow)
BOOL NavigateToCurrentFolder()
LPITEMIDLIST m_pidlCurrent
Definition: explorerband.h:67
virtual HRESULT STDMETHODCALLTYPE OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
virtual HRESULT STDMETHODCALLTYPE HasFocusIO()
virtual HRESULT STDMETHODCALLTYPE SetSite(IUnknown *pUnkSite)
CComPtr< IDataObject > m_pCurObject
Definition: explorerband.h:76
void OnTreeItemDragging(LPNMTREEVIEW pnmtv, BOOL isRightClick)
CComPtr< IUnknown > m_pSite
Definition: explorerband.h:55
DWORD m_adviseCookie
Definition: explorerband.h:70
BOOL RefreshTreePidl(HTREEITEM tree, LPITEMIDLIST pidlParent)
LRESULT OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
NodeInfo * GetNodeInfo(HTREEITEM hItem)
virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *lphwnd)
virtual HRESULT STDMETHODCALLTYPE GetSizeMax(ULARGE_INTEGER *pcbSize)
BOOL NavigateToPIDL(LPITEMIDLIST dest, HTREEITEM *item, BOOL bExpand, BOOL bInsert, BOOL bSelect)
virtual HRESULT STDMETHODCALLTYPE GiveFeedback(DWORD dwEffect)
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
LRESULT ContextMenuHack(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
virtual HRESULT STDMETHODCALLTYPE GetSite(REFIID riid, void **ppvSite)
CComPtr< IShellFolder > m_pDesktop
Definition: explorerband.h:56
BOOL OnTreeItemDeleted(LPNMTREEVIEW pnmtv)
CComPtr< IDropTarget > m_pDropTarget
Definition: explorerband.h:74
ULONG m_shellRegID
Definition: explorerband.h:71
virtual HRESULT STDMETHODCALLTYPE CloseDW(DWORD dwReserved)
virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL fEnterMode)
virtual HRESULT STDMETHODCALLTYPE DragEnter(IDataObject *pObj, DWORD glfKeyState, POINTL pt, DWORD *pdwEffect)
LRESULT OnShellEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
BOOL InsertSubitems(HTREEITEM hItem, NodeInfo *pNodeInfo)
virtual HRESULT STDMETHODCALLTYPE Invoke(long paramC)
virtual HRESULT STDMETHODCALLTYPE IsDirty()
virtual HRESULT STDMETHODCALLTYPE ResizeBorderDW(const RECT *prcBorder, IUnknown *punkToolbarSite, BOOL fReserved)
virtual ~CExplorerBand()
BOOL RenameItem(HTREEITEM toRename, LPITEMIDLIST newPidl)
static BOOL bInsert
Definition: cmdinput.c:121
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
#define IDR_EXPLORERBAND
Definition: resource.h:101
#define CALLBACK
Definition: compat.h:35
#define pt(x, y)
Definition: drawing.c:79
#define WM_USER_SHELLEVENT
Definition: explorerband.h:24
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned short WORD
Definition: ntddk_ex.h:93
REFIID riid
Definition: atlbase.h:39
#define COM_INTERFACE_ENTRY2_IID(iid, x, x2)
Definition: atlcom.h:570
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:542
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:562
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:640
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:612
#define DECLARE_REGISTRY_RESOURCEID(x)
Definition: atlcom.h:606
#define END_COM_MAP()
Definition: atlcom.h:553
#define MESSAGE_HANDLER(msg, func)
Definition: atlwin.h:1920
#define BEGIN_MSG_MAP(theClass)
Definition: atlwin.h:1892
#define END_MSG_MAP()
Definition: atlwin.h:1911
const IID IID_IObjectWithSite
static char * dest
Definition: rtl.c:135
static LPOLESTR
Definition: stg_prop.c:27
static VARIANTARG static DISPID
Definition: ordinal.c:49
static ATOM item
Definition: dde.c:856
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED _In_opt_ LPTRANSMIT_FILE_BUFFERS _In_ DWORD dwReserved
Definition: mswsock.h:95
unsigned int UINT
Definition: ndis.h:50
const GUID IID_IOleWindow
const GUID IID_IDispatch
const GUID IID_IPersist
Definition: proxy.cpp:14
const GUID IID_IPersistStream
Definition: proxy.cpp:13
#define LPNMTREEVIEW
Definition: commctrl.h:3643
#define REFIID
Definition: guiddef.h:118
#define WM_CONTEXTMENU
Definition: richedit.h:64
DWORD LCID
Definition: nls.h:13
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
Definition: scsiwmi.h:51
uint32_t ULONG
Definition: typedefs.h:59
#define DeleteItem
Definition: userenv.h:210
_In_ DWORD _Out_ _In_ WORD wFlags
Definition: wincon.h:531
_In_ void _In_ PCCERT_CONTEXT _In_opt_ LPFILETIME _In_ DWORD _In_ DWORD _Outptr_opt_ void ** ppvObject
Definition: wincrypt.h:6082
LONG_PTR LPARAM
Definition: windef.h:208
LONG_PTR LRESULT
Definition: windef.h:209
UINT_PTR WPARAM
Definition: windef.h:207
#define WM_SETFOCUS
Definition: winuser.h:1603
#define WM_RBUTTONDOWN
Definition: winuser.h:1769