[SHELL] IPersistFolder::Initialize takes a PCIDLIST_ABSOLUTE. CORE-16385
[reactos.git] / dll / win32 / browseui / shellfind / CFindFolder.h
1 /*
2 * PROJECT: ReactOS Search Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Search results folder
5 * COPYRIGHT: Copyright 2019 Brock Mammen
6 */
7
8 #pragma once
9
10 #include "shellfind.h"
11
12 class CFindFolder :
13 public CWindowImpl<CFindFolder>,
14 public CComCoClass<CFindFolder, &CLSID_FindFolder>,
15 public CComObjectRootEx<CComMultiThreadModelNoCS>,
16 public IShellFolder2,
17 public IPersistFolder2,
18 public IShellFolderViewCB,
19 public IConnectionPointContainerImpl<CFindFolder>,
20 public IConnectionPointImpl<CFindFolder, &DIID_DSearchCommandEvents>
21 {
22 // *** IShellFolder2 methods ***
23 STDMETHODIMP GetDefaultSearchGUID(GUID *pguid);
24
25 STDMETHODIMP EnumSearches(IEnumExtraSearch **ppenum);
26
27 STDMETHODIMP GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pDisplay);
28
29 STDMETHODIMP GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags);
30
31 STDMETHODIMP GetDetailsEx(PCUITEMID_CHILD pidl, const SHCOLUMNID *pscid, VARIANT *pv);
32
33 STDMETHODIMP GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS *pDetails);
34
35 STDMETHODIMP MapColumnToSCID(UINT iColumn, SHCOLUMNID *pscid);
36
37
38 // *** IShellFolder methods ***
39 STDMETHODIMP ParseDisplayName(HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, ULONG *pchEaten,
40 PIDLIST_RELATIVE *ppidl, ULONG *pdwAttributes);
41
42 STDMETHODIMP EnumObjects(HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST *ppEnumIDList);
43
44 STDMETHODIMP BindToObject(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut);
45
46 STDMETHODIMP BindToStorage(PCUIDLIST_RELATIVE pidl, LPBC pbcReserved, REFIID riid, LPVOID *ppvOut);
47
48 STDMETHODIMP CompareIDs(LPARAM lParam, PCUIDLIST_RELATIVE pidl1, PCUIDLIST_RELATIVE pidl2);
49
50 STDMETHODIMP CreateViewObject(HWND hwndOwner, REFIID riid, LPVOID *ppvOut);
51
52 STDMETHODIMP GetAttributesOf(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, DWORD *rgfInOut);
53
54 STDMETHODIMP GetUIObjectOf(HWND hwndOwner, UINT cidl, PCUITEMID_CHILD_ARRAY apidl, REFIID riid, UINT *prgfInOut,
55 LPVOID *ppvOut);
56
57
58 STDMETHODIMP GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET pName);
59 STDMETHODIMP SetNameOf(HWND hwndOwner, PCUITEMID_CHILD pidl, LPCOLESTR lpName, DWORD dwFlags,
60 PITEMID_CHILD *pPidlOut);
61
62 //// *** IShellFolderViewCB methods ***
63 STDMETHODIMP MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
64
65 private:
66 LPITEMIDLIST m_pidl;
67 CComPtr<IShellFolder2> m_pisfInner;
68 CComPtr<IShellFolderView> m_shellFolderView;
69 CComPtr<IShellBrowser> m_shellBrowser;
70 HANDLE m_hStopEvent;
71
72 void NotifyConnections(DISPID id);
73 static DWORD WINAPI SearchThreadProc(LPVOID lpParameter);
74
75 //// *** IPersistFolder2 methods ***
76 STDMETHODIMP GetCurFolder(PIDLIST_ABSOLUTE *pidl);
77
78
79 // *** IPersistFolder methods ***
80 STDMETHODIMP Initialize(PCIDLIST_ABSOLUTE pidl);
81
82
83 // *** IPersist methods ***
84 STDMETHODIMP GetClassID(CLSID *pClassId);
85
86 // *** Message handlers ***
87 LRESULT StartSearch(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
88
89 LRESULT StopSearch(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
90
91 LRESULT AddResult(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
92
93 LRESULT UpdateStatus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
94
95 public:
96 CFindFolder();
97
98 DECLARE_REGISTRY_RESOURCEID(IDR_FINDFOLDER)
99
100 DECLARE_NOT_AGGREGATABLE(CFindFolder)
101
102 DECLARE_PROTECT_FINAL_CONSTRUCT()
103
104 BEGIN_CONNECTION_POINT_MAP(CFindFolder)
105 CONNECTION_POINT_ENTRY(DIID_DSearchCommandEvents)
106 END_CONNECTION_POINT_MAP()
107
108 BEGIN_MSG_MAP(CFindFolder)
109 MESSAGE_HANDLER(WM_SEARCH_START, StartSearch)
110 MESSAGE_HANDLER(WM_SEARCH_STOP, StopSearch)
111 MESSAGE_HANDLER(WM_SEARCH_ADD_RESULT, AddResult)
112 MESSAGE_HANDLER(WM_SEARCH_UPDATE_STATUS, UpdateStatus)
113 END_MSG_MAP()
114
115 BEGIN_COM_MAP(CFindFolder)
116 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
117 COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
118 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
119 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
120 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
121 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
122 COM_INTERFACE_ENTRY_IID(IID_IConnectionPointContainer, IConnectionPointContainer)
123 END_COM_MAP()
124 };
125