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
28 #include "wine/debug.h"
30 #include "mshtml_private.h"
32 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
37 IHTMLTableRow IHTMLTableRow_iface;
39 nsIDOMHTMLTableRowElement *nsrow;
42 static inline HTMLTableRow *impl_from_IHTMLTableRow(IHTMLTableRow *iface)
44 return CONTAINING_RECORD(iface, HTMLTableRow, IHTMLTableRow_iface);
47 static HRESULT WINAPI HTMLTableRow_QueryInterface(IHTMLTableRow *iface,
48 REFIID riid, void **ppv)
50 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
52 return IHTMLDOMNode_QueryInterface(HTMLDOMNODE(&This->element.node), riid, ppv);
55 static ULONG WINAPI HTMLTableRow_AddRef(IHTMLTableRow *iface)
57 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
59 return IHTMLDOMNode_AddRef(HTMLDOMNODE(&This->element.node));
62 static ULONG WINAPI HTMLTableRow_Release(IHTMLTableRow *iface)
64 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
66 return IHTMLDOMNode_Release(HTMLDOMNODE(&This->element.node));
69 static HRESULT WINAPI HTMLTableRow_GetTypeInfoCount(IHTMLTableRow *iface, UINT *pctinfo)
71 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
72 return IDispatchEx_GetTypeInfoCount(DISPATCHEX(&This->element.node.dispex), pctinfo);
75 static HRESULT WINAPI HTMLTableRow_GetTypeInfo(IHTMLTableRow *iface, UINT iTInfo,
76 LCID lcid, ITypeInfo **ppTInfo)
78 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
79 return IDispatchEx_GetTypeInfo(DISPATCHEX(&This->element.node.dispex), iTInfo, lcid, ppTInfo);
82 static HRESULT WINAPI HTMLTableRow_GetIDsOfNames(IHTMLTableRow *iface, REFIID riid,
83 LPOLESTR *rgszNames, UINT cNames,
84 LCID lcid, DISPID *rgDispId)
86 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
87 return IDispatchEx_GetIDsOfNames(DISPATCHEX(&This->element.node.dispex), riid, rgszNames, cNames, lcid, rgDispId);
90 static HRESULT WINAPI HTMLTableRow_Invoke(IHTMLTableRow *iface, DISPID dispIdMember,
91 REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams,
92 VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
94 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
95 return IDispatchEx_Invoke(DISPATCHEX(&This->element.node.dispex), dispIdMember, riid, lcid, wFlags, pDispParams,
96 pVarResult, pExcepInfo, puArgErr);
99 static HRESULT WINAPI HTMLTableRow_put_align(IHTMLTableRow *iface, BSTR v)
101 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
102 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
106 static HRESULT WINAPI HTMLTableRow_get_align(IHTMLTableRow *iface, BSTR *p)
108 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
109 FIXME("(%p)->(%p)\n", This, p);
113 static HRESULT WINAPI HTMLTableRow_put_vAlign(IHTMLTableRow *iface, BSTR v)
115 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
116 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
120 static HRESULT WINAPI HTMLTableRow_get_vAlign(IHTMLTableRow *iface, BSTR *p)
122 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
123 FIXME("(%p)->(%p)\n", This, p);
127 static HRESULT WINAPI HTMLTableRow_put_bgColor(IHTMLTableRow *iface, VARIANT v)
129 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
130 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
134 static HRESULT WINAPI HTMLTableRow_get_bgColor(IHTMLTableRow *iface, VARIANT *p)
136 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
137 FIXME("(%p)->(%p)\n", This, p);
141 static HRESULT WINAPI HTMLTableRow_put_borderColor(IHTMLTableRow *iface, VARIANT v)
143 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
144 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
148 static HRESULT WINAPI HTMLTableRow_get_borderColor(IHTMLTableRow *iface, VARIANT *p)
150 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
151 FIXME("(%p)->(%p)\n", This, p);
155 static HRESULT WINAPI HTMLTableRow_put_borderColorLight(IHTMLTableRow *iface, VARIANT v)
157 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
158 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
162 static HRESULT WINAPI HTMLTableRow_get_borderColorLight(IHTMLTableRow *iface, VARIANT *p)
164 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
165 FIXME("(%p)->(%p)\n", This, p);
169 static HRESULT WINAPI HTMLTableRow_put_borderColorDark(IHTMLTableRow *iface, VARIANT v)
171 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
172 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
176 static HRESULT WINAPI HTMLTableRow_get_borderColorDark(IHTMLTableRow *iface, VARIANT *p)
178 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
179 FIXME("(%p)->(%p)\n", This, p);
183 static HRESULT WINAPI HTMLTableRow_get_rowIndex(IHTMLTableRow *iface, LONG *p)
185 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
186 FIXME("(%p)->(%p)\n", This, p);
190 static HRESULT WINAPI HTMLTableRow_get_selectionRowIndex(IHTMLTableRow *iface, LONG *p)
192 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
193 FIXME("(%p)->(%p)\n", This, p);
197 static HRESULT WINAPI HTMLTableRow_get_cells(IHTMLTableRow *iface, IHTMLElementCollection **p)
199 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
200 nsIDOMHTMLCollection *nscol;
203 TRACE("(%p)->(%p)\n", This, p);
205 nsres = nsIDOMHTMLTableRowElement_GetCells(This->nsrow, &nscol);
206 if(NS_FAILED(nsres)) {
207 ERR("GetCells failed: %08x\n", nsres);
211 *p = create_collection_from_htmlcol(This->element.node.doc, (IUnknown*)&This->IHTMLTableRow_iface, nscol);
213 nsIDOMHTMLCollection_Release(nscol);
217 static HRESULT WINAPI HTMLTableRow_insertCell(IHTMLTableRow *iface, LONG index, IDispatch **row)
219 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
220 FIXME("(%p)->(%d %p)\n", This, index, row);
224 static HRESULT WINAPI HTMLTableRow_deleteCell(IHTMLTableRow *iface, LONG index)
226 HTMLTableRow *This = impl_from_IHTMLTableRow(iface);
227 FIXME("(%p)->(%d)\n", This, index);
231 static const IHTMLTableRowVtbl HTMLTableRowVtbl = {
232 HTMLTableRow_QueryInterface,
234 HTMLTableRow_Release,
235 HTMLTableRow_GetTypeInfoCount,
236 HTMLTableRow_GetTypeInfo,
237 HTMLTableRow_GetIDsOfNames,
239 HTMLTableRow_put_align,
240 HTMLTableRow_get_align,
241 HTMLTableRow_put_vAlign,
242 HTMLTableRow_get_vAlign,
243 HTMLTableRow_put_bgColor,
244 HTMLTableRow_get_bgColor,
245 HTMLTableRow_put_borderColor,
246 HTMLTableRow_get_borderColor,
247 HTMLTableRow_put_borderColorLight,
248 HTMLTableRow_get_borderColorLight,
249 HTMLTableRow_put_borderColorDark,
250 HTMLTableRow_get_borderColorDark,
251 HTMLTableRow_get_rowIndex,
252 HTMLTableRow_get_selectionRowIndex,
253 HTMLTableRow_get_cells,
254 HTMLTableRow_insertCell,
255 HTMLTableRow_deleteCell
258 #define HTMLTABLEROW_NODE_THIS(iface) DEFINE_THIS2(HTMLTableRow, element.node, iface)
260 static HRESULT HTMLTableRow_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
262 HTMLTableRow *This = HTMLTABLEROW_NODE_THIS(iface);
266 if(IsEqualGUID(&IID_IUnknown, riid)) {
267 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
268 *ppv = &This->IHTMLTableRow_iface;
269 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
270 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
271 *ppv = &This->IHTMLTableRow_iface;
272 }else if(IsEqualGUID(&IID_IHTMLTableRow, riid)) {
273 TRACE("(%p)->(IID_IHTMLTableRow %p)\n", This, ppv);
274 *ppv = &This->IHTMLTableRow_iface;
278 IUnknown_AddRef((IUnknown*)*ppv);
282 return HTMLElement_QI(&This->element.node, riid, ppv);
285 static void HTMLTableRow_destructor(HTMLDOMNode *iface)
287 HTMLTableRow *This = HTMLTABLEROW_NODE_THIS(iface);
290 nsIDOMHTMLTableRowElement_Release(This->nsrow);
292 HTMLElement_destructor(&This->element.node);
295 #undef HTMLTABLEROW_NODE_THIS
297 static const NodeImplVtbl HTMLTableRowImplVtbl = {
299 HTMLTableRow_destructor,
303 static const tid_t HTMLTableRow_iface_tids[] = {
309 static dispex_static_data_t HTMLTableRow_dispex = {
311 DispHTMLTableRow_tid,
313 HTMLTableRow_iface_tids
316 HRESULT HTMLTableRow_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem)
321 ret = heap_alloc_zero(sizeof(HTMLTableRow));
323 return E_OUTOFMEMORY;
325 ret->IHTMLTableRow_iface.lpVtbl = &HTMLTableRowVtbl;
326 ret->element.node.vtbl = &HTMLTableRowImplVtbl;
328 nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableRowElement, (void**)&ret->nsrow);
329 if(NS_FAILED(nsres)) {
330 ERR("Could not get nsIDOMHTMLTableRowElement iface: %08x\n", nsres);
332 return E_OUTOFMEMORY;
335 HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableRow_dispex);
337 *elem = &ret->element;