advapi32: Explicitly initialize nested array element.
[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 #define HTMLSTYLESHEET(x)  ((IHTMLStyleSheet*) &(x)->lpHTMLStyleSheetVtbl);
45
46 #define HTMLSTYLESHEET_THIS(iface) DEFINE_THIS(HTMLStyleSheet, HTMLStyleSheet, iface)
47
48 static HRESULT WINAPI HTMLStyleSheet_QueryInterface(IHTMLStyleSheet *iface, REFIID riid, void **ppv)
49 {
50     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
51
52     *ppv = NULL;
53
54     if(IsEqualGUID(&IID_IUnknown, riid)) {
55         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
56         *ppv = HTMLSTYLESHEET(This);
57     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
58         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
59         *ppv = HTMLSTYLESHEET(This);
60     }else if(IsEqualGUID(&IID_IHTMLStyleSheet, riid)) {
61         TRACE("(%p)->(IID_IHTMLStyleSheet %p)\n", This, ppv);
62         *ppv = HTMLSTYLESHEET(This);
63     }
64
65     if(*ppv) {
66         IUnknown_AddRef((IUnknown*)*ppv);
67         return S_OK;
68     }
69
70     WARN("unsupported %s\n", debugstr_guid(riid));
71     return E_NOINTERFACE;
72 }
73
74 static ULONG WINAPI HTMLStyleSheet_AddRef(IHTMLStyleSheet *iface)
75 {
76     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
77     LONG ref = InterlockedIncrement(&This->ref);
78
79     TRACE("(%p) ref=%d\n", This, ref);
80
81     return ref;
82 }
83
84 static ULONG WINAPI HTMLStyleSheet_Release(IHTMLStyleSheet *iface)
85 {
86     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
87     LONG ref = InterlockedDecrement(&This->ref);
88
89     TRACE("(%p) ref=%d\n", This, ref);
90
91     if(!ref)
92         mshtml_free(This);
93
94     return ref;
95 }
96
97 static HRESULT WINAPI HTMLStyleSheet_GetTypeInfoCount(IHTMLStyleSheet *iface, UINT *pctinfo)
98 {
99     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
100     FIXME("(%p)->(%p)\n", This, pctinfo);
101     return E_NOTIMPL;
102 }
103
104 static HRESULT WINAPI HTMLStyleSheet_GetTypeInfo(IHTMLStyleSheet *iface, UINT iTInfo,
105                                               LCID lcid, ITypeInfo **ppTInfo)
106 {
107     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
108     FIXME("(%p)->(%u %u %p)\n", This, iTInfo, lcid, ppTInfo);
109     return E_NOTIMPL;
110 }
111
112 static HRESULT WINAPI HTMLStyleSheet_GetIDsOfNames(IHTMLStyleSheet *iface, REFIID riid,
113                                                 LPOLESTR *rgszNames, UINT cNames,
114                                                 LCID lcid, DISPID *rgDispId)
115 {
116     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
117     FIXME("(%p)->(%s %p %u %u %p)\n", This, debugstr_guid(riid), rgszNames, cNames,
118           lcid, rgDispId);
119     return E_NOTIMPL;
120 }
121
122 static HRESULT WINAPI HTMLStyleSheet_Invoke(IHTMLStyleSheet *iface, DISPID dispIdMember,
123                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
124                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
125 {
126     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
127     FIXME("(%p)->(%d %s %d %d %p %p %p %p)\n", This, dispIdMember, debugstr_guid(riid),
128           lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
129     return E_NOTIMPL;
130 }
131
132 static HRESULT WINAPI HTMLStyleSheet_put_title(IHTMLStyleSheet *iface, BSTR v)
133 {
134     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
135     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
136     return E_NOTIMPL;
137 }
138
139 static HRESULT WINAPI HTMLStyleSheet_get_title(IHTMLStyleSheet *iface, BSTR *p)
140 {
141     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
142     FIXME("(%p)->(%p)\n", This, p);
143     return E_NOTIMPL;
144 }
145
146 static HRESULT WINAPI HTMLStyleSheet_get_parentStyleSheet(IHTMLStyleSheet *iface,
147                                                           IHTMLStyleSheet **p)
148 {
149     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
150     FIXME("(%p)->(%p)\n", This, p);
151     return E_NOTIMPL;
152 }
153
154 static HRESULT WINAPI HTMLStyleSheet_get_owningElement(IHTMLStyleSheet *iface, IHTMLElement **p)
155 {
156     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
157     FIXME("(%p)->(%p)\n", This, p);
158     return E_NOTIMPL;
159 }
160
161 static HRESULT WINAPI HTMLStyleSheet_put_disabled(IHTMLStyleSheet *iface, VARIANT_BOOL v)
162 {
163     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
164     FIXME("(%p)->(%x)\n", This, v);
165     return E_NOTIMPL;
166 }
167
168 static HRESULT WINAPI HTMLStyleSheet_get_disabled(IHTMLStyleSheet *iface, VARIANT_BOOL *p)
169 {
170     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
171     FIXME("(%p)->(%p)\n", This, p);
172     return E_NOTIMPL;
173 }
174
175 static HRESULT WINAPI HTMLStyleSheet_get_readOnly(IHTMLStyleSheet *iface, VARIANT_BOOL *p)
176 {
177     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
178     FIXME("(%p)->(%p)\n", This, p);
179     return E_NOTIMPL;
180 }
181
182 static HRESULT WINAPI HTMLStyleSheet_get_imports(IHTMLStyleSheet *iface,
183                                                  IHTMLStyleSheetsCollection **p)
184 {
185     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
186     FIXME("(%p)->(%p)\n", This, p);
187     return E_NOTIMPL;
188 }
189
190 static HRESULT WINAPI HTMLStyleSheet_put_href(IHTMLStyleSheet *iface, BSTR v)
191 {
192     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
193     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
194     return E_NOTIMPL;
195 }
196
197 static HRESULT WINAPI HTMLStyleSheet_get_href(IHTMLStyleSheet *iface, BSTR *p)
198 {
199     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
200     FIXME("(%p)->(%p)\n", This, p);
201     return E_NOTIMPL;
202 }
203
204 static HRESULT WINAPI HTMLStyleSheet_get_type(IHTMLStyleSheet *iface, BSTR *p)
205 {
206     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
207     FIXME("(%p)->(%p)\n", This, p);
208     return E_NOTIMPL;
209 }
210
211 static HRESULT WINAPI HTMLStyleSheet_get_id(IHTMLStyleSheet *iface, BSTR *p)
212 {
213     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
214     FIXME("(%p)->(%p)\n", This, p);
215     return E_NOTIMPL;
216 }
217
218 static HRESULT WINAPI HTMLStyleSheet_addImport(IHTMLStyleSheet *iface, BSTR bstrURL,
219                                                long lIndex, long *plIndex)
220 {
221     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
222     FIXME("(%p)->(%s %ld %p)\n", This, debugstr_w(bstrURL), lIndex, plIndex);
223     return E_NOTIMPL;
224 }
225
226 static HRESULT WINAPI HTMLStyleSheet_addRule(IHTMLStyleSheet *iface, BSTR bstrSelector,
227                                              BSTR bstrStyle, long lIndex, long *plIndex)
228 {
229     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
230     FIXME("(%p)->(%s %s %ld %p)\n", This, debugstr_w(bstrSelector), debugstr_w(bstrStyle),
231           lIndex, plIndex);
232     return E_NOTIMPL;
233 }
234
235 static HRESULT WINAPI HTMLStyleSheet_removeImport(IHTMLStyleSheet *iface, long lIndex)
236 {
237     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
238     FIXME("(%p)->(%ld)\n", This, lIndex);
239     return E_NOTIMPL;
240 }
241
242 static HRESULT WINAPI HTMLStyleSheet_removeRule(IHTMLStyleSheet *iface, long lIndex)
243 {
244     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
245     FIXME("(%p)->(%ld)\n", This, lIndex);
246     return E_NOTIMPL;
247 }
248
249 static HRESULT WINAPI HTMLStyleSheet_put_media(IHTMLStyleSheet *iface, BSTR v)
250 {
251     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
252     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
253     return E_NOTIMPL;
254 }
255
256 static HRESULT WINAPI HTMLStyleSheet_get_media(IHTMLStyleSheet *iface, BSTR *p)
257 {
258     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
259     FIXME("(%p)->(%p)\n", This, p);
260     return E_NOTIMPL;
261 }
262
263 static HRESULT WINAPI HTMLStyleSheet_put_cssText(IHTMLStyleSheet *iface, BSTR v)
264 {
265     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
266     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
267     return E_NOTIMPL;
268 }
269
270 static HRESULT WINAPI HTMLStyleSheet_get_cssText(IHTMLStyleSheet *iface, BSTR *p)
271 {
272     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
273     FIXME("(%p)->(%p)\n", This, p);
274     return E_NOTIMPL;
275 }
276
277 static HRESULT WINAPI HTMLStyleSheet_get_rules(IHTMLStyleSheet *iface,
278                                                IHTMLStyleSheetRulesCollection **p)
279 {
280     HTMLStyleSheet *This = HTMLSTYLESHEET_THIS(iface);
281     FIXME("(%p)->(%p)\n", This, p);
282     return E_NOTIMPL;
283 }
284
285 static const IHTMLStyleSheetVtbl HTMLStyleSheetVtbl = {
286     HTMLStyleSheet_QueryInterface,
287     HTMLStyleSheet_AddRef,
288     HTMLStyleSheet_Release,
289     HTMLStyleSheet_GetTypeInfoCount,
290     HTMLStyleSheet_GetTypeInfo,
291     HTMLStyleSheet_GetIDsOfNames,
292     HTMLStyleSheet_Invoke,
293     HTMLStyleSheet_put_title,
294     HTMLStyleSheet_get_title,
295     HTMLStyleSheet_get_parentStyleSheet,
296     HTMLStyleSheet_get_owningElement,
297     HTMLStyleSheet_put_disabled,
298     HTMLStyleSheet_get_disabled,
299     HTMLStyleSheet_get_readOnly,
300     HTMLStyleSheet_get_imports,
301     HTMLStyleSheet_put_href,
302     HTMLStyleSheet_get_href,
303     HTMLStyleSheet_get_type,
304     HTMLStyleSheet_get_id,
305     HTMLStyleSheet_addImport,
306     HTMLStyleSheet_addRule,
307     HTMLStyleSheet_removeImport,
308     HTMLStyleSheet_removeRule,
309     HTMLStyleSheet_put_media,
310     HTMLStyleSheet_get_media,
311     HTMLStyleSheet_put_cssText,
312     HTMLStyleSheet_get_cssText,
313     HTMLStyleSheet_get_rules
314 };
315
316 IHTMLStyleSheet *HTMLStyleSheet_Create(void)
317 {
318     HTMLStyleSheet *ret = mshtml_alloc(sizeof(HTMLStyleSheet));
319
320     ret->lpHTMLStyleSheetVtbl = &HTMLStyleSheetVtbl;
321     ret->ref = 1;
322
323     return HTMLSTYLESHEET(ret);
324 }