[NTOBJSHEX]
[reactos.git] / reactos / dll / shellext / ntobjshex / regfolder.h
1 /*
2 * PROJECT: ReactOS system libraries
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll\win32\stobject\stobject.cpp
5 * PURPOSE: Systray shell service object
6 * PROGRAMMERS: Robert Naumann
7 David Quintana <gigaherz@gmail.com>
8 */
9 #pragma once
10
11 extern const GUID CLSID_RegistryFolder;
12
13 class CRegistryPidlManager;
14
15 class CRegistryFolder :
16 public CComCoClass<CRegistryFolder, &CLSID_RegistryFolder>,
17 public CComObjectRootEx<CComMultiThreadModelNoCS>,
18 public IShellFolder2,
19 public IPersistFolder2,
20 public IShellFolderViewCB
21 {
22 CRegistryPidlManager * m_PidlManager;
23
24 HKEY m_hRoot;
25 WCHAR m_NtPath[MAX_PATH];
26
27 LPITEMIDLIST m_shellPidl;
28
29 public:
30
31 CRegistryFolder();
32 virtual ~CRegistryFolder();
33
34 CRegistryPidlManager& GetManager() { return *m_PidlManager; }
35
36 // IShellFolder
37 virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
38 HWND hwndOwner,
39 LPBC pbcReserved,
40 LPOLESTR lpszDisplayName,
41 ULONG *pchEaten,
42 LPITEMIDLIST *ppidl,
43 ULONG *pdwAttributes);
44
45 virtual HRESULT STDMETHODCALLTYPE EnumObjects(
46 HWND hwndOwner,
47 SHCONTF grfFlags,
48 IEnumIDList **ppenumIDList);
49
50 virtual HRESULT STDMETHODCALLTYPE BindToObject(
51 LPCITEMIDLIST pidl,
52 LPBC pbcReserved,
53 REFIID riid,
54 void **ppvOut);
55
56 virtual HRESULT STDMETHODCALLTYPE BindToStorage(
57 LPCITEMIDLIST pidl,
58 LPBC pbcReserved,
59 REFIID riid,
60 void **ppvObj);
61
62 virtual HRESULT STDMETHODCALLTYPE CompareIDs(
63 LPARAM lParam,
64 LPCITEMIDLIST pidl1,
65 LPCITEMIDLIST pidl2);
66
67 virtual HRESULT STDMETHODCALLTYPE CreateViewObject(
68 HWND hwndOwner,
69 REFIID riid,
70 void **ppvOut);
71
72 virtual HRESULT STDMETHODCALLTYPE GetAttributesOf(
73 UINT cidl,
74 PCUITEMID_CHILD_ARRAY apidl,
75 SFGAOF *rgfInOut);
76
77 virtual HRESULT STDMETHODCALLTYPE GetUIObjectOf(
78 HWND hwndOwner,
79 UINT cidl,
80 PCUITEMID_CHILD_ARRAY apidl,
81 REFIID riid,
82 UINT *prgfInOut,
83 void **ppvOut);
84
85 virtual HRESULT STDMETHODCALLTYPE GetDisplayNameOf(
86 LPCITEMIDLIST pidl,
87 SHGDNF uFlags,
88 STRRET *lpName);
89
90 virtual HRESULT STDMETHODCALLTYPE SetNameOf(
91 HWND hwnd,
92 LPCITEMIDLIST pidl,
93 LPCOLESTR lpszName,
94 SHGDNF uFlags,
95 LPITEMIDLIST *ppidlOut);
96
97 // IShellFolder2
98 virtual HRESULT STDMETHODCALLTYPE GetDefaultSearchGUID(
99 GUID *lpguid);
100
101 virtual HRESULT STDMETHODCALLTYPE EnumSearches(
102 IEnumExtraSearch **ppenum);
103
104 virtual HRESULT STDMETHODCALLTYPE GetDefaultColumn(
105 DWORD dwReserved,
106 ULONG *pSort,
107 ULONG *pDisplay);
108
109 virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnState(
110 UINT iColumn,
111 SHCOLSTATEF *pcsFlags);
112
113 virtual HRESULT STDMETHODCALLTYPE GetDetailsEx(
114 LPCITEMIDLIST pidl,
115 const SHCOLUMNID *pscid,
116 VARIANT *pv);
117
118 virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(
119 LPCITEMIDLIST pidl,
120 UINT iColumn,
121 SHELLDETAILS *psd);
122
123 virtual HRESULT STDMETHODCALLTYPE MapColumnToSCID(
124 UINT iColumn,
125 SHCOLUMNID *pscid);
126
127 // IPersist
128 virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *lpClassId);
129
130 // IPersistFolder
131 virtual HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl);
132
133 // IPersistFolder2
134 virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
135
136 // IShellFolderViewCB
137 virtual HRESULT STDMETHODCALLTYPE MessageSFVCB(UINT uMsg, WPARAM wParam, LPARAM lParam);
138
139 // Internal
140 HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl, PCWSTR ntPath, HKEY hRoot);
141
142 static HRESULT CALLBACK DefCtxMenuCallback(IShellFolder *, HWND, IDataObject *, UINT, WPARAM, LPARAM);
143
144 DECLARE_REGISTRY_RESOURCEID(IDR_REGISTRYFOLDER)
145 DECLARE_NOT_AGGREGATABLE(CRegistryFolder)
146 DECLARE_PROTECT_FINAL_CONSTRUCT()
147
148 BEGIN_COM_MAP(CRegistryFolder)
149 COM_INTERFACE_ENTRY_IID(IID_IShellFolder, IShellFolder)
150 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
151 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
152 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
153 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
154 COM_INTERFACE_ENTRY_IID(IID_IShellFolderViewCB, IShellFolderViewCB)
155 END_COM_MAP()
156
157 };