2 * Copyright 2007 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
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
37 const IHTMLTableVtbl *lpHTMLTableVtbl;
40 nsIDOMHTMLTableElement *nstable;
43 #define HTMLTABLE(x) (&(x)->lpHTMLTableVtbl)
45 #define HTMLTABLE_THIS(iface) DEFINE_THIS(HTMLTable, HTMLTable, iface)
47 static HRESULT WINAPI HTMLTable_QueryInterface(IHTMLTable *iface,
48 REFIID riid, void **ppv)
50 HTMLTable *This = HTMLTABLE_THIS(iface);
52 return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv);
55 static ULONG WINAPI HTMLTable_AddRef(IHTMLTable *iface)
57 HTMLTable *This = HTMLTABLE_THIS(iface);
59 return IHTMLDOMNode_AddRef(&This->element.node.IHTMLDOMNode_iface);
62 static ULONG WINAPI HTMLTable_Release(IHTMLTable *iface)
64 HTMLTable *This = HTMLTABLE_THIS(iface);
66 return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface);
69 static HRESULT WINAPI HTMLTable_GetTypeInfoCount(IHTMLTable *iface, UINT *pctinfo)
71 HTMLTable *This = HTMLTABLE_THIS(iface);
72 return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
75 static HRESULT WINAPI HTMLTable_GetTypeInfo(IHTMLTable *iface, UINT iTInfo,
76 LCID lcid, ITypeInfo **ppTInfo)
78 HTMLTable *This = HTMLTABLE_THIS(iface);
79 return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
83 static HRESULT WINAPI HTMLTable_GetIDsOfNames(IHTMLTable *iface, REFIID riid,
84 LPOLESTR *rgszNames, UINT cNames,
85 LCID lcid, DISPID *rgDispId)
87 HTMLTable *This = HTMLTABLE_THIS(iface);
88 return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
89 cNames, lcid, rgDispId);
92 static HRESULT WINAPI HTMLTable_Invoke(IHTMLTable *iface, DISPID dispIdMember,
93 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
94 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
96 HTMLTable *This = HTMLTABLE_THIS(iface);
97 return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
98 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
101 static HRESULT WINAPI HTMLTable_put_cols(IHTMLTable *iface, LONG v)
103 HTMLTable *This = HTMLTABLE_THIS(iface);
104 FIXME("(%p)->(%d)\n", This, v);
108 static HRESULT WINAPI HTMLTable_get_cols(IHTMLTable *iface, LONG *p)
110 HTMLTable *This = HTMLTABLE_THIS(iface);
111 FIXME("(%p)->(%p)\n", This, p);
115 static HRESULT WINAPI HTMLTable_put_border(IHTMLTable *iface, VARIANT v)
117 HTMLTable *This = HTMLTABLE_THIS(iface);
118 FIXME("(%p)->(v)\n", This);
122 static HRESULT WINAPI HTMLTable_get_border(IHTMLTable *iface, VARIANT *p)
124 HTMLTable *This = HTMLTABLE_THIS(iface);
125 FIXME("(%p)->(%p)\n", This, p);
129 static HRESULT WINAPI HTMLTable_put_frame(IHTMLTable *iface, BSTR v)
131 HTMLTable *This = HTMLTABLE_THIS(iface);
132 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
136 static HRESULT WINAPI HTMLTable_get_frame(IHTMLTable *iface, BSTR *p)
138 HTMLTable *This = HTMLTABLE_THIS(iface);
139 FIXME("(%p)->(%p)\n", This, p);
143 static HRESULT WINAPI HTMLTable_put_rules(IHTMLTable *iface, BSTR v)
145 HTMLTable *This = HTMLTABLE_THIS(iface);
146 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
150 static HRESULT WINAPI HTMLTable_get_rules(IHTMLTable *iface, BSTR *p)
152 HTMLTable *This = HTMLTABLE_THIS(iface);
153 FIXME("(%p)->(%p)\n", This, p);
157 static HRESULT WINAPI HTMLTable_put_cellSpacing(IHTMLTable *iface, VARIANT v)
159 HTMLTable *This = HTMLTABLE_THIS(iface);
160 FIXME("(%p)->(v)\n", This);
164 static HRESULT WINAPI HTMLTable_get_cellSpacing(IHTMLTable *iface, VARIANT *p)
166 HTMLTable *This = HTMLTABLE_THIS(iface);
167 FIXME("(%p)->(%p)\n", This, p);
171 static HRESULT WINAPI HTMLTable_put_cellPadding(IHTMLTable *iface, VARIANT v)
173 HTMLTable *This = HTMLTABLE_THIS(iface);
174 FIXME("(%p)->(v)\n", This);
178 static HRESULT WINAPI HTMLTable_get_cellPadding(IHTMLTable *iface, VARIANT *p)
180 HTMLTable *This = HTMLTABLE_THIS(iface);
181 FIXME("(%p)->(%p)\n", This, p);
185 static HRESULT WINAPI HTMLTable_put_background(IHTMLTable *iface, BSTR v)
187 HTMLTable *This = HTMLTABLE_THIS(iface);
188 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
192 static HRESULT WINAPI HTMLTable_get_background(IHTMLTable *iface, BSTR *p)
194 HTMLTable *This = HTMLTABLE_THIS(iface);
195 FIXME("(%p)->(%p)\n", This, p);
199 static HRESULT WINAPI HTMLTable_put_bgColor(IHTMLTable *iface, VARIANT v)
201 HTMLTable *This = HTMLTABLE_THIS(iface);
202 FIXME("(%p)->(v)\n", This);
206 static HRESULT WINAPI HTMLTable_get_bgColor(IHTMLTable *iface, VARIANT *p)
208 HTMLTable *This = HTMLTABLE_THIS(iface);
209 FIXME("(%p)->(%p)\n", This, p);
213 static HRESULT WINAPI HTMLTable_put_borderColor(IHTMLTable *iface, VARIANT v)
215 HTMLTable *This = HTMLTABLE_THIS(iface);
216 FIXME("(%p)->(v)\n", This);
220 static HRESULT WINAPI HTMLTable_get_borderColor(IHTMLTable *iface, VARIANT *p)
222 HTMLTable *This = HTMLTABLE_THIS(iface);
223 FIXME("(%p)->(%p)\n", This, p);
227 static HRESULT WINAPI HTMLTable_put_borderColorLight(IHTMLTable *iface, VARIANT v)
229 HTMLTable *This = HTMLTABLE_THIS(iface);
230 FIXME("(%p)->(v)\n", This);
234 static HRESULT WINAPI HTMLTable_get_borderColorLight(IHTMLTable *iface, VARIANT *p)
236 HTMLTable *This = HTMLTABLE_THIS(iface);
237 FIXME("(%p)->(%p)\n", This, p);
241 static HRESULT WINAPI HTMLTable_put_borderColorDark(IHTMLTable *iface, VARIANT v)
243 HTMLTable *This = HTMLTABLE_THIS(iface);
244 FIXME("(%p)->(v)\n", This);
248 static HRESULT WINAPI HTMLTable_get_borderColorDark(IHTMLTable *iface, VARIANT *p)
250 HTMLTable *This = HTMLTABLE_THIS(iface);
251 FIXME("(%p)->(%p)\n", This, p);
255 static HRESULT WINAPI HTMLTable_put_align(IHTMLTable *iface, BSTR v)
257 HTMLTable *This = HTMLTABLE_THIS(iface);
258 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
262 static HRESULT WINAPI HTMLTable_get_align(IHTMLTable *iface, BSTR *p)
264 HTMLTable *This = HTMLTABLE_THIS(iface);
265 FIXME("(%p)->(%p)\n", This, p);
269 static HRESULT WINAPI HTMLTable_refresh(IHTMLTable *iface)
271 HTMLTable *This = HTMLTABLE_THIS(iface);
272 FIXME("(%p)\n", This);
276 static HRESULT WINAPI HTMLTable_get_rows(IHTMLTable *iface, IHTMLElementCollection **p)
278 HTMLTable *This = HTMLTABLE_THIS(iface);
279 nsIDOMHTMLCollection *nscol;
282 TRACE("(%p)->(%p)\n", This, p);
284 nsres = nsIDOMHTMLTableElement_GetRows(This->nstable, &nscol);
285 if(NS_FAILED(nsres)) {
286 ERR("GetRows failed: %08x\n", nsres);
290 *p = create_collection_from_htmlcol(This->element.node.doc, (IUnknown*)HTMLTABLE(This), nscol);
292 nsIDOMHTMLCollection_Release(nscol);
296 static HRESULT WINAPI HTMLTable_put_width(IHTMLTable *iface, VARIANT v)
298 HTMLTable *This = HTMLTABLE_THIS(iface);
299 FIXME("(%p)->(v)\n", This);
303 static HRESULT WINAPI HTMLTable_get_width(IHTMLTable *iface, VARIANT *p)
305 HTMLTable *This = HTMLTABLE_THIS(iface);
306 FIXME("(%p)->(%p)\n", This, p);
310 static HRESULT WINAPI HTMLTable_put_height(IHTMLTable *iface, VARIANT v)
312 HTMLTable *This = HTMLTABLE_THIS(iface);
313 FIXME("(%p)->(v)\n", This);
317 static HRESULT WINAPI HTMLTable_get_height(IHTMLTable *iface, VARIANT *p)
319 HTMLTable *This = HTMLTABLE_THIS(iface);
320 FIXME("(%p)->(%p)\n", This, p);
324 static HRESULT WINAPI HTMLTable_put_dataPageSize(IHTMLTable *iface, LONG v)
326 HTMLTable *This = HTMLTABLE_THIS(iface);
327 FIXME("(%p)->(%d)\n", This, v);
331 static HRESULT WINAPI HTMLTable_get_dataPageSize(IHTMLTable *iface, LONG *p)
333 HTMLTable *This = HTMLTABLE_THIS(iface);
334 FIXME("(%p)->(%p)\n", This, p);
338 static HRESULT WINAPI HTMLTable_nextPage(IHTMLTable *iface)
340 HTMLTable *This = HTMLTABLE_THIS(iface);
341 FIXME("(%p)\n", This);
345 static HRESULT WINAPI HTMLTable_previousPage(IHTMLTable *iface)
347 HTMLTable *This = HTMLTABLE_THIS(iface);
348 FIXME("(%p)\n", This);
352 static HRESULT WINAPI HTMLTable_get_tHead(IHTMLTable *iface, IHTMLTableSection **p)
354 HTMLTable *This = HTMLTABLE_THIS(iface);
355 FIXME("(%p)->(%p)\n", This, p);
359 static HRESULT WINAPI HTMLTable_get_tFoot(IHTMLTable *iface, IHTMLTableSection **p)
361 HTMLTable *This = HTMLTABLE_THIS(iface);
362 FIXME("(%p)->(%p)\n", This, p);
366 static HRESULT WINAPI HTMLTable_get_tBodies(IHTMLTable *iface, IHTMLElementCollection **p)
368 HTMLTable *This = HTMLTABLE_THIS(iface);
369 FIXME("(%p)->(%p)\n", This, p);
373 static HRESULT WINAPI HTMLTable_get_caption(IHTMLTable *iface, IHTMLTableCaption **p)
375 HTMLTable *This = HTMLTABLE_THIS(iface);
376 FIXME("(%p)->(%p)\n", This, p);
380 static HRESULT WINAPI HTMLTable_createTHead(IHTMLTable *iface, IDispatch **head)
382 HTMLTable *This = HTMLTABLE_THIS(iface);
383 FIXME("(%p)->(%p)\n", This, head);
387 static HRESULT WINAPI HTMLTable_deleteTHead(IHTMLTable *iface)
389 HTMLTable *This = HTMLTABLE_THIS(iface);
390 FIXME("(%p)\n", This);
394 static HRESULT WINAPI HTMLTable_createTFoot(IHTMLTable *iface, IDispatch **foot)
396 HTMLTable *This = HTMLTABLE_THIS(iface);
397 FIXME("(%p)->(%p)\n", This, foot);
401 static HRESULT WINAPI HTMLTable_deleteTFoot(IHTMLTable *iface)
403 HTMLTable *This = HTMLTABLE_THIS(iface);
404 FIXME("(%p)\n", This);
408 static HRESULT WINAPI HTMLTable_createCaption(IHTMLTable *iface, IHTMLTableCaption **caption)
410 HTMLTable *This = HTMLTABLE_THIS(iface);
411 FIXME("(%p)->(%p)\n", This, caption);
415 static HRESULT WINAPI HTMLTable_deleteCaption(IHTMLTable *iface)
417 HTMLTable *This = HTMLTABLE_THIS(iface);
418 FIXME("(%p)\n", This);
422 static HRESULT WINAPI HTMLTable_insertRow(IHTMLTable *iface, LONG index, IDispatch **row)
424 HTMLTable *This = HTMLTABLE_THIS(iface);
425 FIXME("(%p)->(%d %p)\n", This, index, row);
429 static HRESULT WINAPI HTMLTable_deleteRow(IHTMLTable *iface, LONG index)
431 HTMLTable *This = HTMLTABLE_THIS(iface);
432 FIXME("(%p)->(%d)\n", This, index);
436 static HRESULT WINAPI HTMLTable_get_readyState(IHTMLTable *iface, BSTR *p)
438 HTMLTable *This = HTMLTABLE_THIS(iface);
439 FIXME("(%p)->(%p)\n", This, p);
443 static HRESULT WINAPI HTMLTable_put_onreadystatechange(IHTMLTable *iface, VARIANT v)
445 HTMLTable *This = HTMLTABLE_THIS(iface);
446 FIXME("(%p)->(v)\n", This);
450 static HRESULT WINAPI HTMLTable_get_onreadystatechange(IHTMLTable *iface, VARIANT *p)
452 HTMLTable *This = HTMLTABLE_THIS(iface);
453 FIXME("(%p)->(%p)\n", This, p);
457 #undef HTMLTABLE_THIS
459 static const IHTMLTableVtbl HTMLTableVtbl = {
460 HTMLTable_QueryInterface,
463 HTMLTable_GetTypeInfoCount,
464 HTMLTable_GetTypeInfo,
465 HTMLTable_GetIDsOfNames,
469 HTMLTable_put_border,
470 HTMLTable_get_border,
475 HTMLTable_put_cellSpacing,
476 HTMLTable_get_cellSpacing,
477 HTMLTable_put_cellPadding,
478 HTMLTable_get_cellPadding,
479 HTMLTable_put_background,
480 HTMLTable_get_background,
481 HTMLTable_put_bgColor,
482 HTMLTable_get_bgColor,
483 HTMLTable_put_borderColor,
484 HTMLTable_get_borderColor,
485 HTMLTable_put_borderColorLight,
486 HTMLTable_get_borderColorLight,
487 HTMLTable_put_borderColorDark,
488 HTMLTable_get_borderColorDark,
495 HTMLTable_put_height,
496 HTMLTable_get_height,
497 HTMLTable_put_dataPageSize,
498 HTMLTable_get_dataPageSize,
500 HTMLTable_previousPage,
503 HTMLTable_get_tBodies,
504 HTMLTable_get_caption,
505 HTMLTable_createTHead,
506 HTMLTable_deleteTHead,
507 HTMLTable_createTFoot,
508 HTMLTable_deleteTFoot,
509 HTMLTable_createCaption,
510 HTMLTable_deleteCaption,
513 HTMLTable_get_readyState,
514 HTMLTable_put_onreadystatechange,
515 HTMLTable_get_onreadystatechange
518 static inline HTMLTable *impl_from_HTMLDOMNode(HTMLDOMNode *iface)
520 return CONTAINING_RECORD(iface, HTMLTable, element.node);
523 static HRESULT HTMLTable_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
525 HTMLTable *This = impl_from_HTMLDOMNode(iface);
529 if(IsEqualGUID(&IID_IUnknown, riid)) {
530 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
531 *ppv = HTMLTABLE(This);
532 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
533 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
534 *ppv = HTMLTABLE(This);
535 }else if(IsEqualGUID(&IID_IHTMLTable, riid)) {
536 TRACE("(%p)->(IID_IHTMLTable %p)\n", This, ppv);
537 *ppv = HTMLTABLE(This);
541 IUnknown_AddRef((IUnknown*)*ppv);
545 return HTMLElement_QI(&This->element.node, riid, ppv);
548 static void HTMLTable_destructor(HTMLDOMNode *iface)
550 HTMLTable *This = impl_from_HTMLDOMNode(iface);
553 nsIDOMHTMLTableElement_Release(This->nstable);
555 HTMLElement_destructor(&This->element.node);
558 static const NodeImplVtbl HTMLTableImplVtbl = {
560 HTMLTable_destructor,
564 static const tid_t HTMLTable_iface_tids[] = {
570 static dispex_static_data_t HTMLTable_dispex = {
577 HRESULT HTMLTable_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem)
582 ret = heap_alloc_zero(sizeof(HTMLTable));
584 return E_OUTOFMEMORY;
586 ret->element.node.vtbl = &HTMLTableImplVtbl;
587 ret->lpHTMLTableVtbl = &HTMLTableVtbl;
589 nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableElement, (void**)&ret->nstable);
590 if(NS_FAILED(nsres)) {
591 ERR("Could not get nsIDOMHTMLTableElement iface: %08x\n", nsres);
596 HTMLElement_Init(&ret->element, doc, nselem, &HTMLTable_dispex);
597 ConnectionPoint_Init(&ret->cp, &ret->element.cp_container, &DIID_HTMLTableEvents, NULL);
599 *elem = &ret->element;