fad47162ce7d14fdea00a72ac038137b77f7d032
[reactos.git] / reactos / dll / win32 / shell32 / shellmenu / CMergedFolder.h
1 /*
2 * Shell Menu Site
3 *
4 * Copyright 2014 David Quintana
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., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19 */
20 #pragma once
21
22 interface IAugmentedShellFolder : public IShellFolder
23 {
24 virtual HRESULT STDMETHODCALLTYPE AddNameSpace(LPGUID, IShellFolder *, LPCITEMIDLIST, ULONG) = 0;
25 virtual HRESULT STDMETHODCALLTYPE GetNameSpaceID(LPCITEMIDLIST, LPGUID) = 0;
26 virtual HRESULT STDMETHODCALLTYPE QueryNameSpace(ULONG, LPGUID, IShellFolder **) = 0;
27 virtual HRESULT STDMETHODCALLTYPE EnumNameSpace(ULONG, PULONG) = 0;
28 };
29
30 interface IAugmentedShellFolder2 : public IAugmentedShellFolder
31 {
32 virtual HRESULT STDMETHODCALLTYPE UnWrapIDList(LPCITEMIDLIST, LONG, IShellFolder **, LPITEMIDLIST *, LPITEMIDLIST *, LONG *) = 0;
33 };
34
35 /* No idea what QUERYNAMESPACEINFO struct contains, yet */
36 struct QUERYNAMESPACEINFO
37 {
38 BYTE unknown[1];
39 };
40
41 interface IAugmentedShellFolder3 : public IAugmentedShellFolder2
42 {
43 virtual HRESULT STDMETHODCALLTYPE QueryNameSpace2(ULONG, QUERYNAMESPACEINFO *) = 0;
44 };
45
46 class CEnumMergedFolder;
47
48 class CMergedFolder :
49 public CComObjectRootEx<CComMultiThreadModelNoCS>,
50 public IShellFolder2,
51 public IPersistFolder2,
52 public IAugmentedShellFolder3 // -- undocumented
53 //public IShellService, // DEPRECATED IE4 interface: https://msdn.microsoft.com/en-us/library/windows/desktop/bb774870%28v=vs.85%29.aspx
54 //public ITranslateShellChangeNotify,// -- undocumented
55 //public IStorage,
56 //public IPersistPropertyBag,
57 //public IShellIconOverlay, // -- undocumented
58 //public ICompositeFolder, // -- undocumented
59 //public IItemNameLimits, // https://msdn.microsoft.com/en-us/library/windows/desktop/bb761776%28v=vs.85%29.aspx
60 {
61 private:
62 CComPtr<IShellFolder> m_UserLocal;
63 CComPtr<IShellFolder> m_AllUsers;
64 CComPtr<CEnumMergedFolder> m_EnumSource;
65
66 LPITEMIDLIST m_UserLocalPidl;
67 LPITEMIDLIST m_AllUsersPidl;
68 LPITEMIDLIST m_shellPidl;
69
70 public:
71 CMergedFolder();
72 virtual ~CMergedFolder();
73
74 HRESULT _SetSources(IShellFolder* userLocal, IShellFolder* allUSers);
75
76 DECLARE_NOT_AGGREGATABLE(CMergedFolder)
77 DECLARE_PROTECT_FINAL_CONSTRUCT()
78
79 BEGIN_COM_MAP(CMergedFolder)
80 COM_INTERFACE_ENTRY2_IID(IID_IShellFolder, IShellFolder, IShellFolder2)
81 COM_INTERFACE_ENTRY_IID(IID_IShellFolder2, IShellFolder2)
82 COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)
83 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder, IPersistFolder)
84 COM_INTERFACE_ENTRY_IID(IID_IPersistFolder2, IPersistFolder2)
85 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder, IAugmentedShellFolder)
86 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder2, IAugmentedShellFolder2)
87 COM_INTERFACE_ENTRY_IID(IID_IAugmentedShellFolder3, IAugmentedShellFolder3)
88 //COM_INTERFACE_ENTRY_IID(IID_IStorage, IStorage)
89 //COM_INTERFACE_ENTRY_IID(IID_IShellService, IShellService)
90 //COM_INTERFACE_ENTRY_IID(IID_ITranslateShellChangeNotify,ITranslateShellChangeNotify)
91 //COM_INTERFACE_ENTRY_IID(IID_IPersistPropertyBag,IPersistPropertyBag)
92 //COM_INTERFACE_ENTRY_IID(IID_IShellIconOverlay, IShellIconOverlay)
93 //COM_INTERFACE_ENTRY_IID(IID_ICompositeFolder, ICompositeFolder)
94 //COM_INTERFACE_ENTRY_IID(IID_IItemNameLimits, IItemNameLimits)
95 END_COM_MAP()
96
97 // IShellFolder
98 virtual HRESULT STDMETHODCALLTYPE ParseDisplayName(
99 HWND hwndOwner,
100 LPBC pbcReserved,
101 LPOLESTR lpszDisplayName,
102 ULONG *pchEaten,
103 LPITEMIDLIST *ppidl,
104 ULONG *pdwAttributes);
105
106 virtual HRESULT STDMETHODCALLTYPE EnumObjects(
107 HWND hwndOwner,
108 SHCONTF grfFlags,
109 IEnumIDList **ppenumIDList);
110
111 virtual HRESULT STDMETHODCALLTYPE BindToObject(
112 LPCITEMIDLIST pidl,
113 LPBC pbcReserved,
114 REFIID riid,
115 void **ppvOut);
116
117 virtual HRESULT STDMETHODCALLTYPE BindToStorage(
118 LPCITEMIDLIST pidl,
119 LPBC pbcReserved,
120 REFIID riid,
121 void **ppvObj);
122
123 virtual HRESULT STDMETHODCALLTYPE CompareIDs(
124 LPARAM lParam,
125 LPCITEMIDLIST pidl1,
126 LPCITEMIDLIST pidl2);
127
128 virtual HRESULT STDMETHODCALLTYPE CreateViewObject(
129 HWND hwndOwner,
130 REFIID riid,
131 void **ppvOut);
132
133 virtual HRESULT STDMETHODCALLTYPE GetAttributesOf(
134 UINT cidl,
135 PCUITEMID_CHILD_ARRAY apidl,
136 SFGAOF *rgfInOut);
137
138 virtual HRESULT STDMETHODCALLTYPE GetUIObjectOf(
139 HWND hwndOwner,
140 UINT cidl,
141 PCUITEMID_CHILD_ARRAY apidl,
142 REFIID riid,
143 UINT *prgfInOut,
144 void **ppvOut);
145
146 virtual HRESULT STDMETHODCALLTYPE GetDisplayNameOf(
147 LPCITEMIDLIST pidl,
148 SHGDNF uFlags,
149 STRRET *lpName);
150
151 virtual HRESULT STDMETHODCALLTYPE SetNameOf(
152 HWND hwnd,
153 LPCITEMIDLIST pidl,
154 LPCOLESTR lpszName,
155 SHGDNF uFlags,
156 LPITEMIDLIST *ppidlOut);
157
158 // IShellFolder2
159 virtual HRESULT STDMETHODCALLTYPE GetDefaultSearchGUID(
160 GUID *lpguid);
161
162 virtual HRESULT STDMETHODCALLTYPE EnumSearches(
163 IEnumExtraSearch **ppenum);
164
165 virtual HRESULT STDMETHODCALLTYPE GetDefaultColumn(
166 DWORD dwReserved,
167 ULONG *pSort,
168 ULONG *pDisplay);
169
170 virtual HRESULT STDMETHODCALLTYPE GetDefaultColumnState(
171 UINT iColumn,
172 SHCOLSTATEF *pcsFlags);
173
174 virtual HRESULT STDMETHODCALLTYPE GetDetailsEx(
175 LPCITEMIDLIST pidl,
176 const SHCOLUMNID *pscid,
177 VARIANT *pv);
178
179 virtual HRESULT STDMETHODCALLTYPE GetDetailsOf(
180 LPCITEMIDLIST pidl,
181 UINT iColumn,
182 SHELLDETAILS *psd);
183
184 virtual HRESULT STDMETHODCALLTYPE MapColumnToSCID(
185 UINT iColumn,
186 SHCOLUMNID *pscid);
187
188 // IPersist
189 virtual HRESULT STDMETHODCALLTYPE GetClassID(CLSID *lpClassId);
190
191 // IPersistFolder
192 virtual HRESULT STDMETHODCALLTYPE Initialize(LPCITEMIDLIST pidl);
193
194 // IPersistFolder2
195 virtual HRESULT STDMETHODCALLTYPE GetCurFolder(LPITEMIDLIST * pidl);
196
197 // IAugmentedShellFolder2
198 virtual HRESULT STDMETHODCALLTYPE AddNameSpace(LPGUID lpGuid, IShellFolder * psf, LPCITEMIDLIST pcidl, ULONG dwUnknown);
199 virtual HRESULT STDMETHODCALLTYPE GetNameSpaceID(LPCITEMIDLIST pcidl, LPGUID lpGuid);
200 virtual HRESULT STDMETHODCALLTYPE QueryNameSpace(ULONG dwUnknown, LPGUID lpGuid, IShellFolder ** ppsf);
201 virtual HRESULT STDMETHODCALLTYPE EnumNameSpace(ULONG dwUnknown, PULONG lpUnknown);
202 virtual HRESULT STDMETHODCALLTYPE UnWrapIDList(LPCITEMIDLIST pcidl, LONG lUnknown, IShellFolder ** ppsf, LPITEMIDLIST * ppidl1, LPITEMIDLIST *ppidl2, LONG * lpUnknown);
203
204 // IAugmentedShellFolder3
205 virtual HRESULT STDMETHODCALLTYPE QueryNameSpace2(ULONG, QUERYNAMESPACEINFO *);
206 };