Revert "[SHELL32] SHChangeNotify: Use tree for CDirectoryList (#6784)" (#6800)
[reactos.git] / dll / directx / msvidctl / tuningspace_container.cpp
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS BDA Proxy
4 * FILE: dll/directx/msvidctl/tuningspace_container.cpp
5 * PURPOSE: ITuningSpaceContainer interface
6 *
7 * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@reactos.org)
8 */
9 #define _FORCENAMELESSUNION
10 #include "precomp.h"
11
12
13 class CTuningSpaceContainer : public ITuningSpaceContainer
14 {
15 public:
16
17 STDMETHODIMP QueryInterface( REFIID InterfaceId, PVOID* Interface);
18
19 STDMETHODIMP_(ULONG) AddRef()
20 {
21 InterlockedIncrement(&m_Ref);
22 return m_Ref;
23 }
24 STDMETHODIMP_(ULONG) Release()
25 {
26 InterlockedDecrement(&m_Ref);
27 if (!m_Ref)
28 {
29 OutputDebugStringW(L"CTuningSpaceContainer::Release : delete\n");
30 //delete this;
31 return 0;
32 }
33 return m_Ref;
34 }
35
36 // IDispatch methods
37 HRESULT STDMETHODCALLTYPE GetTypeInfoCount(UINT *pctinfo);
38 HRESULT STDMETHODCALLTYPE GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo);
39 HRESULT STDMETHODCALLTYPE GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId);
40 HRESULT STDMETHODCALLTYPE Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
41
42 //ITuningSpaceContainer methods
43 HRESULT STDMETHODCALLTYPE get_Count(long *Count);
44 HRESULT STDMETHODCALLTYPE get__NewEnum(IEnumVARIANT **NewEnum);
45 HRESULT STDMETHODCALLTYPE get_Item(VARIANT varIndex, ITuningSpace **TuningSpace);
46 HRESULT STDMETHODCALLTYPE put_Item(VARIANT varIndex, ITuningSpace *TuningSpace);
47 HRESULT STDMETHODCALLTYPE TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl);
48 HRESULT STDMETHODCALLTYPE _TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl);
49 HRESULT STDMETHODCALLTYPE TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl);
50 HRESULT STDMETHODCALLTYPE FindID(ITuningSpace *TuningSpace, long *ID);
51 HRESULT STDMETHODCALLTYPE Add(ITuningSpace *TuningSpace, VARIANT *NewIndex);
52 HRESULT STDMETHODCALLTYPE get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum);
53 HRESULT STDMETHODCALLTYPE Remove(VARIANT Index);
54 HRESULT STDMETHODCALLTYPE get_MaxCount(long *MaxCount);
55 HRESULT STDMETHODCALLTYPE put_MaxCount(long MaxCount);
56
57 CTuningSpaceContainer() : m_Ref(0){};
58
59 virtual ~CTuningSpaceContainer(){};
60
61 protected:
62 LONG m_Ref;
63
64 };
65
66 HRESULT
67 STDMETHODCALLTYPE
68 CTuningSpaceContainer::QueryInterface(
69 IN REFIID refiid,
70 OUT PVOID* Output)
71 {
72 if (IsEqualGUID(refiid, IID_IUnknown))
73 {
74 *Output = PVOID(this);
75 reinterpret_cast<IUnknown*>(*Output)->AddRef();
76 return NOERROR;
77 }
78
79 if (IsEqualGUID(refiid, IID_ITuningSpaceContainer))
80 {
81 *Output = (ITuningSpaceContainer*)this;
82 reinterpret_cast<ITuningSpaceContainer*>(*Output)->AddRef();
83 return NOERROR;
84 }
85
86 WCHAR Buffer[MAX_PATH];
87 LPOLESTR lpstr;
88 StringFromCLSID(refiid, &lpstr);
89 swprintf(Buffer, L"CTuningSpaceContainer::QueryInterface: NoInterface for %s", lpstr);
90 OutputDebugStringW(Buffer);
91 CoTaskMemFree(lpstr);
92
93
94 return E_NOINTERFACE;
95 }
96
97 //-------------------------------------------------------------------
98 // IDispatch methods
99 //
100 HRESULT
101 STDMETHODCALLTYPE
102 CTuningSpaceContainer::GetTypeInfoCount(UINT *pctinfo)
103 {
104 OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfoCount : NotImplemented\n");
105 return E_NOTIMPL;
106 }
107
108 HRESULT
109 STDMETHODCALLTYPE
110 CTuningSpaceContainer::GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
111 {
112 OutputDebugStringW(L"CTuningSpaceContainer::GetTypeInfo : NotImplemented\n");
113 return E_NOTIMPL;
114 }
115 HRESULT
116 STDMETHODCALLTYPE
117 CTuningSpaceContainer::GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
118 {
119 OutputDebugStringW(L"CTuningSpaceContainer::GetIDsOfNames : NotImplemented\n");
120 return E_NOTIMPL;
121 }
122 HRESULT
123 STDMETHODCALLTYPE
124 CTuningSpaceContainer::Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
125 {
126 OutputDebugStringW(L"CTuningSpaceContainer::Invoke : NotImplemented\n");
127 return E_NOTIMPL;
128 }
129
130 //-------------------------------------------------------------------
131 // ITuningSpaceContainer methods
132 //
133
134 HRESULT
135 STDMETHODCALLTYPE
136 CTuningSpaceContainer::get_Count(long *Count)
137 {
138 OutputDebugStringW(L"CTuningSpaceContainer::get_Count : NotImplemented\n");
139 return E_NOTIMPL;
140 }
141 HRESULT
142 STDMETHODCALLTYPE
143 CTuningSpaceContainer::get__NewEnum(IEnumVARIANT **NewEnum)
144 {
145 OutputDebugStringW(L"CTuningSpaceContainer::get__NewEnum : NotImplemented\n");
146 return E_NOTIMPL;
147 }
148
149 HRESULT
150 STDMETHODCALLTYPE
151 CTuningSpaceContainer::get_Item(VARIANT varIndex, ITuningSpace **TuningSpace)
152 {
153 #ifdef MSVIDCTL_TRACE
154 WCHAR Buffer[100];
155 swprintf(Buffer, L"CTuningSpaceContainer::get_Item : type %x value %s stub\n", varIndex.vt, varIndex.bstrVal);
156 OutputDebugStringW(Buffer);
157 #endif
158
159 return CTuningSpace_fnConstructor(NULL, IID_ITuningSpace, (void**)TuningSpace);
160 }
161 HRESULT
162 STDMETHODCALLTYPE
163 CTuningSpaceContainer::put_Item(VARIANT varIndex, ITuningSpace *TuningSpace)
164 {
165 OutputDebugStringW(L"CTuningSpaceContainer::put_Item : NotImplemented\n");
166 return E_NOTIMPL;
167 }
168
169 HRESULT
170 STDMETHODCALLTYPE
171 CTuningSpaceContainer::TuningSpacesForCLSID(BSTR SpaceCLSID, ITuningSpaces **NewColl)
172 {
173 OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForCLSID : NotImplemented\n");
174 return E_NOTIMPL;
175 }
176 HRESULT
177 STDMETHODCALLTYPE
178 CTuningSpaceContainer::_TuningSpacesForCLSID(REFCLSID SpaceCLSID, ITuningSpaces **NewColl)
179 {
180 OutputDebugStringW(L"CTuningSpaceContainer::_TuningSpacesForCLSID : NotImplemented\n");
181 return E_NOTIMPL;
182 }
183
184 HRESULT
185 STDMETHODCALLTYPE
186 CTuningSpaceContainer::TuningSpacesForName(BSTR Name, ITuningSpaces **NewColl)
187 {
188 OutputDebugStringW(L"CTuningSpaceContainer::TuningSpacesForName : NotImplemented\n");
189 return E_NOTIMPL;
190 }
191
192 HRESULT
193 STDMETHODCALLTYPE
194 CTuningSpaceContainer::FindID(ITuningSpace *TuningSpace, long *ID)
195 {
196 OutputDebugStringW(L"CTuningSpaceContainer::FindID : NotImplemented\n");
197 return E_NOTIMPL;
198 }
199
200 HRESULT
201 STDMETHODCALLTYPE
202 CTuningSpaceContainer::Add(ITuningSpace *TuningSpace, VARIANT *NewIndex)
203 {
204 OutputDebugStringW(L"CTuningSpaceContainer::Add : stub\n");
205 TuningSpace->AddRef();
206 NewIndex->vt = VT_BSTR;
207 InterlockedIncrement(&m_Ref);
208 return TuningSpace->get_FriendlyName(&NewIndex->bstrVal);;
209 }
210 HRESULT
211 STDMETHODCALLTYPE
212 CTuningSpaceContainer::get_EnumTuningSpaces(IEnumTuningSpaces **ppEnum)
213 {
214 OutputDebugStringW(L"CTuningSpaceContainer::get_EnumTuningSpaces : stub\n");
215 return CEnumTuningSpaces_fnConstructor(NULL, IID_IEnumTuningSpaces, (void**)ppEnum);
216 }
217
218 HRESULT
219 STDMETHODCALLTYPE
220 CTuningSpaceContainer::Remove(VARIANT Index)
221 {
222 OutputDebugStringW(L"CTuningSpaceContainer::Remove: NotImplemented\n");
223 return E_NOTIMPL;
224 }
225
226 HRESULT
227 STDMETHODCALLTYPE
228 CTuningSpaceContainer::get_MaxCount(long *MaxCount)
229 {
230 OutputDebugStringW(L"CTuningSpaceContainer::get_MaxCount : NotImplemented\n");
231 return E_NOTIMPL;
232 }
233
234 HRESULT
235 STDMETHODCALLTYPE
236 CTuningSpaceContainer::put_MaxCount(long MaxCount)
237 {
238 OutputDebugStringW(L"CTuningSpaceContainer::put_MaxCount : NotImplemented\n");
239 return E_NOTIMPL;
240 }
241
242
243 HRESULT
244 WINAPI
245 CTuningSpaceContainer_fnConstructor(
246 IUnknown *pUnknown,
247 REFIID riid,
248 LPVOID * ppv)
249 {
250 // construct device control
251 CTuningSpaceContainer * provider = new CTuningSpaceContainer();
252
253 #ifdef MSVIDCTL_TRACE
254 WCHAR Buffer[MAX_PATH];
255 LPOLESTR lpstr;
256 StringFromCLSID(riid, &lpstr);
257 swprintf(Buffer, L"CTuningSpaceContainer_fnConstructor riid %s pUnknown %p\n", lpstr, pUnknown);
258 OutputDebugStringW(Buffer);
259 #endif
260
261 if (!provider)
262 return E_OUTOFMEMORY;
263
264 if (FAILED(provider->QueryInterface(riid, ppv)))
265 {
266 /* not supported */
267 delete provider;
268 return E_NOINTERFACE;
269 }
270
271 return NOERROR;
272 }