wined3d: Add a separate function for initializing the "contained_*" fields from the...
[wine] / dlls / mshtml / htmlinput.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 <stdarg.h>
20
21 #define COBJMACROS
22
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
27
28 #include "wine/debug.h"
29
30 #include "mshtml_private.h"
31
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
33
34 typedef struct {
35     HTMLElement element;
36
37     const IHTMLInputElementVtbl *lpHTMLInputElementVtbl;
38     const IHTMLInputTextElementVtbl *lpHTMLInputTextElementVtbl;
39
40     nsIDOMHTMLInputElement *nsinput;
41 } HTMLInputElement;
42
43 #define HTMLINPUT(x)      ((IHTMLInputElement*)      &(x)->lpHTMLInputElementVtbl)
44 #define HTMLINPUTTEXT(x)  (&(x)->lpHTMLInputTextElementVtbl)
45
46 #define HTMLINPUT_THIS(iface) DEFINE_THIS(HTMLInputElement, HTMLInputElement, iface)
47
48 static HRESULT WINAPI HTMLInputElement_QueryInterface(IHTMLInputElement *iface,
49                                                          REFIID riid, void **ppv)
50 {
51     HTMLInputElement *This = HTMLINPUT_THIS(iface);
52
53     return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
54 }
55
56 static ULONG WINAPI HTMLInputElement_AddRef(IHTMLInputElement *iface)
57 {
58     HTMLInputElement *This = HTMLINPUT_THIS(iface);
59
60     return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
61 }
62
63 static ULONG WINAPI HTMLInputElement_Release(IHTMLInputElement *iface)
64 {
65     HTMLInputElement *This = HTMLINPUT_THIS(iface);
66
67     return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
68 }
69
70 static HRESULT WINAPI HTMLInputElement_GetTypeInfoCount(IHTMLInputElement *iface, UINT *pctinfo)
71 {
72     HTMLInputElement *This = HTMLINPUT_THIS(iface);
73
74     return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
75 }
76
77 static HRESULT WINAPI HTMLInputElement_GetTypeInfo(IHTMLInputElement *iface, UINT iTInfo,
78                                               LCID lcid, ITypeInfo **ppTInfo)
79 {
80     HTMLInputElement *This = HTMLINPUT_THIS(iface);
81
82     return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo);
83 }
84
85 static HRESULT WINAPI HTMLInputElement_GetIDsOfNames(IHTMLInputElement *iface, REFIID riid,
86                                                 LPOLESTR *rgszNames, UINT cNames,
87                                                 LCID lcid, DISPID *rgDispId)
88 {
89     HTMLInputElement *This = HTMLINPUT_THIS(iface);
90
91     return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames,
92             cNames, lcid, rgDispId);
93 }
94
95 static HRESULT WINAPI HTMLInputElement_Invoke(IHTMLInputElement *iface, DISPID dispIdMember,
96                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
97                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
98 {
99     HTMLInputElement *This = HTMLINPUT_THIS(iface);
100
101     return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid, wFlags,
102             pDispParams, pVarResult, pExcepInfo, puArgErr);
103 }
104
105 static HRESULT WINAPI HTMLInputElement_put_type(IHTMLInputElement *iface, BSTR v)
106 {
107     HTMLInputElement *This = HTMLINPUT_THIS(iface);
108     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
109     return E_NOTIMPL;
110 }
111
112 static HRESULT WINAPI HTMLInputElement_get_type(IHTMLInputElement *iface, BSTR *p)
113 {
114     HTMLInputElement *This = HTMLINPUT_THIS(iface);
115     nsAString type_str;
116     const PRUnichar *type;
117     nsresult nsres;
118
119     TRACE("(%p)->(%p)\n", This, p);
120
121     nsAString_Init(&type_str, NULL);
122     nsres = nsIDOMHTMLInputElement_GetType(This->nsinput, &type_str);
123
124     if(NS_SUCCEEDED(nsres)) {
125         nsAString_GetData(&type_str, &type);
126         *p = SysAllocString(type);
127     }else {
128         ERR("GetType failed: %08x\n", nsres);
129     }
130
131     nsAString_Finish(&type_str);
132
133     TRACE("type=%s\n", debugstr_w(*p));
134     return S_OK;
135 }
136
137 static HRESULT WINAPI HTMLInputElement_put_value(IHTMLInputElement *iface, BSTR v)
138 {
139     HTMLInputElement *This = HTMLINPUT_THIS(iface);
140     nsAString val_str;
141     nsresult nsres;
142
143     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
144
145     nsAString_Init(&val_str, v);
146     nsres = nsIDOMHTMLInputElement_SetValue(This->nsinput, &val_str);
147     nsAString_Finish(&val_str);
148     if(NS_FAILED(nsres))
149         ERR("SetValue failed: %08x\n", nsres);
150
151     return S_OK;
152 }
153
154 static HRESULT WINAPI HTMLInputElement_get_value(IHTMLInputElement *iface, BSTR *p)
155 {
156     HTMLInputElement *This = HTMLINPUT_THIS(iface);
157     nsAString value_str;
158     const PRUnichar *value = NULL;
159     nsresult nsres;
160
161     TRACE("(%p)->(%p)\n", This, p);
162
163     nsAString_Init(&value_str, NULL);
164
165     nsres = nsIDOMHTMLInputElement_GetValue(This->nsinput, &value_str);
166     if(NS_SUCCEEDED(nsres)) {
167         nsAString_GetData(&value_str, &value);
168         *p = SysAllocString(value);
169     }else {
170         ERR("GetValue failed: %08x\n", nsres);
171     }
172
173     nsAString_Finish(&value_str);
174
175     TRACE("value=%s\n", debugstr_w(*p));
176     return S_OK;
177 }
178
179 static HRESULT WINAPI HTMLInputElement_put_name(IHTMLInputElement *iface, BSTR v)
180 {
181     HTMLInputElement *This = HTMLINPUT_THIS(iface);
182     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
183     return E_NOTIMPL;
184 }
185
186 static HRESULT WINAPI HTMLInputElement_get_name(IHTMLInputElement *iface, BSTR *p)
187 {
188     HTMLInputElement *This = HTMLINPUT_THIS(iface);
189     nsAString name_str;
190     const PRUnichar *name;
191     nsresult nsres;
192
193     TRACE("(%p)->(%p)\n", This, p);
194
195     nsAString_Init(&name_str, NULL);
196
197     nsres = nsIDOMHTMLInputElement_GetName(This->nsinput, &name_str);
198     if(NS_SUCCEEDED(nsres)) {
199         nsAString_GetData(&name_str, &name);
200         *p = SysAllocString(name);
201     }else {
202         ERR("GetName failed: %08x\n", nsres);
203         return E_FAIL;
204     }
205
206     nsAString_Finish(&name_str);
207
208     TRACE("name=%s\n", debugstr_w(*p));
209     return S_OK;
210 }
211
212 static HRESULT WINAPI HTMLInputElement_put_status(IHTMLInputElement *iface, VARIANT_BOOL v)
213 {
214     HTMLInputElement *This = HTMLINPUT_THIS(iface);
215     FIXME("(%p)->(%x)\n", This, v);
216     return E_NOTIMPL;
217 }
218
219 static HRESULT WINAPI HTMLInputElement_get_status(IHTMLInputElement *iface, VARIANT_BOOL *p)
220 {
221     HTMLInputElement *This = HTMLINPUT_THIS(iface);
222     FIXME("(%p)->(%p)\n", This, p);
223     return E_NOTIMPL;
224 }
225
226 static HRESULT WINAPI HTMLInputElement_put_disabled(IHTMLInputElement *iface, VARIANT_BOOL v)
227 {
228     HTMLInputElement *This = HTMLINPUT_THIS(iface);
229     nsresult nsres;
230
231     TRACE("(%p)->(%x)\n", This, v);
232
233     nsres = nsIDOMHTMLInputElement_SetDisabled(This->nsinput, v != VARIANT_FALSE);
234     if(NS_FAILED(nsres))
235         ERR("SetDisabled failed: %08x\n", nsres);
236
237     return S_OK;
238 }
239
240 static HRESULT WINAPI HTMLInputElement_get_disabled(IHTMLInputElement *iface, VARIANT_BOOL *p)
241 {
242     HTMLInputElement *This = HTMLINPUT_THIS(iface);
243     PRBool disabled = FALSE;
244
245     TRACE("(%p)->(%p)\n", This, p);
246
247     nsIDOMHTMLInputElement_GetDisabled(This->nsinput, &disabled);
248
249     *p = disabled ? VARIANT_TRUE : VARIANT_FALSE;
250     return S_OK;
251 }
252
253 static HRESULT WINAPI HTMLInputElement_get_form(IHTMLInputElement *iface, IHTMLFormElement **p)
254 {
255     HTMLInputElement *This = HTMLINPUT_THIS(iface);
256     FIXME("(%p)->(%p)\n", This, p);
257     return E_NOTIMPL;
258 }
259
260 static HRESULT WINAPI HTMLInputElement_put_size(IHTMLInputElement *iface, LONG v)
261 {
262     HTMLInputElement *This = HTMLINPUT_THIS(iface);
263     FIXME("(%p)->(%d)\n", This, v);
264     return E_NOTIMPL;
265 }
266
267 static HRESULT WINAPI HTMLInputElement_get_size(IHTMLInputElement *iface, LONG *p)
268 {
269     HTMLInputElement *This = HTMLINPUT_THIS(iface);
270     FIXME("(%p)->(%p)\n", This, p);
271     return E_NOTIMPL;
272 }
273
274 static HRESULT WINAPI HTMLInputElement_put_maxLength(IHTMLInputElement *iface, LONG v)
275 {
276     HTMLInputElement *This = HTMLINPUT_THIS(iface);
277     FIXME("(%p)->(%d)\n", This, v);
278     return E_NOTIMPL;
279 }
280
281 static HRESULT WINAPI HTMLInputElement_get_maxLength(IHTMLInputElement *iface, LONG *p)
282 {
283     HTMLInputElement *This = HTMLINPUT_THIS(iface);
284     FIXME("(%p)->(%p)\n", This, p);
285     return E_NOTIMPL;
286 }
287
288 static HRESULT WINAPI HTMLInputElement_select(IHTMLInputElement *iface)
289 {
290     HTMLInputElement *This = HTMLINPUT_THIS(iface);
291     nsresult nsres;
292
293     TRACE("(%p)\n", This);
294
295     nsres = nsIDOMHTMLInputElement_Select(This->nsinput);
296     if(NS_FAILED(nsres)) {
297         ERR("Select failed: %08x\n", nsres);
298         return E_FAIL;
299     }
300
301     return S_OK;
302 }
303
304 static HRESULT WINAPI HTMLInputElement_put_onchange(IHTMLInputElement *iface, VARIANT v)
305 {
306     HTMLInputElement *This = HTMLINPUT_THIS(iface);
307     FIXME("(%p)->()\n", This);
308     return E_NOTIMPL;
309 }
310
311 static HRESULT WINAPI HTMLInputElement_get_onchange(IHTMLInputElement *iface, VARIANT *p)
312 {
313     HTMLInputElement *This = HTMLINPUT_THIS(iface);
314     FIXME("(%p)->(%p)\n", This, p);
315     return E_NOTIMPL;
316 }
317
318 static HRESULT WINAPI HTMLInputElement_put_onselect(IHTMLInputElement *iface, VARIANT v)
319 {
320     HTMLInputElement *This = HTMLINPUT_THIS(iface);
321     FIXME("(%p)->()\n", This);
322     return E_NOTIMPL;
323 }
324
325 static HRESULT WINAPI HTMLInputElement_get_onselect(IHTMLInputElement *iface, VARIANT *p)
326 {
327     HTMLInputElement *This = HTMLINPUT_THIS(iface);
328     FIXME("(%p)->(%p)\n", This, p);
329     return E_NOTIMPL;
330 }
331
332 static HRESULT WINAPI HTMLInputElement_put_defaultValue(IHTMLInputElement *iface, BSTR v)
333 {
334     HTMLInputElement *This = HTMLINPUT_THIS(iface);
335     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
336     return E_NOTIMPL;
337 }
338
339 static HRESULT WINAPI HTMLInputElement_get_defaultValue(IHTMLInputElement *iface, BSTR *p)
340 {
341     HTMLInputElement *This = HTMLINPUT_THIS(iface);
342     FIXME("(%p)->(%p)\n", This, p);
343     return E_NOTIMPL;
344 }
345
346 static HRESULT WINAPI HTMLInputElement_put_readOnly(IHTMLInputElement *iface, VARIANT_BOOL v)
347 {
348     HTMLInputElement *This = HTMLINPUT_THIS(iface);
349     FIXME("(%p)->(%x)\n", This, v);
350     return E_NOTIMPL;
351 }
352
353 static HRESULT WINAPI HTMLInputElement_get_readOnly(IHTMLInputElement *iface, VARIANT_BOOL *p)
354 {
355     HTMLInputElement *This = HTMLINPUT_THIS(iface);
356     FIXME("(%p)->(%p)\n", This, p);
357     return E_NOTIMPL;
358 }
359
360 static HRESULT WINAPI HTMLInputElement_createTextRange(IHTMLInputElement *iface, IHTMLTxtRange **range)
361 {
362     HTMLInputElement *This = HTMLINPUT_THIS(iface);
363     FIXME("(%p)->(%p)\n", This, range);
364     return E_NOTIMPL;
365 }
366
367 static HRESULT WINAPI HTMLInputElement_put_indeterminate(IHTMLInputElement *iface, VARIANT_BOOL v)
368 {
369     HTMLInputElement *This = HTMLINPUT_THIS(iface);
370     FIXME("(%p)->(%x)\n", This, v);
371     return E_NOTIMPL;
372 }
373
374 static HRESULT WINAPI HTMLInputElement_get_indeterminate(IHTMLInputElement *iface, VARIANT_BOOL *p)
375 {
376     HTMLInputElement *This = HTMLINPUT_THIS(iface);
377     FIXME("(%p)->(%p)\n", This, p);
378     return E_NOTIMPL;
379 }
380
381 static HRESULT WINAPI HTMLInputElement_put_defaultChecked(IHTMLInputElement *iface, VARIANT_BOOL v)
382 {
383     HTMLInputElement *This = HTMLINPUT_THIS(iface);
384     nsresult nsres;
385
386     TRACE("(%p)->(%x)\n", This, v);
387
388     nsres = nsIDOMHTMLInputElement_SetDefaultChecked(This->nsinput, v != VARIANT_FALSE);
389     if(NS_FAILED(nsres)) {
390         ERR("SetDefaultChecked failed: %08x\n", nsres);
391         return E_FAIL;
392     }
393
394     return S_OK;
395 }
396
397 static HRESULT WINAPI HTMLInputElement_get_defaultChecked(IHTMLInputElement *iface, VARIANT_BOOL *p)
398 {
399     HTMLInputElement *This = HTMLINPUT_THIS(iface);
400     PRBool default_checked = FALSE;
401     nsresult nsres;
402
403     TRACE("(%p)->(%p)\n", This, p);
404
405     nsres = nsIDOMHTMLInputElement_GetDefaultChecked(This->nsinput, &default_checked);
406     if(NS_FAILED(nsres)) {
407         ERR("GetDefaultChecked failed: %08x\n", nsres);
408         return E_FAIL;
409     }
410
411     *p = default_checked ? VARIANT_TRUE : VARIANT_FALSE;
412     return S_OK;
413 }
414
415 static HRESULT WINAPI HTMLInputElement_put_checked(IHTMLInputElement *iface, VARIANT_BOOL v)
416 {
417     HTMLInputElement *This = HTMLINPUT_THIS(iface);
418     nsresult nsres;
419
420     TRACE("(%p)->(%x)\n", This, v);
421
422     nsres = nsIDOMHTMLInputElement_SetChecked(This->nsinput, v != VARIANT_FALSE);
423     if(NS_FAILED(nsres)) {
424         ERR("SetChecked failed: %08x\n", nsres);
425         return E_FAIL;
426     }
427
428     return S_OK;
429 }
430
431 static HRESULT WINAPI HTMLInputElement_get_checked(IHTMLInputElement *iface, VARIANT_BOOL *p)
432 {
433     HTMLInputElement *This = HTMLINPUT_THIS(iface);
434     PRBool checked;
435     nsresult nsres;
436
437     TRACE("(%p)->(%p)\n", This, p);
438
439     nsres = nsIDOMHTMLInputElement_GetChecked(This->nsinput, &checked);
440     if(NS_FAILED(nsres)) {
441         ERR("GetChecked failed: %08x\n", nsres);
442         return E_FAIL;
443     }
444
445     *p = checked ? VARIANT_TRUE : VARIANT_FALSE;
446     TRACE("checked=%x\n", *p);
447     return S_OK;
448 }
449
450 static HRESULT WINAPI HTMLInputElement_put_border(IHTMLInputElement *iface, VARIANT v)
451 {
452     HTMLInputElement *This = HTMLINPUT_THIS(iface);
453     FIXME("(%p)->()\n", This);
454     return E_NOTIMPL;
455 }
456
457 static HRESULT WINAPI HTMLInputElement_get_border(IHTMLInputElement *iface, VARIANT *p)
458 {
459     HTMLInputElement *This = HTMLINPUT_THIS(iface);
460     FIXME("(%p)->(%p)\n", This, p);
461     return E_NOTIMPL;
462 }
463
464 static HRESULT WINAPI HTMLInputElement_put_vspace(IHTMLInputElement *iface, LONG v)
465 {
466     HTMLInputElement *This = HTMLINPUT_THIS(iface);
467     FIXME("(%p)->(%d)\n", This, v);
468     return E_NOTIMPL;
469 }
470
471 static HRESULT WINAPI HTMLInputElement_get_vspace(IHTMLInputElement *iface, LONG *p)
472 {
473     HTMLInputElement *This = HTMLINPUT_THIS(iface);
474     FIXME("(%p)->(%p)\n", This, p);
475     return E_NOTIMPL;
476 }
477
478 static HRESULT WINAPI HTMLInputElement_put_hspace(IHTMLInputElement *iface, LONG v)
479 {
480     HTMLInputElement *This = HTMLINPUT_THIS(iface);
481     FIXME("(%p)->(%d)\n", This, v);
482     return E_NOTIMPL;
483 }
484
485 static HRESULT WINAPI HTMLInputElement_get_hspace(IHTMLInputElement *iface, LONG *p)
486 {
487     HTMLInputElement *This = HTMLINPUT_THIS(iface);
488     FIXME("(%p)->(%p)\n", This, p);
489     return E_NOTIMPL;
490 }
491
492 static HRESULT WINAPI HTMLInputElement_put_alt(IHTMLInputElement *iface, BSTR v)
493 {
494     HTMLInputElement *This = HTMLINPUT_THIS(iface);
495     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
496     return E_NOTIMPL;
497 }
498
499 static HRESULT WINAPI HTMLInputElement_get_alt(IHTMLInputElement *iface, BSTR *p)
500 {
501     HTMLInputElement *This = HTMLINPUT_THIS(iface);
502     FIXME("(%p)->(%p)\n", This, p);
503     return E_NOTIMPL;
504 }
505
506 static HRESULT WINAPI HTMLInputElement_put_src(IHTMLInputElement *iface, BSTR v)
507 {
508     HTMLInputElement *This = HTMLINPUT_THIS(iface);
509     nsAString nsstr;
510     nsresult nsres;
511
512     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
513
514     nsAString_Init(&nsstr, v);
515     nsres = nsIDOMHTMLInputElement_SetSrc(This->nsinput, &nsstr);
516     nsAString_Finish(&nsstr);
517     if(NS_FAILED(nsres))
518         ERR("SetSrc failed: %08x\n", nsres);
519
520     return S_OK;
521 }
522
523 static HRESULT WINAPI HTMLInputElement_get_src(IHTMLInputElement *iface, BSTR *p)
524 {
525     HTMLInputElement *This = HTMLINPUT_THIS(iface);
526     const PRUnichar *src;
527     nsAString src_str;
528     nsresult nsres;
529     HRESULT hres;
530
531     TRACE("(%p)->(%p)\n", This, p);
532
533     nsAString_Init(&src_str, NULL);
534     nsres = nsIDOMHTMLInputElement_GetSrc(This->nsinput, &src_str);
535     if(NS_FAILED(nsres)) {
536         ERR("GetSrc failed: %08x\n", nsres);
537         return E_FAIL;
538     }
539
540     nsAString_GetData(&src_str, &src);
541     hres = nsuri_to_url(src, FALSE, p);
542     nsAString_Finish(&src_str);
543
544     return hres;
545 }
546
547 static HRESULT WINAPI HTMLInputElement_put_lowsrc(IHTMLInputElement *iface, BSTR v)
548 {
549     HTMLInputElement *This = HTMLINPUT_THIS(iface);
550     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
551     return E_NOTIMPL;
552 }
553
554 static HRESULT WINAPI HTMLInputElement_get_lowsrc(IHTMLInputElement *iface, BSTR *p)
555 {
556     HTMLInputElement *This = HTMLINPUT_THIS(iface);
557     FIXME("(%p)->(%p)\n", This, p);
558     return E_NOTIMPL;
559 }
560
561 static HRESULT WINAPI HTMLInputElement_put_vrml(IHTMLInputElement *iface, BSTR v)
562 {
563     HTMLInputElement *This = HTMLINPUT_THIS(iface);
564     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
565     return E_NOTIMPL;
566 }
567
568 static HRESULT WINAPI HTMLInputElement_get_vrml(IHTMLInputElement *iface, BSTR *p)
569 {
570     HTMLInputElement *This = HTMLINPUT_THIS(iface);
571     FIXME("(%p)->(%p)\n", This, p);
572     return E_NOTIMPL;
573 }
574
575 static HRESULT WINAPI HTMLInputElement_put_dynsrc(IHTMLInputElement *iface, BSTR v)
576 {
577     HTMLInputElement *This = HTMLINPUT_THIS(iface);
578     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
579     return E_NOTIMPL;
580 }
581
582 static HRESULT WINAPI HTMLInputElement_get_dynsrc(IHTMLInputElement *iface, BSTR *p)
583 {
584     HTMLInputElement *This = HTMLINPUT_THIS(iface);
585     FIXME("(%p)->(%p)\n", This, p);
586     return E_NOTIMPL;
587 }
588
589 static HRESULT WINAPI HTMLInputElement_get_readyState(IHTMLInputElement *iface, BSTR *p)
590 {
591     HTMLInputElement *This = HTMLINPUT_THIS(iface);
592     FIXME("(%p)->(%p)\n", This, p);
593     return E_NOTIMPL;
594 }
595
596 static HRESULT WINAPI HTMLInputElement_get_complete(IHTMLInputElement *iface, VARIANT_BOOL *p)
597 {
598     HTMLInputElement *This = HTMLINPUT_THIS(iface);
599     FIXME("(%p)->(%p)\n", This, p);
600     return E_NOTIMPL;
601 }
602
603 static HRESULT WINAPI HTMLInputElement_put_loop(IHTMLInputElement *iface, VARIANT v)
604 {
605     HTMLInputElement *This = HTMLINPUT_THIS(iface);
606     FIXME("(%p)->()\n", This);
607     return E_NOTIMPL;
608 }
609
610 static HRESULT WINAPI HTMLInputElement_get_loop(IHTMLInputElement *iface, VARIANT *p)
611 {
612     HTMLInputElement *This = HTMLINPUT_THIS(iface);
613     FIXME("(%p)->(%p)\n", This, p);
614     return E_NOTIMPL;
615 }
616
617 static HRESULT WINAPI HTMLInputElement_put_align(IHTMLInputElement *iface, BSTR v)
618 {
619     HTMLInputElement *This = HTMLINPUT_THIS(iface);
620     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
621     return E_NOTIMPL;
622 }
623
624 static HRESULT WINAPI HTMLInputElement_get_align(IHTMLInputElement *iface, BSTR *p)
625 {
626     HTMLInputElement *This = HTMLINPUT_THIS(iface);
627     FIXME("(%p)->(%p)\n", This, p);
628     return E_NOTIMPL;
629 }
630
631 static HRESULT WINAPI HTMLInputElement_put_onload(IHTMLInputElement *iface, VARIANT v)
632 {
633     HTMLInputElement *This = HTMLINPUT_THIS(iface);
634     FIXME("(%p)->()\n", This);
635     return E_NOTIMPL;
636 }
637
638 static HRESULT WINAPI HTMLInputElement_get_onload(IHTMLInputElement *iface, VARIANT *p)
639 {
640     HTMLInputElement *This = HTMLINPUT_THIS(iface);
641     FIXME("(%p)->(%p)\n", This, p);
642     return E_NOTIMPL;
643 }
644
645 static HRESULT WINAPI HTMLInputElement_put_onerror(IHTMLInputElement *iface, VARIANT v)
646 {
647     HTMLInputElement *This = HTMLINPUT_THIS(iface);
648     FIXME("(%p)->()\n", This);
649     return E_NOTIMPL;
650 }
651
652 static HRESULT WINAPI HTMLInputElement_get_onerror(IHTMLInputElement *iface, VARIANT *p)
653 {
654     HTMLInputElement *This = HTMLINPUT_THIS(iface);
655     FIXME("(%p)->(%p)\n", This, p);
656     return E_NOTIMPL;
657 }
658
659 static HRESULT WINAPI HTMLInputElement_put_onabort(IHTMLInputElement *iface, VARIANT v)
660 {
661     HTMLInputElement *This = HTMLINPUT_THIS(iface);
662     FIXME("(%p)->()\n", This);
663     return E_NOTIMPL;
664 }
665
666 static HRESULT WINAPI HTMLInputElement_get_onabort(IHTMLInputElement *iface, VARIANT *p)
667 {
668     HTMLInputElement *This = HTMLINPUT_THIS(iface);
669     FIXME("(%p)->(%p)\n", This, p);
670     return E_NOTIMPL;
671 }
672
673 static HRESULT WINAPI HTMLInputElement_put_width(IHTMLInputElement *iface, LONG v)
674 {
675     HTMLInputElement *This = HTMLINPUT_THIS(iface);
676     FIXME("(%p)->(%d)\n", This, v);
677     return E_NOTIMPL;
678 }
679
680 static HRESULT WINAPI HTMLInputElement_get_width(IHTMLInputElement *iface, LONG *p)
681 {
682     HTMLInputElement *This = HTMLINPUT_THIS(iface);
683     FIXME("(%p)->(%p)\n", This, p);
684     return E_NOTIMPL;
685 }
686
687 static HRESULT WINAPI HTMLInputElement_put_height(IHTMLInputElement *iface, LONG v)
688 {
689     HTMLInputElement *This = HTMLINPUT_THIS(iface);
690     FIXME("(%p)->(%d)\n", This, v);
691     return E_NOTIMPL;
692 }
693
694 static HRESULT WINAPI HTMLInputElement_get_height(IHTMLInputElement *iface, LONG *p)
695 {
696     HTMLInputElement *This = HTMLINPUT_THIS(iface);
697     FIXME("(%p)->(%p)\n", This, p);
698     return E_NOTIMPL;
699 }
700
701 static HRESULT WINAPI HTMLInputElement_put_start(IHTMLInputElement *iface, BSTR v)
702 {
703     HTMLInputElement *This = HTMLINPUT_THIS(iface);
704     FIXME("(%p)->(%s)\n", This, debugstr_w(v));
705     return E_NOTIMPL;
706 }
707
708 static HRESULT WINAPI HTMLInputElement_get_start(IHTMLInputElement *iface, BSTR *p)
709 {
710     HTMLInputElement *This = HTMLINPUT_THIS(iface);
711     FIXME("(%p)->(%p)\n", This, p);
712     return E_NOTIMPL;
713 }
714
715 #undef HTMLINPUT_THIS
716
717 static const IHTMLInputElementVtbl HTMLInputElementVtbl = {
718     HTMLInputElement_QueryInterface,
719     HTMLInputElement_AddRef,
720     HTMLInputElement_Release,
721     HTMLInputElement_GetTypeInfoCount,
722     HTMLInputElement_GetTypeInfo,
723     HTMLInputElement_GetIDsOfNames,
724     HTMLInputElement_Invoke,
725     HTMLInputElement_put_type,
726     HTMLInputElement_get_type,
727     HTMLInputElement_put_value,
728     HTMLInputElement_get_value,
729     HTMLInputElement_put_name,
730     HTMLInputElement_get_name,
731     HTMLInputElement_put_status,
732     HTMLInputElement_get_status,
733     HTMLInputElement_put_disabled,
734     HTMLInputElement_get_disabled,
735     HTMLInputElement_get_form,
736     HTMLInputElement_put_size,
737     HTMLInputElement_get_size,
738     HTMLInputElement_put_maxLength,
739     HTMLInputElement_get_maxLength,
740     HTMLInputElement_select,
741     HTMLInputElement_put_onchange,
742     HTMLInputElement_get_onchange,
743     HTMLInputElement_put_onselect,
744     HTMLInputElement_get_onselect,
745     HTMLInputElement_put_defaultValue,
746     HTMLInputElement_get_defaultValue,
747     HTMLInputElement_put_readOnly,
748     HTMLInputElement_get_readOnly,
749     HTMLInputElement_createTextRange,
750     HTMLInputElement_put_indeterminate,
751     HTMLInputElement_get_indeterminate,
752     HTMLInputElement_put_defaultChecked,
753     HTMLInputElement_get_defaultChecked,
754     HTMLInputElement_put_checked,
755     HTMLInputElement_get_checked,
756     HTMLInputElement_put_border,
757     HTMLInputElement_get_border,
758     HTMLInputElement_put_vspace,
759     HTMLInputElement_get_vspace,
760     HTMLInputElement_put_hspace,
761     HTMLInputElement_get_hspace,
762     HTMLInputElement_put_alt,
763     HTMLInputElement_get_alt,
764     HTMLInputElement_put_src,
765     HTMLInputElement_get_src,
766     HTMLInputElement_put_lowsrc,
767     HTMLInputElement_get_lowsrc,
768     HTMLInputElement_put_vrml,
769     HTMLInputElement_get_vrml,
770     HTMLInputElement_put_dynsrc,
771     HTMLInputElement_get_dynsrc,
772     HTMLInputElement_get_readyState,
773     HTMLInputElement_get_complete,
774     HTMLInputElement_put_loop,
775     HTMLInputElement_get_loop,
776     HTMLInputElement_put_align,
777     HTMLInputElement_get_align,
778     HTMLInputElement_put_onload,
779     HTMLInputElement_get_onload,
780     HTMLInputElement_put_onerror,
781     HTMLInputElement_get_onerror,
782     HTMLInputElement_put_onabort,
783     HTMLInputElement_get_onabort,
784     HTMLInputElement_put_width,
785     HTMLInputElement_get_width,
786     HTMLInputElement_put_height,
787     HTMLInputElement_get_height,
788     HTMLInputElement_put_start,
789     HTMLInputElement_get_start
790 };
791
792 #define HTMLINPUTTEXT_THIS(iface) DEFINE_THIS(HTMLInputElement, HTMLInputTextElement, iface)
793
794 static HRESULT WINAPI HTMLInputTextElement_QueryInterface(IHTMLInputTextElement *iface,
795         REFIID riid, void **ppv)
796 {
797     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
798
799     return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
800 }
801
802 static ULONG WINAPI HTMLInputTextElement_AddRef(IHTMLInputTextElement *iface)
803 {
804     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
805
806     return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
807 }
808
809 static ULONG WINAPI HTMLInputTextElement_Release(IHTMLInputTextElement *iface)
810 {
811     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
812
813     return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
814 }
815
816 static HRESULT WINAPI HTMLInputTextElement_GetTypeInfoCount(IHTMLInputTextElement *iface, UINT *pctinfo)
817 {
818     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
819     return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
820 }
821
822 static HRESULT WINAPI HTMLInputTextElement_GetTypeInfo(IHTMLInputTextElement *iface, UINT iTInfo,
823         LCID lcid, ITypeInfo **ppTInfo)
824 {
825     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
826     return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo);
827 }
828
829 static HRESULT WINAPI HTMLInputTextElement_GetIDsOfNames(IHTMLInputTextElement *iface, REFIID riid,
830         LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
831 {
832     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
833     return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
834 }
835
836 static HRESULT WINAPI HTMLInputTextElement_Invoke(IHTMLInputTextElement *iface, DISPID dispIdMember,
837                             REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
838                             VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
839 {
840     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
841     return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid, wFlags, pDispParams,
842             pVarResult, pExcepInfo, puArgErr);
843 }
844
845 static HRESULT WINAPI HTMLInputTextElement_get_type(IHTMLInputTextElement *iface, BSTR *p)
846 {
847     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
848
849     TRACE("(%p)->(%p)\n", This, p);
850
851     return IHTMLInputElement_get_type(HTMLINPUT(This), p);
852 }
853
854 static HRESULT WINAPI HTMLInputTextElement_put_value(IHTMLInputTextElement *iface, BSTR v)
855 {
856     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
857
858     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
859
860     return IHTMLInputElement_put_value(HTMLINPUT(This), v);
861 }
862
863 static HRESULT WINAPI HTMLInputTextElement_get_value(IHTMLInputTextElement *iface, BSTR *p)
864 {
865     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
866
867     TRACE("(%p)->(%p)\n", This, p);
868
869     return IHTMLInputElement_get_value(HTMLINPUT(This), p);
870 }
871
872 static HRESULT WINAPI HTMLInputTextElement_put_name(IHTMLInputTextElement *iface, BSTR v)
873 {
874     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
875
876     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
877
878     return IHTMLInputElement_put_name(HTMLINPUT(This), v);
879 }
880
881 static HRESULT WINAPI HTMLInputTextElement_get_name(IHTMLInputTextElement *iface, BSTR *p)
882 {
883     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
884
885     TRACE("(%p)->(%p)\n", This, p);
886
887     return IHTMLInputElement_get_name(HTMLINPUT(This), p);
888 }
889
890 static HRESULT WINAPI HTMLInputTextElement_put_status(IHTMLInputTextElement *iface, VARIANT v)
891 {
892     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
893     FIXME("(%p)->(v)\n", This);
894     return E_NOTIMPL;
895 }
896
897 static HRESULT WINAPI HTMLInputTextElement_get_status(IHTMLInputTextElement *iface, VARIANT *p)
898 {
899     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
900     TRACE("(%p)->(v)\n", This);
901     return E_NOTIMPL;
902 }
903
904 static HRESULT WINAPI HTMLInputTextElement_put_disabled(IHTMLInputTextElement *iface, VARIANT_BOOL v)
905 {
906     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
907
908     TRACE("(%p)->(%x)\n", This, v);
909
910     return IHTMLInputElement_put_disabled(HTMLINPUT(This), v);
911 }
912
913 static HRESULT WINAPI HTMLInputTextElement_get_disabled(IHTMLInputTextElement *iface, VARIANT_BOOL *p)
914 {
915     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
916
917     TRACE("(%p)->(%p)\n", This, p);
918
919     return IHTMLInputElement_get_disabled(HTMLINPUT(This), p);
920 }
921
922 static HRESULT WINAPI HTMLInputTextElement_get_form(IHTMLInputTextElement *iface, IHTMLFormElement **p)
923 {
924     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
925
926     TRACE("(%p)->(%p)\n", This, p);
927
928     return IHTMLInputElement_get_form(HTMLINPUT(This), p);
929 }
930
931 static HRESULT WINAPI HTMLInputTextElement_put_defaultValue(IHTMLInputTextElement *iface, BSTR v)
932 {
933     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
934
935     TRACE("(%p)->(%s)\n", This, debugstr_w(v));
936
937     return IHTMLInputElement_put_defaultValue(HTMLINPUT(This), v);
938 }
939
940 static HRESULT WINAPI HTMLInputTextElement_get_defaultValue(IHTMLInputTextElement *iface, BSTR *p)
941 {
942     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
943
944     TRACE("(%p)->(%p)\n", This, p);
945
946     return IHTMLInputElement_get_defaultValue(HTMLINPUT(This), p);
947 }
948
949 static HRESULT WINAPI HTMLInputTextElement_put_size(IHTMLInputTextElement *iface, LONG v)
950 {
951     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
952
953     TRACE("(%p)->(%d)\n", This, v);
954
955     return IHTMLInputElement_put_size(HTMLINPUT(This), v);
956 }
957
958 static HRESULT WINAPI HTMLInputTextElement_get_size(IHTMLInputTextElement *iface, LONG *p)
959 {
960     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
961
962     TRACE("(%p)->(%p)\n", This, p);
963
964     return IHTMLInputElement_get_size(HTMLINPUT(This), p);
965 }
966
967 static HRESULT WINAPI HTMLInputTextElement_put_maxLength(IHTMLInputTextElement *iface, LONG v)
968 {
969     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
970
971     TRACE("(%p)->(%d)\n", This, v);
972
973     return IHTMLInputElement_put_maxLength(HTMLINPUT(This), v);
974 }
975
976 static HRESULT WINAPI HTMLInputTextElement_get_maxLength(IHTMLInputTextElement *iface, LONG *p)
977 {
978     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
979
980     TRACE("(%p)->(%p)\n", This, p);
981
982     return IHTMLInputElement_get_maxLength(HTMLINPUT(This), p);
983 }
984
985 static HRESULT WINAPI HTMLInputTextElement_select(IHTMLInputTextElement *iface)
986 {
987     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
988
989     TRACE("(%p)\n", This);
990
991     return IHTMLInputElement_select(HTMLINPUT(This));
992 }
993
994 static HRESULT WINAPI HTMLInputTextElement_put_onchange(IHTMLInputTextElement *iface, VARIANT v)
995 {
996     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
997
998     TRACE("(%p)->()\n", This);
999
1000     return IHTMLInputElement_put_onchange(HTMLINPUT(This), v);
1001 }
1002
1003 static HRESULT WINAPI HTMLInputTextElement_get_onchange(IHTMLInputTextElement *iface, VARIANT *p)
1004 {
1005     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1006
1007     TRACE("(%p)->(%p)\n", This, p);
1008
1009     return IHTMLInputElement_get_onchange(HTMLINPUT(This), p);
1010 }
1011
1012 static HRESULT WINAPI HTMLInputTextElement_put_onselect(IHTMLInputTextElement *iface, VARIANT v)
1013 {
1014     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1015
1016     TRACE("(%p)->()\n", This);
1017
1018     return IHTMLInputElement_put_onselect(HTMLINPUT(This), v);
1019 }
1020
1021 static HRESULT WINAPI HTMLInputTextElement_get_onselect(IHTMLInputTextElement *iface, VARIANT *p)
1022 {
1023     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1024
1025     TRACE("(%p)->(%p)\n", This, p);
1026
1027     return IHTMLInputElement_get_onselect(HTMLINPUT(This), p);
1028 }
1029
1030 static HRESULT WINAPI HTMLInputTextElement_put_readOnly(IHTMLInputTextElement *iface, VARIANT_BOOL v)
1031 {
1032     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1033
1034     TRACE("(%p)->(%x)\n", This, v);
1035
1036     return IHTMLInputElement_put_readOnly(HTMLINPUT(This), v);
1037 }
1038
1039 static HRESULT WINAPI HTMLInputTextElement_get_readOnly(IHTMLInputTextElement *iface, VARIANT_BOOL *p)
1040 {
1041     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1042
1043     TRACE("(%p)->(%p)\n", This, p);
1044
1045     return IHTMLInputElement_get_readOnly(HTMLINPUT(This), p);
1046 }
1047
1048 static HRESULT WINAPI HTMLInputTextElement_createTextRange(IHTMLInputTextElement *iface, IHTMLTxtRange **range)
1049 {
1050     HTMLInputElement *This = HTMLINPUTTEXT_THIS(iface);
1051
1052     TRACE("(%p)->(%p)\n", This, range);
1053
1054     return IHTMLInputElement_createTextRange(HTMLINPUT(This), range);
1055 }
1056
1057 #undef HTMLINPUT_THIS
1058
1059 static const IHTMLInputTextElementVtbl HTMLInputTextElementVtbl = {
1060     HTMLInputTextElement_QueryInterface,
1061     HTMLInputTextElement_AddRef,
1062     HTMLInputTextElement_Release,
1063     HTMLInputTextElement_GetTypeInfoCount,
1064     HTMLInputTextElement_GetTypeInfo,
1065     HTMLInputTextElement_GetIDsOfNames,
1066     HTMLInputTextElement_Invoke,
1067     HTMLInputTextElement_get_type,
1068     HTMLInputTextElement_put_value,
1069     HTMLInputTextElement_get_value,
1070     HTMLInputTextElement_put_name,
1071     HTMLInputTextElement_get_name,
1072     HTMLInputTextElement_put_status,
1073     HTMLInputTextElement_get_status,
1074     HTMLInputTextElement_put_disabled,
1075     HTMLInputTextElement_get_disabled,
1076     HTMLInputTextElement_get_form,
1077     HTMLInputTextElement_put_defaultValue,
1078     HTMLInputTextElement_get_defaultValue,
1079     HTMLInputTextElement_put_size,
1080     HTMLInputTextElement_get_size,
1081     HTMLInputTextElement_put_maxLength,
1082     HTMLInputTextElement_get_maxLength,
1083     HTMLInputTextElement_select,
1084     HTMLInputTextElement_put_onchange,
1085     HTMLInputTextElement_get_onchange,
1086     HTMLInputTextElement_put_onselect,
1087     HTMLInputTextElement_get_onselect,
1088     HTMLInputTextElement_put_readOnly,
1089     HTMLInputTextElement_get_readOnly,
1090     HTMLInputTextElement_createTextRange
1091 };
1092
1093 #define HTMLINPUT_NODE_THIS(iface) DEFINE_THIS2(HTMLInputElement, element.node, iface)
1094
1095 static HRESULT HTMLInputElement_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
1096 {
1097     HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface);
1098
1099     *ppv = NULL;
1100
1101     if(IsEqualGUID(&IID_IUnknown, riid)) {
1102         TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
1103         *ppv = HTMLINPUT(This);
1104     }else if(IsEqualGUID(&IID_IDispatch, riid)) {
1105         TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
1106         *ppv = HTMLINPUT(This);
1107     }else if(IsEqualGUID(&IID_IHTMLInputElement, riid)) {
1108         TRACE("(%p)->(IID_IHTMLInputElement %p)\n", This, ppv);
1109         *ppv = HTMLINPUT(This);
1110     }else if(IsEqualGUID(&IID_IHTMLInputTextElement, riid)) {
1111         TRACE("(%p)->(IID_IHTMLInputTextElement %p)\n", This, ppv);
1112         *ppv = HTMLINPUTTEXT(This);
1113     }
1114
1115     if(*ppv) {
1116         IUnknown_AddRef((IUnknown*)*ppv);
1117         return S_OK;
1118     }
1119
1120     return HTMLElement_QI(&This->element.node, riid, ppv);
1121 }
1122
1123 static void HTMLInputElement_destructor(HTMLDOMNode *iface)
1124 {
1125     HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface);
1126
1127     nsIDOMHTMLInputElement_Release(This->nsinput);
1128
1129     HTMLElement_destructor(&This->element.node);
1130 }
1131
1132 static HRESULT HTMLInputElementImpl_put_disabled(HTMLDOMNode *iface, VARIANT_BOOL v)
1133 {
1134     HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface);
1135     return IHTMLInputElement_put_disabled(HTMLINPUT(This), v);
1136 }
1137
1138 static HRESULT HTMLInputElementImpl_get_disabled(HTMLDOMNode *iface, VARIANT_BOOL *p)
1139 {
1140     HTMLInputElement *This = HTMLINPUT_NODE_THIS(iface);
1141     return IHTMLInputElement_get_disabled(HTMLINPUT(This), p);
1142 }
1143
1144 #undef HTMLINPUT_NODE_THIS
1145
1146 static const NodeImplVtbl HTMLInputElementImplVtbl = {
1147     HTMLInputElement_QI,
1148     HTMLInputElement_destructor,
1149     NULL,
1150     HTMLInputElementImpl_put_disabled,
1151     HTMLInputElementImpl_get_disabled,
1152 };
1153
1154 static const tid_t HTMLInputElement_iface_tids[] = {
1155     IHTMLDOMNode_tid,
1156     IHTMLDOMNode2_tid,
1157     IHTMLElement_tid,
1158     IHTMLElement2_tid,
1159     IHTMLElement3_tid,
1160     IHTMLInputElement_tid,
1161     0
1162 };
1163 static dispex_static_data_t HTMLInputElement_dispex = {
1164     NULL,
1165     DispHTMLInputElement_tid,
1166     NULL,
1167     HTMLInputElement_iface_tids
1168 };
1169
1170 HTMLElement *HTMLInputElement_Create(nsIDOMHTMLElement *nselem)
1171 {
1172     HTMLInputElement *ret = heap_alloc_zero(sizeof(HTMLInputElement));
1173     nsresult nsres;
1174
1175     ret->lpHTMLInputElementVtbl = &HTMLInputElementVtbl;
1176     ret->lpHTMLInputTextElementVtbl = &HTMLInputTextElementVtbl;
1177     ret->element.node.vtbl = &HTMLInputElementImplVtbl;
1178
1179     init_dispex(&ret->element.node.dispex, (IUnknown*)HTMLINPUT(ret), &HTMLInputElement_dispex);
1180     HTMLElement_Init(&ret->element);
1181
1182     nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLInputElement,
1183                                              (void**)&ret->nsinput);
1184     if(NS_FAILED(nsres))
1185         ERR("Could not get nsIDOMHTMLInputElement interface: %08x\n", nsres);
1186
1187     return &ret->element;
1188 }