xref: /reactos/dll/win32/ieframe/shelluihelper.c (revision cc439606)
1 /*
2  * Copyright 2012 Jacek Caban for CodeWeavers
3  *
4  * This library is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * This library is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with this library; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
17  */
18 
19 #include "ieframe.h"
20 
21 #include "wine/debug.h"
22 
23 WINE_DEFAULT_DEBUG_CHANNEL(ieframe);
24 
25 struct ShellUIHelper {
26     IShellUIHelper2 IShellUIHelper2_iface;
27     LONG ref;
28 };
29 
30 static inline ShellUIHelper *impl_from_IShellUIHelper2(IShellUIHelper2 *iface)
31 {
32     return CONTAINING_RECORD(iface, ShellUIHelper, IShellUIHelper2_iface);
33 }
34 
35 static HRESULT WINAPI ShellUIHelper2_QueryInterface(IShellUIHelper2 *iface, REFIID riid, void **ppv)
36 {
37     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
38 
39     if(IsEqualGUID(&IID_IUnknown, riid)) {
40         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
41         *ppv = &This->IShellUIHelper2_iface;
42     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
43         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
44         *ppv = &This->IShellUIHelper2_iface;
45     }else if(IsEqualGUID(&IID_IShellUIHelper, riid)) {
46         TRACE("(%p)->(IID_IShellUIHelper %p)\n", This, ppv);
47         *ppv = &This->IShellUIHelper2_iface;
48     }else if(IsEqualGUID(&IID_IShellUIHelper2, riid)) {
49         TRACE("(%p)->(IID_IShellUIHelper2 %p)\n", This, ppv);
50         *ppv = &This->IShellUIHelper2_iface;
51     }else {
52         WARN("(%p)->(%s %p)\n", This, debugstr_guid(riid), ppv);
53         *ppv = NULL;
54         return E_NOINTERFACE;
55     }
56 
57     IUnknown_AddRef((IUnknown*)*ppv);
58     return S_OK;
59 }
60 
61 static ULONG WINAPI ShellUIHelper2_AddRef(IShellUIHelper2 *iface)
62 {
63     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
64     LONG ref = InterlockedIncrement(&This->ref);
65 
66     TRACE("(%p) ref=%d\n", This, ref);
67 
68     return ref;
69 }
70 
71 static ULONG WINAPI ShellUIHelper2_Release(IShellUIHelper2 *iface)
72 {
73     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
74     LONG ref = InterlockedDecrement(&This->ref);
75 
76     TRACE("(%p) ref=%d\n", This, ref);
77 
78     if(!ref)
79         heap_free(This);
80 
81     return ref;
82 }
83 
84 static HRESULT WINAPI ShellUIHelper2_GetTypeInfoCount(IShellUIHelper2 *iface, UINT *pctinfo)
85 {
86     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
87 
88     TRACE("(%p)->(%p)\n", This, pctinfo);
89 
90     *pctinfo = 1;
91     return S_OK;
92 }
93 
94 static HRESULT WINAPI ShellUIHelper2_GetTypeInfo(IShellUIHelper2 *iface, UINT iTInfo, LCID lcid, LPTYPEINFO *ppTInfo)
95 {
96     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
97     FIXME("(%p)->(%d %d %p)\n", This, iTInfo, lcid, ppTInfo);
98     return E_NOTIMPL;
99 }
100 
101 static HRESULT WINAPI ShellUIHelper2_GetIDsOfNames(IShellUIHelper2 *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames,
102         LCID lcid, DISPID *rgDispId)
103 {
104     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
105     unsigned i;
106 
107     FIXME("(%p)->(%s %p %d %d %p)\n", This, debugstr_guid(riid), rgszNames, cNames, lcid, rgDispId);
108     for(i = 0; i < cNames; i++)
109         FIXME("%s\n", debugstr_w(rgszNames[i]));
110 
111     return DISP_E_UNKNOWNNAME;
112 }
113 
114 static HRESULT WINAPI ShellUIHelper2_Invoke(IShellUIHelper2 *iface, DISPID dispIdMember,
115         REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult,
116         EXCEPINFO *pExepInfo, UINT *puArgErr)
117 {
118     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
119     FIXME("(%p)->(%d %s %d %08x %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
120           lcid, wFlags, pDispParams, pVarResult, pExepInfo, puArgErr);
121     return E_NOTIMPL;
122 }
123 
124 static HRESULT WINAPI ShellUIHelper2_ResetFirstBootMode(IShellUIHelper2 *iface)
125 {
126     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
127     FIXME("(%p)->()\n", This);
128     return E_NOTIMPL;
129 }
130 
131 static HRESULT WINAPI ShellUIHelper2_ResetSafeMode(IShellUIHelper2 *iface)
132 {
133     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
134     FIXME("(%p)->()\n", This);
135     return E_NOTIMPL;
136 }
137 
138 static HRESULT WINAPI ShellUIHelper2_RefreshOfflineDesktop(IShellUIHelper2 *iface)
139 {
140     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
141     FIXME("(%p)->()\n", This);
142     return E_NOTIMPL;
143 }
144 
145 static HRESULT WINAPI ShellUIHelper2_AddFavourite(IShellUIHelper2 *iface, BSTR URL, VARIANT *Title)
146 {
147     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
148     FIXME("(%p)->(%s %s)\n", This, debugstr_w(URL), debugstr_variant(Title));
149     return E_NOTIMPL;
150 }
151 
152 static HRESULT WINAPI ShellUIHelper2_AddChannel(IShellUIHelper2 *iface, BSTR URL)
153 {
154     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
155     FIXME("(%p)->(%s)\n", This, debugstr_w(URL));
156     return E_NOTIMPL;
157 }
158 
159 static HRESULT WINAPI ShellUIHelper2_AddDesktopComponent(IShellUIHelper2 *iface, BSTR URL, BSTR Type,
160         VARIANT *Left, VARIANT *Top, VARIANT *Width, VARIANT *Height)
161 {
162     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
163     FIXME("(%p)->(%s %s %s %s %s %s)\n", This, debugstr_w(URL), debugstr_w(Type), debugstr_variant(Left),
164           debugstr_variant(Top), debugstr_variant(Width), debugstr_variant(Height));
165     return E_NOTIMPL;
166 }
167 
168 static HRESULT WINAPI ShellUIHelper2_IsSubscribed(IShellUIHelper2 *iface, BSTR URL, VARIANT_BOOL *pBool)
169 {
170     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
171     FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pBool);
172     return E_NOTIMPL;
173 }
174 
175 static HRESULT WINAPI ShellUIHelper2_NavigateAndFind(IShellUIHelper2 *iface, BSTR URL, BSTR strQuery, VARIANT *varTargetFrame)
176 {
177     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
178     FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(URL), debugstr_w(strQuery), debugstr_variant(varTargetFrame));
179     return E_NOTIMPL;
180 }
181 
182 static HRESULT WINAPI ShellUIHelper2_ImportExportFavourites(IShellUIHelper2 *iface, VARIANT_BOOL fImport, BSTR strImpExpPath)
183 {
184     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
185     FIXME("(%p)->(%x %s)\n", This, fImport, debugstr_w(strImpExpPath));
186     return E_NOTIMPL;
187 }
188 
189 static HRESULT WINAPI ShellUIHelper2_AutoCompleteSaveForm(IShellUIHelper2 *iface, VARIANT *Form)
190 {
191     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
192     FIXME("(%p)->(%s)\n", This, debugstr_variant(Form));
193     return E_NOTIMPL;
194 }
195 
196 static HRESULT WINAPI ShellUIHelper2_AutoScan(IShellUIHelper2 *iface, BSTR strSearch, BSTR strFailureUrl, VARIANT *pvarTargetFrame)
197 {
198     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
199     FIXME("(%p)->(%s %s %s)\n", This, debugstr_w(strSearch), debugstr_w(strFailureUrl), debugstr_variant(pvarTargetFrame));
200     return E_NOTIMPL;
201 }
202 
203 static HRESULT WINAPI ShellUIHelper2_AutoCompleteAttach(IShellUIHelper2 *iface, VARIANT *Reserved)
204 {
205     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
206     FIXME("(%p)->(%s)\n", This, debugstr_variant(Reserved));
207     return E_NOTIMPL;
208 }
209 
210 static HRESULT WINAPI ShellUIHelper2_ShowBrowserUI(IShellUIHelper2 *iface, BSTR bstrName, VARIANT *pvarIn, VARIANT *pvarOut)
211 {
212     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
213     FIXME("(%p)->(%s %s %p)\n", This, debugstr_w(bstrName), debugstr_variant(pvarIn), pvarOut);
214     return E_NOTIMPL;
215 }
216 
217 static HRESULT WINAPI ShellUIHelper2_AddSearchProvider(IShellUIHelper2 *iface, BSTR URL)
218 {
219     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
220     FIXME("(%p)->(%s)\n", This, debugstr_w(URL));
221     return E_NOTIMPL;
222 }
223 
224 static HRESULT WINAPI ShellUIHelper2_RunOnceShown(IShellUIHelper2 *iface)
225 {
226     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
227     FIXME("(%p)->()\n", This);
228     return E_NOTIMPL;
229 }
230 
231 static HRESULT WINAPI ShellUIHelper2_SkipRunOnce(IShellUIHelper2 *iface)
232 {
233     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
234     FIXME("(%p)->()\n", This);
235     return E_NOTIMPL;
236 }
237 
238 static HRESULT WINAPI ShellUIHelper2_CustomizeSettings(IShellUIHelper2 *iface, VARIANT_BOOL fSQM,
239         VARIANT_BOOL fPhishing, BSTR bstrLocale)
240 {
241     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
242     FIXME("(%p)->(%x %x %s)\n", This, fSQM, fPhishing, debugstr_w(bstrLocale));
243     return E_NOTIMPL;
244 }
245 
246 static HRESULT WINAPI ShellUIHelper2_SqmEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled)
247 {
248     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
249     FIXME("(%p)->(%p)\n", This, pfEnabled);
250     return E_NOTIMPL;
251 }
252 
253 static HRESULT WINAPI ShellUIHelper2_PhishingEnabled(IShellUIHelper2 *iface, VARIANT_BOOL *pfEnabled)
254 {
255     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
256     FIXME("(%p)->(%p)\n", This, pfEnabled);
257     return E_NOTIMPL;
258 }
259 
260 static HRESULT WINAPI ShellUIHelper2_BrandImageUri(IShellUIHelper2 *iface, BSTR *pbstrUri)
261 {
262     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
263     FIXME("(%p)->(%p)\n", This, pbstrUri);
264     return E_NOTIMPL;
265 }
266 
267 static HRESULT WINAPI ShellUIHelper2_SkipTabsWelcome(IShellUIHelper2 *iface)
268 {
269     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
270     FIXME("(%p)->()\n", This);
271     return E_NOTIMPL;
272 }
273 
274 static HRESULT WINAPI ShellUIHelper2_DiagnoseConnection(IShellUIHelper2 *iface)
275 {
276     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
277     FIXME("(%p)->()\n", This);
278     return E_NOTIMPL;
279 }
280 
281 static HRESULT WINAPI ShellUIHelper2_CustomizeClearType(IShellUIHelper2 *iface, VARIANT_BOOL fSet)
282 {
283     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
284     FIXME("(%p)->(%x)\n", This, fSet);
285     return E_NOTIMPL;
286 }
287 
288 static HRESULT WINAPI ShellUIHelper2_IsSearchProviderInstalled(IShellUIHelper2 *iface, BSTR URL, DWORD *pdwResult)
289 {
290     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
291     FIXME("(%p)->(%s %p)\n", This, debugstr_w(URL), pdwResult);
292     return E_NOTIMPL;
293 }
294 
295 static HRESULT WINAPI ShellUIHelper2_IsSearchMigrated(IShellUIHelper2 *iface, VARIANT_BOOL *pfMigrated)
296 {
297     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
298     FIXME("(%p)->(%p)\n", This, pfMigrated);
299     return E_NOTIMPL;
300 }
301 
302 static HRESULT WINAPI ShellUIHelper2_DefaultSearchProvider(IShellUIHelper2 *iface, BSTR *pbstrName)
303 {
304     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
305     FIXME("(%p)->(%p)\n", This, pbstrName);
306     return E_NOTIMPL;
307 }
308 
309 static HRESULT WINAPI ShellUIHelper2_RunOnceRequiredSettingsComplete(IShellUIHelper2 *iface, VARIANT_BOOL fComplete)
310 {
311     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
312     FIXME("(%p)->(%x)\n", This, fComplete);
313     return E_NOTIMPL;
314 }
315 
316 static HRESULT WINAPI ShellUIHelper2_RunOnceHasShown(IShellUIHelper2 *iface, VARIANT_BOOL *pfShown)
317 {
318     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
319     FIXME("(%p)->(%p)\n", This, pfShown);
320     return E_NOTIMPL;
321 }
322 
323 static HRESULT WINAPI ShellUIHelper2_SearchGuideUrl(IShellUIHelper2 *iface, BSTR *pbstrUrl)
324 {
325     ShellUIHelper *This = impl_from_IShellUIHelper2(iface);
326     FIXME("(%p)->(%p)\n", This, pbstrUrl);
327     return E_NOTIMPL;
328 }
329 
330 static const IShellUIHelper2Vtbl ShellUIHelper2Vtbl = {
331     ShellUIHelper2_QueryInterface,
332     ShellUIHelper2_AddRef,
333     ShellUIHelper2_Release,
334     ShellUIHelper2_GetTypeInfoCount,
335     ShellUIHelper2_GetTypeInfo,
336     ShellUIHelper2_GetIDsOfNames,
337     ShellUIHelper2_Invoke,
338     ShellUIHelper2_ResetFirstBootMode,
339     ShellUIHelper2_ResetSafeMode,
340     ShellUIHelper2_RefreshOfflineDesktop,
341     ShellUIHelper2_AddFavourite,
342     ShellUIHelper2_AddChannel,
343     ShellUIHelper2_AddDesktopComponent,
344     ShellUIHelper2_IsSubscribed,
345     ShellUIHelper2_NavigateAndFind,
346     ShellUIHelper2_ImportExportFavourites,
347     ShellUIHelper2_AutoCompleteSaveForm,
348     ShellUIHelper2_AutoScan,
349     ShellUIHelper2_AutoCompleteAttach,
350     ShellUIHelper2_ShowBrowserUI,
351     ShellUIHelper2_AddSearchProvider,
352     ShellUIHelper2_RunOnceShown,
353     ShellUIHelper2_SkipRunOnce,
354     ShellUIHelper2_CustomizeSettings,
355     ShellUIHelper2_SqmEnabled,
356     ShellUIHelper2_PhishingEnabled,
357     ShellUIHelper2_BrandImageUri,
358     ShellUIHelper2_SkipTabsWelcome,
359     ShellUIHelper2_DiagnoseConnection,
360     ShellUIHelper2_CustomizeClearType,
361     ShellUIHelper2_IsSearchProviderInstalled,
362     ShellUIHelper2_IsSearchMigrated,
363     ShellUIHelper2_DefaultSearchProvider,
364     ShellUIHelper2_RunOnceRequiredSettingsComplete,
365     ShellUIHelper2_RunOnceHasShown,
366     ShellUIHelper2_SearchGuideUrl
367 };
368 
369 HRESULT create_shell_ui_helper(IShellUIHelper2 **_ret)
370 {
371     ShellUIHelper *ret;
372 
373     ret = heap_alloc(sizeof(*ret));
374     if(!ret)
375         return E_OUTOFMEMORY;
376 
377     ret->IShellUIHelper2_iface.lpVtbl = &ShellUIHelper2Vtbl;
378     ret->ref = 1;
379 
380     *_ret = &ret->IShellUIHelper2_iface;
381     return S_OK;
382 }
383