setupapi: Implement SetupDiCreateDevRegKeyW.
[wine] / dlls / mshtml / htmlstylesheet.c
1 /*
2  * Copyright 2006 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 "config.h"
20
21 #include <stdarg.h>
22 #include <stdio.h>
23
24 #define COBJMACROS
25
26 #include "windef.h"
27 #include "winbase.h"
28 #include "winuser.h"
29 #include "winnls.h"
30 #include "ole2.h"
31
32 #include "wine/debug.h"
33 #include "wine/unicode.h"
34
35 #include "mshtml_private.h"
36
37 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
38
39 typedef struct {
40     const IHTMLStyleSheetVtbl *lpHTMLStyleSheetVtbl;
41     LONG ref;
42 } HTMLStyleSheet;
43
44 typedef struct {
45     const IHTMLStyleSheetsCollectionVtbl *lpHTMLStyleSheetsCollectionVtbl;
46
47     LONG ref;
48
49     nsIDOMStyleSheetList *nslist;
50 } HTMLStyleSheetsCollection;
51
52 #define HTMLSTYLESHEET(x)      ((IHTMLStyleSheet*)             &(x)->lpHTMLStyleSheetVtbl);
53 #define HTMLSTYLESHEETSCOL(x)  ((IHTMLStyleSheetsCollection*)  &(x)->lpHTMLStyleSheetsCollectionVtbl);
54
55 #define HTMLSTYLESHEETSCOL_THIS(iface) \
56     DEFINE_THIS(HTMLStyleSheetsCollection, HTMLStyleSheetsCollection, iface)
57
58 static HRESULT WINAPI HTMLStyleSheetsCollection_QueryInterface(IHTMLStyleSheetsCollection *iface,
59          REFIID riid, void **ppv)
60 {
61     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
62
63     *ppv = NULL;
64
65     if(IsEqualGUID(&IID_IUnknown, riid)) {
66         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
67         *ppv = HTMLSTYLESHEETSCOL(This);
68     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
69         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
70         *ppv = HTMLSTYLESHEETSCOL(This);
71     }else if(IsEqualGUID(&IID_IHTMLStyleSheetsCollection, riid)) {
72         TRACE("(%p)->(IID_IHTMLStyleSheetsCollection %p)\n", This, ppv);
73         *ppv = HTMLSTYLESHEETSCOL(This);
74     }
75
76     if(*ppv) {
77         IUnknown_AddRef((IUnknown*)*ppv);
78         return S_OK;
79     }
80
81     WARN("unsupported %s\n", debugstr_guid(riid));
82     return E_NOINTERFACE;
83 }
84
85 static ULONG WINAPI HTMLStyleSheetsCollection_AddRef(IHTMLStyleSheetsCollection *iface)
86 {
87     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
88     LONG ref = InterlockedIncrement(&This->ref);
89
90     TRACE("(%p) ref=%d\n", This, ref);
91
92     return ref;
93 }
94
95 static ULONG WINAPI HTMLStyleSheetsCollection_Release(IHTMLStyleSheetsCollection *iface)
96 {
97     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
98     LONG ref = InterlockedDecrement(&This->ref);
99
100     TRACE("(%p) ref=%d\n", This, ref);
101
102     if(!ref)
103         mshtml_free(This);
104
105     return ref;
106 }
107
108 static HRESULT WINAPI HTMLStyleSheetsCollection_GetTypeInfoCount(IHTMLStyleSheetsCollection *iface,
109         UINT *pctinfo)
110 {
111     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
112     FIXME("(%p)->(%p)\n", This, pctinfo);
113     return E_NOTIMPL;
114 }
115
116 static HRESULT WINAPI HTMLStyleSheetsCollection_GetTypeInfo(IHTMLStyleSheetsCollection *iface,
117         UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
118 {
119     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
120     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
121     return E_NOTIMPL;
122 }
123
124 static HRESULT WINAPI HTMLStyleSheetsCollection_GetIDsOfNames(IHTMLStyleSheetsCollection *iface,
125         REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
126 {
127     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
128     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
129           lcid, rgDispId);
130     return E_NOTIMPL;
131 }
132
133 static HRESULT WINAPI HTMLStyleSheetsCollection_Invoke(IHTMLStyleSheetsCollection *iface,
134         DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
135         VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
136 {
137     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
138     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
139           lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
140     return E_NOTIMPL;
141 }
142
143 static HRESULT WINAPI HTMLStyleSheetsCollection_get_length(IHTMLStyleSheetsCollection *iface,
144         long *p)
145 {
146     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
147     PRUint32 len = 0;
148
149     TRACE("(%p)->(%p)\n", This, p);
150
151     if(This->nslist)
152         nsIDOMStyleSheetList_GetLength(This->nslist, &len);
153
154     *p = len;
155     return S_OK;
156 }
157
158 static HRESULT WINAPI HTMLStyleSheetsCollection_get__newEnum(IHTMLStyleSheetsCollection *iface,
159         IUnknown **p)
160 {
161     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
162     FIXME("(%p)->(%p)\n", This, p);
163     return E_NOTIMPL;
164 }
165
166 static HRESULT WINAPI HTMLStyleSheetsCollection_item(IHTMLStyleSheetsCollection *iface,
167         VARIANT *pvarIndex, VARIANT *pvarResult)
168 {
169     HTMLStyleSheetsCollection *This = HTMLSTYLESHEETSCOL_THIS(iface);
170     FIXME("(%p)->(%p %p)\n", This, pvarIndex, pvarResult);
171     return E_NOTIMPL;
172 }
173
174 #undef HTMLSTYLESHEETSCOL_THIS
175
176 static const IHTMLStyleSheetsCollectionVtbl HTMLStyleSheetsCollectionVtbl = {
177     HTMLStyleSheetsCollection_QueryInterface,
178     HTMLStyleSheetsCollection_AddRef,
179     HTMLStyleSheetsCollection_Release,
180     HTMLStyleSheetsCollection_GetTypeInfoCount,
181     HTMLStyleSheetsCollection_GetTypeInfo,
182     HTMLStyleSheetsCollection_GetIDsOfNames,
183     HTMLStyleSheetsCollection_Invoke,
184     HTMLStyleSheetsCollection_get_length,
185     HTMLStyleSheetsCollection_get__newEnum,
186     HTMLStyleSheetsCollection_item
187 };
188
189 IHTMLStyleSheetsCollection *HTMLStyleSheetsCollection_Create(nsIDOMStyleSheetList *nslist)
190 {
191     HTMLStyleSheetsCollection *ret = mshtml_alloc(sizeof(HTMLStyleSheetsCollection));
192
193     ret->lpHTMLStyleSheetsCollectionVtbl = &HTMLStyleSheetsCollectionVtbl;
194     ret->ref = 1;
195
196     if(nslist)
197         nsIDOMStyleSheetList_AddRef(nslist);
198     ret->nslist = nslist;
199
200     return HTMLSTYLESHEETSCOL(ret);
201 }
202
203 #define HTMLSTYLESHEET_THIS(iface) DEFINE_THIS(HTMLStyleSheet, HTMLStyleSheet, iface)
204
205 static HRESULT WINAPI HTMLStyleSheet_QueryInterface(IHTMLStyleSheet *iface, REFIID riid, void **ppv)
206 {
207     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
208
209     *ppv = NULL;
210
211     if(IsEqualGUID(&IID_IUnknown, riid)) {
212         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
213         *ppv = HTMLSTYLESHEET(This);
214     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
215         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
216         *ppv = HTMLSTYLESHEET(This);
217     }else if(IsEqualGUID(&IID_IHTMLStyleSheet, riid)) {
218         TRACE("(%p)->(IID_IHTMLStyleSheet %p)\n", This, ppv);
219         *ppv = HTMLSTYLESHEET(This);
220     }
221
222     if(*ppv) {
223         IUnknown_AddRef((IUnknown*)*ppv);
224         return S_OK;
225     }
226
227     WARN("unsupported %s\n", debugstr_guid(riid));
228     return E_NOINTERFACE;
229 }
230
231 static ULONG WINAPI HTMLStyleSheet_AddRef(IHTMLStyleSheet *iface)
232 {
233     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
234     LONG ref = InterlockedIncrement(&This->ref);
235
236     TRACE("(%p) ref=%d\n", This, ref);
237
238     return ref;
239 }
240
241 static ULONG WINAPI HTMLStyleSheet_Release(IHTMLStyleSheet *iface)
242 {
243     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
244     LONG ref = InterlockedDecrement(&This->ref);
245
246     TRACE("(%p) ref=%d\n", This, ref);
247
248     if(!ref)
249         mshtml_free(This);
250
251     return ref;
252 }
253
254 static HRESULT WINAPI HTMLStyleSheet_GetTypeInfoCount(IHTMLStyleSheet *iface, UINT *pctinfo)
255 {
256     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
257     FIXME("(%p)->(%p)\n", This, pctinfo);
258     return E_NOTIMPL;
259 }
260
261 static HRESULT WINAPI HTMLStyleSheet_GetTypeInfo(IHTMLStyleSheet *iface, UINT iTInfo,
262                                               LCID lcid, ITypeInfo **ppTInfo)
263 {
264     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
265     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
266     return E_NOTIMPL;
267 }
268
269 static HRESULT WINAPI HTMLStyleSheet_GetIDsOfNames(IHTMLStyleSheet *iface, REFIID riid,
270                                                 LPOLESTR *rgszNames, UINT cNames,
271                                                 LCID lcid, DISPID *rgDispId)
272 {
273     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
274     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
275           lcid, rgDispId);
276     return E_NOTIMPL;
277 }
278
279 static HRESULT WINAPI HTMLStyleSheet_Invoke(IHTMLStyleSheet *iface, DISPID dispIdMember,
280                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
281                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
282 {
283     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
284     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
285           lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
286     return E_NOTIMPL;
287 }
288
289 static HRESULT WINAPI HTMLStyleSheet_put_title(IHTMLStyleSheet *iface, BSTR v)
290 {
291     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
292     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
293     return E_NOTIMPL;
294 }
295
296 static HRESULT WINAPI HTMLStyleSheet_get_title(IHTMLStyleSheet *iface, BSTR *p)
297 {
298     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
299     FIXME("(%p)->(%p)\n", This, p);
300     return E_NOTIMPL;
301 }
302
303 static HRESULT WINAPI HTMLStyleSheet_get_parentStyleSheet(IHTMLStyleSheet *iface,
304                                                           IHTMLStyleSheet **p)
305 {
306     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
307     FIXME("(%p)->(%p)\n", This, p);
308     return E_NOTIMPL;
309 }
310
311 static HRESULT WINAPI HTMLStyleSheet_get_owningElement(IHTMLStyleSheet *iface, IHTMLElement **p)
312 {
313     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
314     FIXME("(%p)->(%p)\n", This, p);
315     return E_NOTIMPL;
316 }
317
318 static HRESULT WINAPI HTMLStyleSheet_put_disabled(IHTMLStyleSheet *iface, VARIANT_BOOL v)
319 {
320     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
321     FIXME("(%p)->(%x)\n", This, v);
322     return E_NOTIMPL;
323 }
324
325 static HRESULT WINAPI HTMLStyleSheet_get_disabled(IHTMLStyleSheet *iface, VARIANT_BOOL *p)
326 {
327     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
328     FIXME("(%p)->(%p)\n", This, p);
329     return E_NOTIMPL;
330 }
331
332 static HRESULT WINAPI HTMLStyleSheet_get_readOnly(IHTMLStyleSheet *iface, VARIANT_BOOL *p)
333 {
334     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
335     FIXME("(%p)->(%p)\n", This, p);
336     return E_NOTIMPL;
337 }
338
339 static HRESULT WINAPI HTMLStyleSheet_get_imports(IHTMLStyleSheet *iface,
340                                                  IHTMLStyleSheetsCollection **p)
341 {
342     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
343     FIXME("(%p)->(%p)\n", This, p);
344     return E_NOTIMPL;
345 }
346
347 static HRESULT WINAPI HTMLStyleSheet_put_href(IHTMLStyleSheet *iface, BSTR v)
348 {
349     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
350     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
351     return E_NOTIMPL;
352 }
353
354 static HRESULT WINAPI HTMLStyleSheet_get_href(IHTMLStyleSheet *iface, BSTR *p)
355 {
356     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
357     FIXME("(%p)->(%p)\n", This, p);
358     return E_NOTIMPL;
359 }
360
361 static HRESULT WINAPI HTMLStyleSheet_get_type(IHTMLStyleSheet *iface, BSTR *p)
362 {
363     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
364     FIXME("(%p)->(%p)\n", This, p);
365     return E_NOTIMPL;
366 }
367
368 static HRESULT WINAPI HTMLStyleSheet_get_id(IHTMLStyleSheet *iface, BSTR *p)
369 {
370     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
371     FIXME("(%p)->(%p)\n", This, p);
372     return E_NOTIMPL;
373 }
374
375 static HRESULT WINAPI HTMLStyleSheet_addImport(IHTMLStyleSheet *iface, BSTR bstrURL,
376                                                long lIndex, long *plIndex)
377 {
378     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
379     FIXME("(%p)->(%s %ld %p)\n", This, debugstr_w(bstrURL), lIndex, plIndex);
380     return E_NOTIMPL;
381 }
382
383 static HRESULT WINAPI HTMLStyleSheet_addRule(IHTMLStyleSheet *iface, BSTR bstrSelector,
384                                              BSTR bstrStyle, long lIndex, long *plIndex)
385 {
386     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
387     FIXME("(%p)->(%s %s %ld %p)\n", This, debugstr_w(bstrSelector), debugstr_w(bstrStyle),
388           lIndex, plIndex);
389     return E_NOTIMPL;
390 }
391
392 static HRESULT WINAPI HTMLStyleSheet_removeImport(IHTMLStyleSheet *iface, long lIndex)
393 {
394     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
395     FIXME("(%p)->(%ld)\n", This, lIndex);
396     return E_NOTIMPL;
397 }
398
399 static HRESULT WINAPI HTMLStyleSheet_removeRule(IHTMLStyleSheet *iface, long lIndex)
400 {
401     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
402     FIXME("(%p)->(%ld)\n", This, lIndex);
403     return E_NOTIMPL;
404 }
405
406 static HRESULT WINAPI HTMLStyleSheet_put_media(IHTMLStyleSheet *iface, BSTR v)
407 {
408     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
409     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
410     return E_NOTIMPL;
411 }
412
413 static HRESULT WINAPI HTMLStyleSheet_get_media(IHTMLStyleSheet *iface, BSTR *p)
414 {
415     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
416     FIXME("(%p)->(%p)\n", This, p);
417     return E_NOTIMPL;
418 }
419
420 static HRESULT WINAPI HTMLStyleSheet_put_cssText(IHTMLStyleSheet *iface, BSTR v)
421 {
422     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
423     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
424     return E_NOTIMPL;
425 }
426
427 static HRESULT WINAPI HTMLStyleSheet_get_cssText(IHTMLStyleSheet *iface, BSTR *p)
428 {
429     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
430     FIXME("(%p)->(%p)\n", This, p);
431     return E_NOTIMPL;
432 }
433
434 static HRESULT WINAPI HTMLStyleSheet_get_rules(IHTMLStyleSheet *iface,
435                                                IHTMLStyleSheetRulesCollection **p)
436 {
437     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
438     FIXME("(%p)->(%p)\n", This, p);
439     return E_NOTIMPL;
440 }
441
442 static const IHTMLStyleSheetVtbl HTMLStyleSheetVtbl = {
443     HTMLStyleSheet_QueryInterface,
444     HTMLStyleSheet_AddRef,
445     HTMLStyleSheet_Release,
446     HTMLStyleSheet_GetTypeInfoCount,
447     HTMLStyleSheet_GetTypeInfo,
448     HTMLStyleSheet_GetIDsOfNames,
449     HTMLStyleSheet_Invoke,
450     HTMLStyleSheet_put_title,
451     HTMLStyleSheet_get_title,
452     HTMLStyleSheet_get_parentStyleSheet,
453     HTMLStyleSheet_get_owningElement,
454     HTMLStyleSheet_put_disabled,
455     HTMLStyleSheet_get_disabled,
456     HTMLStyleSheet_get_readOnly,
457     HTMLStyleSheet_get_imports,
458     HTMLStyleSheet_put_href,
459     HTMLStyleSheet_get_href,
460     HTMLStyleSheet_get_type,
461     HTMLStyleSheet_get_id,
462     HTMLStyleSheet_addImport,
463     HTMLStyleSheet_addRule,
464     HTMLStyleSheet_removeImport,
465     HTMLStyleSheet_removeRule,
466     HTMLStyleSheet_put_media,
467     HTMLStyleSheet_get_media,
468     HTMLStyleSheet_put_cssText,
469     HTMLStyleSheet_get_cssText,
470     HTMLStyleSheet_get_rules
471 };
472
473 IHTMLStyleSheet *HTMLStyleSheet_Create(void)
474 {
475     HTMLStyleSheet *ret = mshtml_alloc(sizeof(HTMLStyleSheet));
476
477     ret->lpHTMLStyleSheetVtbl = &HTMLStyleSheetVtbl;
478     ret->ref = 1;
479
480     return HTMLSTYLESHEET(ret);
481 }