d3dx9: Improve the scoring for fallback formats.
[wine/multimedia.git] / dlls / mshtml / htmlelem3.c
blobbcd6eb2d529397b502c5a419849a93f4913453a0
1 /*
2 * Copyright 2008 Jacek Caban 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
19 #include <stdarg.h>
21 #define COBJMACROS
23 #include "windef.h"
24 #include "winbase.h"
25 #include "winuser.h"
26 #include "ole2.h"
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
31 #include "htmlevent.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
35 static inline HTMLElement *impl_from_IHTMLElement3(IHTMLElement3 *iface)
37 return CONTAINING_RECORD(iface, HTMLElement, IHTMLElement3_iface);
40 static HRESULT WINAPI HTMLElement3_QueryInterface(IHTMLElement3 *iface,
41 REFIID riid, void **ppv)
43 HTMLElement *This = impl_from_IHTMLElement3(iface);
44 return IHTMLElement_QueryInterface(&This->IHTMLElement_iface, riid, ppv);
47 static ULONG WINAPI HTMLElement3_AddRef(IHTMLElement3 *iface)
49 HTMLElement *This = impl_from_IHTMLElement3(iface);
50 return IHTMLElement_AddRef(&This->IHTMLElement_iface);
53 static ULONG WINAPI HTMLElement3_Release(IHTMLElement3 *iface)
55 HTMLElement *This = impl_from_IHTMLElement3(iface);
56 return IHTMLElement_Release(&This->IHTMLElement_iface);
59 static HRESULT WINAPI HTMLElement3_GetTypeInfoCount(IHTMLElement3 *iface, UINT *pctinfo)
61 HTMLElement *This = impl_from_IHTMLElement3(iface);
62 return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
65 static HRESULT WINAPI HTMLElement3_GetTypeInfo(IHTMLElement3 *iface, UINT iTInfo,
66 LCID lcid, ITypeInfo **ppTInfo)
68 HTMLElement *This = impl_from_IHTMLElement3(iface);
69 return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
72 static HRESULT WINAPI HTMLElement3_GetIDsOfNames(IHTMLElement3 *iface, REFIID riid,
73 LPOLESTR *rgszNames, UINT cNames,
74 LCID lcid, DISPID *rgDispId)
76 HTMLElement *This = impl_from_IHTMLElement3(iface);
77 return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
78 lcid, rgDispId);
81 static HRESULT WINAPI HTMLElement3_Invoke(IHTMLElement3 *iface, DISPID dispIdMember,
82 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
83 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
85 HTMLElement *This = impl_from_IHTMLElement3(iface);
86 return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
87 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
90 static HRESULT WINAPI HTMLElement3_mergeAttributes(IHTMLElement3 *iface, IHTMLElement *mergeThis, VARIANT *pvarFlags)
92 HTMLElement *This = impl_from_IHTMLElement3(iface);
93 FIXME("(%p)->(%p %p)\n", This, mergeThis, pvarFlags);
94 return E_NOTIMPL;
97 static HRESULT WINAPI HTMLElement3_get_isMultiLine(IHTMLElement3 *iface, VARIANT_BOOL *p)
99 HTMLElement *This = impl_from_IHTMLElement3(iface);
100 FIXME("(%p)->(%p)\n", This, p);
101 return E_NOTIMPL;
104 static HRESULT WINAPI HTMLElement3_get_canHaveHTML(IHTMLElement3 *iface, VARIANT_BOOL *p)
106 HTMLElement *This = impl_from_IHTMLElement3(iface);
107 FIXME("(%p)->(%p)\n", This, p);
108 return E_NOTIMPL;
111 static HRESULT WINAPI HTMLElement3_put_onlayoutcomplete(IHTMLElement3 *iface, VARIANT v)
113 HTMLElement *This = impl_from_IHTMLElement3(iface);
114 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
115 return E_NOTIMPL;
118 static HRESULT WINAPI HTMLElement3_get_onlayoutcomplete(IHTMLElement3 *iface, VARIANT *p)
120 HTMLElement *This = impl_from_IHTMLElement3(iface);
121 FIXME("(%p)->(%p)\n", This, p);
122 return E_NOTIMPL;
125 static HRESULT WINAPI HTMLElement3_put_onpage(IHTMLElement3 *iface, VARIANT v)
127 HTMLElement *This = impl_from_IHTMLElement3(iface);
128 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
129 return E_NOTIMPL;
132 static HRESULT WINAPI HTMLElement3_get_onpage(IHTMLElement3 *iface, VARIANT *p)
134 HTMLElement *This = impl_from_IHTMLElement3(iface);
135 FIXME("(%p)->(%p)\n", This, p);
136 return E_NOTIMPL;
139 static HRESULT WINAPI HTMLElement3_put_inflateBlock(IHTMLElement3 *iface, VARIANT_BOOL v)
141 HTMLElement *This = impl_from_IHTMLElement3(iface);
142 FIXME("(%p)->(%x)\n", This, v);
143 return E_NOTIMPL;
146 static HRESULT WINAPI HTMLElement3_get_inflateBlock(IHTMLElement3 *iface, VARIANT_BOOL *p)
148 HTMLElement *This = impl_from_IHTMLElement3(iface);
149 FIXME("(%p)->(%p)\n", This, p);
150 return E_NOTIMPL;
153 static HRESULT WINAPI HTMLElement3_put_onbeforedeactivate(IHTMLElement3 *iface, VARIANT v)
155 HTMLElement *This = impl_from_IHTMLElement3(iface);
156 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
157 return E_NOTIMPL;
160 static HRESULT WINAPI HTMLElement3_get_onbeforedeactivate(IHTMLElement3 *iface, VARIANT *p)
162 HTMLElement *This = impl_from_IHTMLElement3(iface);
163 FIXME("(%p)->(%p)\n", This, p);
164 return E_NOTIMPL;
167 static HRESULT WINAPI HTMLElement3_setActive(IHTMLElement3 *iface)
169 HTMLElement *This = impl_from_IHTMLElement3(iface);
170 FIXME("(%p)\n", This);
171 return E_NOTIMPL;
174 static HRESULT WINAPI HTMLElement3_put_contentEditable(IHTMLElement3 *iface, BSTR v)
176 HTMLElement *This = impl_from_IHTMLElement3(iface);
177 nsresult nsres;
178 nsAString str;
180 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
182 nsAString_InitDepend(&str, v);
183 nsres = nsIDOMHTMLElement_SetContentEditable(This->nselem, &str);
184 nsAString_Finish(&str);
186 if (NS_FAILED(nsres)){
187 ERR("SetContentEditable(%s) failed!\n", debugstr_w(v));
188 return E_FAIL;
191 return S_OK;
194 static HRESULT WINAPI HTMLElement3_get_contentEditable(IHTMLElement3 *iface, BSTR *p)
196 HTMLElement *This = impl_from_IHTMLElement3(iface);
197 nsresult nsres;
198 nsAString str;
200 TRACE("(%p)->(%p)\n", This, p);
202 nsAString_Init(&str, NULL);
203 nsres = nsIDOMHTMLElement_GetContentEditable(This->nselem, &str);
204 return return_nsstr(nsres, &str, p);
207 static HRESULT WINAPI HTMLElement3_get_isContentEditable(IHTMLElement3 *iface, VARIANT_BOOL *p)
209 HTMLElement *This = impl_from_IHTMLElement3(iface);
210 FIXME("(%p)->(%p)\n", This, p);
211 return E_NOTIMPL;
214 static HRESULT WINAPI HTMLElement3_put_hideFocus(IHTMLElement3 *iface, VARIANT_BOOL v)
216 HTMLElement *This = impl_from_IHTMLElement3(iface);
217 FIXME("(%p)->(%x)\n", This, v);
218 return E_NOTIMPL;
221 static HRESULT WINAPI HTMLElement3_get_hideFocus(IHTMLElement3 *iface, VARIANT_BOOL *p)
223 HTMLElement *This = impl_from_IHTMLElement3(iface);
224 FIXME("(%p)->(%p)\n", This, p);
225 return E_NOTIMPL;
228 static const WCHAR disabledW[] = {'d','i','s','a','b','l','e','d',0};
230 static HRESULT WINAPI HTMLElement3_put_disabled(IHTMLElement3 *iface, VARIANT_BOOL v)
232 HTMLElement *This = impl_from_IHTMLElement3(iface);
233 VARIANT *var;
234 HRESULT hres;
236 TRACE("(%p)->(%x)\n", This, v);
238 if(This->node.vtbl->put_disabled)
239 return This->node.vtbl->put_disabled(&This->node, v);
241 hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, TRUE, &var);
242 if(FAILED(hres))
243 return hres;
245 VariantClear(var);
246 V_VT(var) = VT_BOOL;
247 V_BOOL(var) = v;
248 return S_OK;
251 static HRESULT WINAPI HTMLElement3_get_disabled(IHTMLElement3 *iface, VARIANT_BOOL *p)
253 HTMLElement *This = impl_from_IHTMLElement3(iface);
254 VARIANT *var;
255 HRESULT hres;
257 TRACE("(%p)->(%p)\n", This, p);
259 if(This->node.vtbl->get_disabled)
260 return This->node.vtbl->get_disabled(&This->node, p);
262 hres = dispex_get_dprop_ref(&This->node.dispex, disabledW, FALSE, &var);
263 if(hres == DISP_E_UNKNOWNNAME) {
264 *p = VARIANT_FALSE;
265 return S_OK;
267 if(FAILED(hres))
268 return hres;
270 if(V_VT(var) != VT_BOOL) {
271 FIXME("value is %s\n", debugstr_variant(var));
272 return E_NOTIMPL;
275 *p = V_BOOL(var);
276 return S_OK;
279 static HRESULT WINAPI HTMLElement3_get_isDisabled(IHTMLElement3 *iface, VARIANT_BOOL *p)
281 HTMLElement *This = impl_from_IHTMLElement3(iface);
282 FIXME("(%p)->(%p)\n", This, p);
283 return E_NOTIMPL;
286 static HRESULT WINAPI HTMLElement3_put_onmove(IHTMLElement3 *iface, VARIANT v)
288 HTMLElement *This = impl_from_IHTMLElement3(iface);
289 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
290 return E_NOTIMPL;
293 static HRESULT WINAPI HTMLElement3_get_onmove(IHTMLElement3 *iface, VARIANT *p)
295 HTMLElement *This = impl_from_IHTMLElement3(iface);
296 FIXME("(%p)->(%p)\n", This, p);
297 return E_NOTIMPL;
300 static HRESULT WINAPI HTMLElement3_put_oncontrolselect(IHTMLElement3 *iface, VARIANT v)
302 HTMLElement *This = impl_from_IHTMLElement3(iface);
303 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
304 return E_NOTIMPL;
307 static HRESULT WINAPI HTMLElement3_get_oncontrolselect(IHTMLElement3 *iface, VARIANT *p)
309 HTMLElement *This = impl_from_IHTMLElement3(iface);
310 FIXME("(%p)->(%p)\n", This, p);
311 return E_NOTIMPL;
314 static HRESULT WINAPI HTMLElement3_fireEvent(IHTMLElement3 *iface, BSTR bstrEventName,
315 VARIANT *pvarEventObject, VARIANT_BOOL *pfCancelled)
317 HTMLElement *This = impl_from_IHTMLElement3(iface);
319 TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(bstrEventName), debugstr_variant(pvarEventObject),
320 pfCancelled);
322 return dispatch_event(&This->node, bstrEventName, pvarEventObject, pfCancelled);
325 static HRESULT WINAPI HTMLElement3_put_onresizestart(IHTMLElement3 *iface, VARIANT v)
327 HTMLElement *This = impl_from_IHTMLElement3(iface);
328 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
329 return E_NOTIMPL;
332 static HRESULT WINAPI HTMLElement3_get_onresizestart(IHTMLElement3 *iface, VARIANT *p)
334 HTMLElement *This = impl_from_IHTMLElement3(iface);
335 FIXME("(%p)->(%p)\n", This, p);
336 return E_NOTIMPL;
339 static HRESULT WINAPI HTMLElement3_put_onresizeend(IHTMLElement3 *iface, VARIANT v)
341 HTMLElement *This = impl_from_IHTMLElement3(iface);
342 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
343 return E_NOTIMPL;
346 static HRESULT WINAPI HTMLElement3_get_onresizeend(IHTMLElement3 *iface, VARIANT *p)
348 HTMLElement *This = impl_from_IHTMLElement3(iface);
349 FIXME("(%p)->(%p)\n", This, p);
350 return E_NOTIMPL;
353 static HRESULT WINAPI HTMLElement3_put_onmovestart(IHTMLElement3 *iface, VARIANT v)
355 HTMLElement *This = impl_from_IHTMLElement3(iface);
356 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
357 return E_NOTIMPL;
360 static HRESULT WINAPI HTMLElement3_get_onmovestart(IHTMLElement3 *iface, VARIANT *p)
362 HTMLElement *This = impl_from_IHTMLElement3(iface);
363 FIXME("(%p)->(%p)\n", This, p);
364 return E_NOTIMPL;
367 static HRESULT WINAPI HTMLElement3_put_onmoveend(IHTMLElement3 *iface, VARIANT v)
369 HTMLElement *This = impl_from_IHTMLElement3(iface);
370 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
371 return E_NOTIMPL;
374 static HRESULT WINAPI HTMLElement3_get_onmoveend(IHTMLElement3 *iface, VARIANT *p)
376 HTMLElement *This = impl_from_IHTMLElement3(iface);
377 FIXME("(%p)->(%p)\n", This, p);
378 return E_NOTIMPL;
381 static HRESULT WINAPI HTMLElement3_put_onmousecenter(IHTMLElement3 *iface, VARIANT v)
383 HTMLElement *This = impl_from_IHTMLElement3(iface);
384 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
385 return E_NOTIMPL;
388 static HRESULT WINAPI HTMLElement3_get_onmousecenter(IHTMLElement3 *iface, VARIANT *p)
390 HTMLElement *This = impl_from_IHTMLElement3(iface);
391 FIXME("(%p)->(%p)\n", This, p);
392 return E_NOTIMPL;
395 static HRESULT WINAPI HTMLElement3_put_onmouseleave(IHTMLElement3 *iface, VARIANT v)
397 HTMLElement *This = impl_from_IHTMLElement3(iface);
398 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
399 return E_NOTIMPL;
402 static HRESULT WINAPI HTMLElement3_get_onmouseleave(IHTMLElement3 *iface, VARIANT *p)
404 HTMLElement *This = impl_from_IHTMLElement3(iface);
405 FIXME("(%p)->(%p)\n", This, p);
406 return E_NOTIMPL;
409 static HRESULT WINAPI HTMLElement3_put_onactivate(IHTMLElement3 *iface, VARIANT v)
411 HTMLElement *This = impl_from_IHTMLElement3(iface);
412 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
413 return E_NOTIMPL;
416 static HRESULT WINAPI HTMLElement3_get_onactivate(IHTMLElement3 *iface, VARIANT *p)
418 HTMLElement *This = impl_from_IHTMLElement3(iface);
419 FIXME("(%p)->(%p)\n", This, p);
420 return E_NOTIMPL;
423 static HRESULT WINAPI HTMLElement3_put_ondeactivate(IHTMLElement3 *iface, VARIANT v)
425 HTMLElement *This = impl_from_IHTMLElement3(iface);
426 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
427 return E_NOTIMPL;
430 static HRESULT WINAPI HTMLElement3_get_ondeactivate(IHTMLElement3 *iface, VARIANT *p)
432 HTMLElement *This = impl_from_IHTMLElement3(iface);
433 FIXME("(%p)->(%p)\n", This, p);
434 return E_NOTIMPL;
437 static HRESULT WINAPI HTMLElement3_dragDrop(IHTMLElement3 *iface, VARIANT_BOOL *pfRet)
439 HTMLElement *This = impl_from_IHTMLElement3(iface);
440 FIXME("(%p)->(%p)\n", This, pfRet);
441 return E_NOTIMPL;
444 static HRESULT WINAPI HTMLElement3_get_glyphMode(IHTMLElement3 *iface, LONG *p)
446 HTMLElement *This = impl_from_IHTMLElement3(iface);
447 FIXME("(%p)->(%p)\n", This, p);
448 return E_NOTIMPL;
451 static const IHTMLElement3Vtbl HTMLElement3Vtbl = {
452 HTMLElement3_QueryInterface,
453 HTMLElement3_AddRef,
454 HTMLElement3_Release,
455 HTMLElement3_GetTypeInfoCount,
456 HTMLElement3_GetTypeInfo,
457 HTMLElement3_GetIDsOfNames,
458 HTMLElement3_Invoke,
459 HTMLElement3_mergeAttributes,
460 HTMLElement3_get_isMultiLine,
461 HTMLElement3_get_canHaveHTML,
462 HTMLElement3_put_onlayoutcomplete,
463 HTMLElement3_get_onlayoutcomplete,
464 HTMLElement3_put_onpage,
465 HTMLElement3_get_onpage,
466 HTMLElement3_put_inflateBlock,
467 HTMLElement3_get_inflateBlock,
468 HTMLElement3_put_onbeforedeactivate,
469 HTMLElement3_get_onbeforedeactivate,
470 HTMLElement3_setActive,
471 HTMLElement3_put_contentEditable,
472 HTMLElement3_get_contentEditable,
473 HTMLElement3_get_isContentEditable,
474 HTMLElement3_put_hideFocus,
475 HTMLElement3_get_hideFocus,
476 HTMLElement3_put_disabled,
477 HTMLElement3_get_disabled,
478 HTMLElement3_get_isDisabled,
479 HTMLElement3_put_onmove,
480 HTMLElement3_get_onmove,
481 HTMLElement3_put_oncontrolselect,
482 HTMLElement3_get_oncontrolselect,
483 HTMLElement3_fireEvent,
484 HTMLElement3_put_onresizestart,
485 HTMLElement3_get_onresizestart,
486 HTMLElement3_put_onresizeend,
487 HTMLElement3_get_onresizeend,
488 HTMLElement3_put_onmovestart,
489 HTMLElement3_get_onmovestart,
490 HTMLElement3_put_onmoveend,
491 HTMLElement3_get_onmoveend,
492 HTMLElement3_put_onmousecenter,
493 HTMLElement3_get_onmousecenter,
494 HTMLElement3_put_onmouseleave,
495 HTMLElement3_get_onmouseleave,
496 HTMLElement3_put_onactivate,
497 HTMLElement3_get_onactivate,
498 HTMLElement3_put_ondeactivate,
499 HTMLElement3_get_ondeactivate,
500 HTMLElement3_dragDrop,
501 HTMLElement3_get_glyphMode
504 static inline HTMLElement *impl_from_IHTMLElement4(IHTMLElement4 *iface)
506 return CONTAINING_RECORD(iface, HTMLElement, IHTMLElement4_iface);
509 static HRESULT WINAPI HTMLElement4_QueryInterface(IHTMLElement4 *iface,
510 REFIID riid, void **ppv)
512 HTMLElement *This = impl_from_IHTMLElement4(iface);
513 return IHTMLElement_QueryInterface(&This->IHTMLElement_iface, riid, ppv);
516 static ULONG WINAPI HTMLElement4_AddRef(IHTMLElement4 *iface)
518 HTMLElement *This = impl_from_IHTMLElement4(iface);
519 return IHTMLElement_AddRef(&This->IHTMLElement_iface);
522 static ULONG WINAPI HTMLElement4_Release(IHTMLElement4 *iface)
524 HTMLElement *This = impl_from_IHTMLElement4(iface);
525 return IHTMLElement_Release(&This->IHTMLElement_iface);
528 static HRESULT WINAPI HTMLElement4_GetTypeInfoCount(IHTMLElement4 *iface, UINT *pctinfo)
530 HTMLElement *This = impl_from_IHTMLElement4(iface);
531 return IDispatchEx_GetTypeInfoCount(&This->node.dispex.IDispatchEx_iface, pctinfo);
534 static HRESULT WINAPI HTMLElement4_GetTypeInfo(IHTMLElement4 *iface, UINT iTInfo,
535 LCID lcid, ITypeInfo **ppTInfo)
537 HTMLElement *This = impl_from_IHTMLElement4(iface);
538 return IDispatchEx_GetTypeInfo(&This->node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
541 static HRESULT WINAPI HTMLElement4_GetIDsOfNames(IHTMLElement4 *iface, REFIID riid,
542 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
544 HTMLElement *This = impl_from_IHTMLElement4(iface);
545 return IDispatchEx_GetIDsOfNames(&This->node.dispex.IDispatchEx_iface, riid, rgszNames, cNames,
546 lcid, rgDispId);
549 static HRESULT WINAPI HTMLElement4_Invoke(IHTMLElement4 *iface, DISPID dispIdMember, REFIID riid,
550 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
552 HTMLElement *This = impl_from_IHTMLElement4(iface);
553 return IDispatchEx_Invoke(&This->node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid,
554 wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
557 static HRESULT WINAPI HTMLElement4_put_onmousewheel(IHTMLElement4 *iface, VARIANT v)
559 HTMLElement *This = impl_from_IHTMLElement4(iface);
561 FIXME("(%p)->(%s) semi-stub\n", This, debugstr_variant(&v));
563 return set_node_event(&This->node, EVENTID_MOUSEWHEEL, &v);
566 static HRESULT WINAPI HTMLElement4_get_onmousewheel(IHTMLElement4 *iface, VARIANT *p)
568 HTMLElement *This = impl_from_IHTMLElement4(iface);
570 TRACE("(%p)->(%p)\n", This, p);
572 return get_node_event(&This->node, EVENTID_MOUSEWHEEL, p);
575 static HRESULT WINAPI HTMLElement4_normalize(IHTMLElement4 *iface)
577 HTMLElement *This = impl_from_IHTMLElement4(iface);
578 FIXME("(%p)\n", This);
579 return E_NOTIMPL;
582 static HRESULT WINAPI HTMLElement4_getAttributeNode(IHTMLElement4 *iface, BSTR bstrname, IHTMLDOMAttribute **ppAttribute)
584 HTMLElement *This = impl_from_IHTMLElement4(iface);
585 HTMLAttributeCollection *attrs;
586 HRESULT hres;
588 TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrname), ppAttribute);
590 hres = HTMLElement_get_attr_col(&This->node, &attrs);
591 if(FAILED(hres))
592 return hres;
594 hres = IHTMLAttributeCollection2_getNamedItem(&attrs->IHTMLAttributeCollection2_iface, bstrname, ppAttribute);
595 IHTMLAttributeCollection_Release(&attrs->IHTMLAttributeCollection_iface);
596 return hres;
599 static HRESULT WINAPI HTMLElement4_setAttributeNode(IHTMLElement4 *iface, IHTMLDOMAttribute *pattr,
600 IHTMLDOMAttribute **ppretAttribute)
602 HTMLElement *This = impl_from_IHTMLElement4(iface);
603 FIXME("(%p)->(%p %p)\n", This, pattr, ppretAttribute);
604 return E_NOTIMPL;
607 static HRESULT WINAPI HTMLElement4_removeAttributeNode(IHTMLElement4 *iface, IHTMLDOMAttribute *pattr,
608 IHTMLDOMAttribute **ppretAttribute)
610 HTMLElement *This = impl_from_IHTMLElement4(iface);
611 FIXME("(%p)->(%p %p)\n", This, pattr, ppretAttribute);
612 return E_NOTIMPL;
615 static HRESULT WINAPI HTMLElement4_put_onbeforeactivate(IHTMLElement4 *iface, VARIANT v)
617 HTMLElement *This = impl_from_IHTMLElement4(iface);
618 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
619 return E_NOTIMPL;
622 static HRESULT WINAPI HTMLElement4_get_onbeforeactivate(IHTMLElement4 *iface, VARIANT *p)
624 HTMLElement *This = impl_from_IHTMLElement4(iface);
625 FIXME("(%p)->(%p)\n", This, p);
626 return E_NOTIMPL;
629 static HRESULT WINAPI HTMLElement4_put_onfocusin(IHTMLElement4 *iface, VARIANT v)
631 HTMLElement *This = impl_from_IHTMLElement4(iface);
632 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
633 return E_NOTIMPL;
636 static HRESULT WINAPI HTMLElement4_get_onfocusin(IHTMLElement4 *iface, VARIANT *p)
638 HTMLElement *This = impl_from_IHTMLElement4(iface);
639 FIXME("(%p)->(%p)\n", This, p);
640 return E_NOTIMPL;
643 static HRESULT WINAPI HTMLElement4_put_onfocusout(IHTMLElement4 *iface, VARIANT v)
645 HTMLElement *This = impl_from_IHTMLElement4(iface);
646 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
647 return E_NOTIMPL;
650 static HRESULT WINAPI HTMLElement4_get_onfocusout(IHTMLElement4 *iface, VARIANT *p)
652 HTMLElement *This = impl_from_IHTMLElement4(iface);
653 FIXME("(%p)->(%p)\n", This, p);
654 return E_NOTIMPL;
657 static const IHTMLElement4Vtbl HTMLElement4Vtbl = {
658 HTMLElement4_QueryInterface,
659 HTMLElement4_AddRef,
660 HTMLElement4_Release,
661 HTMLElement4_GetTypeInfoCount,
662 HTMLElement4_GetTypeInfo,
663 HTMLElement4_GetIDsOfNames,
664 HTMLElement4_Invoke,
665 HTMLElement4_put_onmousewheel,
666 HTMLElement4_get_onmousewheel,
667 HTMLElement4_normalize,
668 HTMLElement4_getAttributeNode,
669 HTMLElement4_setAttributeNode,
670 HTMLElement4_removeAttributeNode,
671 HTMLElement4_put_onbeforeactivate,
672 HTMLElement4_get_onbeforeactivate,
673 HTMLElement4_put_onfocusin,
674 HTMLElement4_get_onfocusin,
675 HTMLElement4_put_onfocusout,
676 HTMLElement4_get_onfocusout
679 void HTMLElement3_Init(HTMLElement *This)
681 This->IHTMLElement3_iface.lpVtbl = &HTMLElement3Vtbl;
682 This->IHTMLElement4_iface.lpVtbl = &HTMLElement4Vtbl;