2 * Copyright 2009 Andrew Eikum for CodeWeavers
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.
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.
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
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml
);
34 struct HTMLFormElement
{
37 const IHTMLFormElementVtbl
*lpHTMLFormElementVtbl
;
39 nsIDOMHTMLFormElement
*nsform
;
42 #define HTMLFORM(x) (&(x)->lpHTMLFormElementVtbl)
44 #define HTMLFORM_THIS(iface) DEFINE_THIS(HTMLFormElement, HTMLFormElement, iface)
46 static HRESULT WINAPI
HTMLFormElement_QueryInterface(IHTMLFormElement
*iface
,
47 REFIID riid
, void **ppv
)
49 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
51 return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This
->element
.node
), riid
, ppv
);
54 static ULONG WINAPI
HTMLFormElement_AddRef(IHTMLFormElement
*iface
)
56 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
58 return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This
->element
.node
));
61 static ULONG WINAPI
HTMLFormElement_Release(IHTMLFormElement
*iface
)
63 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
65 return IHTMLDOMNode_Release(HTMLDOMNODE(&This
->element
.node
));
68 static HRESULT WINAPI
HTMLFormElement_GetTypeInfoCount(IHTMLFormElement
*iface
, UINT
*pctinfo
)
70 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
71 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This
->element
.node
.dispex
), pctinfo
);
74 static HRESULT WINAPI
HTMLFormElement_GetTypeInfo(IHTMLFormElement
*iface
, UINT iTInfo
,
75 LCID lcid
, ITypeInfo
**ppTInfo
)
77 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
78 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This
->element
.node
.dispex
), iTInfo
, lcid
, ppTInfo
);
81 static HRESULT WINAPI
HTMLFormElement_GetIDsOfNames(IHTMLFormElement
*iface
, REFIID riid
,
82 LPOLESTR
*rgszNames
, UINT cNames
,
83 LCID lcid
, DISPID
*rgDispId
)
85 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
86 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This
->element
.node
.dispex
), riid
, rgszNames
, cNames
, lcid
, rgDispId
);
89 static HRESULT WINAPI
HTMLFormElement_Invoke(IHTMLFormElement
*iface
, DISPID dispIdMember
,
90 REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS
*pDispParams
,
91 VARIANT
*pVarResult
, EXCEPINFO
*pExcepInfo
, UINT
*puArgErr
)
93 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
94 return IDispatchEx_Invoke(DISPATCHEX(&This
->element
.node
.dispex
), dispIdMember
, riid
, lcid
, wFlags
, pDispParams
,
95 pVarResult
, pExcepInfo
, puArgErr
);
98 static HRESULT WINAPI
HTMLFormElement_put_action(IHTMLFormElement
*iface
, BSTR v
)
100 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
101 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
105 static HRESULT WINAPI
HTMLFormElement_get_action(IHTMLFormElement
*iface
, BSTR
*p
)
107 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
108 FIXME("(%p)->(%p)\n", This
, p
);
112 static HRESULT WINAPI
HTMLFormElement_put_dir(IHTMLFormElement
*iface
, BSTR v
)
114 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
115 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
119 static HRESULT WINAPI
HTMLFormElement_get_dir(IHTMLFormElement
*iface
, BSTR
*p
)
121 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
122 FIXME("(%p)->(%p)\n", This
, p
);
126 static HRESULT WINAPI
HTMLFormElement_put_encoding(IHTMLFormElement
*iface
, BSTR v
)
128 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
129 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
133 static HRESULT WINAPI
HTMLFormElement_get_encoding(IHTMLFormElement
*iface
, BSTR
*p
)
135 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
136 FIXME("(%p)->(%p)\n", This
, p
);
140 static HRESULT WINAPI
HTMLFormElement_put_method(IHTMLFormElement
*iface
, BSTR v
)
142 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
143 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
147 static HRESULT WINAPI
HTMLFormElement_get_method(IHTMLFormElement
*iface
, BSTR
*p
)
149 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
150 FIXME("(%p)->(%p)\n", This
, p
);
154 static HRESULT WINAPI
HTMLFormElement_get_elements(IHTMLFormElement
*iface
, IDispatch
**p
)
156 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
157 FIXME("(%p)->(%p)\n", This
, p
);
161 static HRESULT WINAPI
HTMLFormElement_put_target(IHTMLFormElement
*iface
, BSTR v
)
163 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
164 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
168 static HRESULT WINAPI
HTMLFormElement_get_target(IHTMLFormElement
*iface
, BSTR
*p
)
170 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
171 FIXME("(%p)->(%p)\n", This
, p
);
175 static HRESULT WINAPI
HTMLFormElement_put_name(IHTMLFormElement
*iface
, BSTR v
)
177 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
178 FIXME("(%p)->(%s)\n", This
, wine_dbgstr_w(v
));
182 static HRESULT WINAPI
HTMLFormElement_get_name(IHTMLFormElement
*iface
, BSTR
*p
)
184 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
185 FIXME("(%p)->(%p)\n", This
, p
);
189 static HRESULT WINAPI
HTMLFormElement_put_onsubmit(IHTMLFormElement
*iface
, VARIANT v
)
191 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
192 FIXME("(%p)->(v)\n", This
);
196 static HRESULT WINAPI
HTMLFormElement_get_onsubmit(IHTMLFormElement
*iface
, VARIANT
*p
)
198 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
199 FIXME("(%p)->(%p)\n", This
, p
);
203 static HRESULT WINAPI
HTMLFormElement_put_onreset(IHTMLFormElement
*iface
, VARIANT v
)
205 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
206 FIXME("(%p)->(v)\n", This
);
210 static HRESULT WINAPI
HTMLFormElement_get_onreset(IHTMLFormElement
*iface
, VARIANT
*p
)
212 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
213 FIXME("(%p)->(%p)\n", This
, p
);
217 static HRESULT WINAPI
HTMLFormElement_submit(IHTMLFormElement
*iface
)
219 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
220 FIXME("(%p)->()\n", This
);
224 static HRESULT WINAPI
HTMLFormElement_reset(IHTMLFormElement
*iface
)
226 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
227 FIXME("(%p)->()\n", This
);
231 static HRESULT WINAPI
HTMLFormElement_put_length(IHTMLFormElement
*iface
, LONG v
)
233 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
234 FIXME("(%p)->(%d)\n", This
, v
);
238 static HRESULT WINAPI
HTMLFormElement_get_length(IHTMLFormElement
*iface
, LONG
*p
)
240 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
241 FIXME("(%p)->(%p)\n", This
, p
);
245 static HRESULT WINAPI
HTMLFormElement__newEnum(IHTMLFormElement
*iface
, IUnknown
**p
)
247 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
248 FIXME("(%p)->(%p)\n", This
, p
);
252 static HRESULT WINAPI
HTMLFormElement_item(IHTMLFormElement
*iface
, VARIANT name
,
253 VARIANT index
, IDispatch
**pdisp
)
255 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
256 FIXME("(%p)->(v v %p)\n", This
, pdisp
);
260 static HRESULT WINAPI
HTMLFormElement_tags(IHTMLFormElement
*iface
, VARIANT tagName
,
263 HTMLFormElement
*This
= HTMLFORM_THIS(iface
);
264 FIXME("(%p)->(v %p)\n", This
, pdisp
);
270 static const IHTMLFormElementVtbl HTMLFormElementVtbl
= {
271 HTMLFormElement_QueryInterface
,
272 HTMLFormElement_AddRef
,
273 HTMLFormElement_Release
,
274 HTMLFormElement_GetTypeInfoCount
,
275 HTMLFormElement_GetTypeInfo
,
276 HTMLFormElement_GetIDsOfNames
,
277 HTMLFormElement_Invoke
,
278 HTMLFormElement_put_action
,
279 HTMLFormElement_get_action
,
280 HTMLFormElement_put_dir
,
281 HTMLFormElement_get_dir
,
282 HTMLFormElement_put_encoding
,
283 HTMLFormElement_get_encoding
,
284 HTMLFormElement_put_method
,
285 HTMLFormElement_get_method
,
286 HTMLFormElement_get_elements
,
287 HTMLFormElement_put_target
,
288 HTMLFormElement_get_target
,
289 HTMLFormElement_put_name
,
290 HTMLFormElement_get_name
,
291 HTMLFormElement_put_onsubmit
,
292 HTMLFormElement_get_onsubmit
,
293 HTMLFormElement_put_onreset
,
294 HTMLFormElement_get_onreset
,
295 HTMLFormElement_submit
,
296 HTMLFormElement_reset
,
297 HTMLFormElement_put_length
,
298 HTMLFormElement_get_length
,
299 HTMLFormElement__newEnum
,
300 HTMLFormElement_item
,
304 #define HTMLFORM_NODE_THIS(iface) DEFINE_THIS2(HTMLFormElement, element.node, iface)
306 static HRESULT
HTMLFormElement_QI(HTMLDOMNode
*iface
, REFIID riid
, void **ppv
)
308 HTMLFormElement
*This
= HTMLFORM_NODE_THIS(iface
);
312 if(IsEqualGUID(&IID_IUnknown
, riid
)) {
313 TRACE("(%p)->(IID_IUnknown %p)\n", This
, ppv
);
314 *ppv
= HTMLFORM(This
);
315 }else if(IsEqualGUID(&IID_IDispatch
, riid
)) {
316 TRACE("(%p)->(IID_IDispatch %p)\n", This
, ppv
);
317 *ppv
= HTMLFORM(This
);
318 }else if(IsEqualGUID(&IID_IHTMLFormElement
, riid
)) {
319 TRACE("(%p)->(IID_IHTMLFormElement %p)\n", This
, ppv
);
320 *ppv
= HTMLFORM(This
);
324 IUnknown_AddRef((IUnknown
*)*ppv
);
328 return HTMLElement_QI(&This
->element
.node
, riid
, ppv
);
331 static void HTMLFormElement_destructor(HTMLDOMNode
*iface
)
333 HTMLFormElement
*This
= HTMLFORM_NODE_THIS(iface
);
336 nsIDOMHTMLFormElement_Release(This
->nsform
);
338 HTMLElement_destructor(&This
->element
.node
);
341 #undef HTMLFORM_NODE_THIS
343 static const NodeImplVtbl HTMLFormElementImplVtbl
= {
345 HTMLFormElement_destructor
348 static const tid_t HTMLFormElement_iface_tids
[] = {
354 IHTMLFormElement_tid
,
358 static dispex_static_data_t HTMLFormElement_dispex
= {
360 DispHTMLFormElement_tid
,
362 HTMLFormElement_iface_tids
365 HTMLElement
*HTMLFormElement_Create(HTMLDocumentNode
*doc
, nsIDOMHTMLElement
*nselem
)
367 HTMLFormElement
*ret
= heap_alloc_zero(sizeof(HTMLFormElement
));
370 ret
->lpHTMLFormElementVtbl
= &HTMLFormElementVtbl
;
371 ret
->element
.node
.vtbl
= &HTMLFormElementImplVtbl
;
373 HTMLElement_Init(&ret
->element
, doc
, nselem
, &HTMLFormElement_dispex
);
375 nsres
= nsIDOMHTMLElement_QueryInterface(nselem
, &IID_nsIDOMHTMLFormElement
, (void**)&ret
->nsform
);
377 ERR("Could not get nsIDOMHTMLFormElement interface: %08x\n", nsres
);
379 return &ret
->element
;