mshtml: Added IHTMLTableCell::align property implementation.
[wine.git] / dlls / mshtml / htmltablecell.c
blobeedae5bf511069a3e66be8ed941d7b060c0d2e13
1 /*
2 * Copyright 2012 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>
20 #include <assert.h>
22 #define COBJMACROS
24 #include "windef.h"
25 #include "winbase.h"
26 #include "winuser.h"
27 #include "ole2.h"
29 #include "wine/debug.h"
31 #include "mshtml_private.h"
33 WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
35 typedef struct {
36 HTMLElement element;
38 IHTMLTableCell IHTMLTableCell_iface;
40 nsIDOMHTMLTableCellElement *nscell;
41 } HTMLTableCell;
43 static inline HTMLTableCell *impl_from_IHTMLTableCell(IHTMLTableCell *iface)
45 return CONTAINING_RECORD(iface, HTMLTableCell, IHTMLTableCell_iface);
48 static HRESULT WINAPI HTMLTableCell_QueryInterface(IHTMLTableCell *iface, REFIID riid, void **ppv)
50 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
52 return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv);
55 static ULONG WINAPI HTMLTableCell_AddRef(IHTMLTableCell *iface)
57 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
59 return IHTMLDOMNode_AddRef(&This->element.node.IHTMLDOMNode_iface);
62 static ULONG WINAPI HTMLTableCell_Release(IHTMLTableCell *iface)
64 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
66 return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface);
69 static HRESULT WINAPI HTMLTableCell_GetTypeInfoCount(IHTMLTableCell *iface, UINT *pctinfo)
71 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
72 return IDispatchEx_GetTypeInfoCount(&This->element.node.dispex.IDispatchEx_iface, pctinfo);
75 static HRESULT WINAPI HTMLTableCell_GetTypeInfo(IHTMLTableCell *iface, UINT iTInfo,
76 LCID lcid, ITypeInfo **ppTInfo)
78 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
79 return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid,
80 ppTInfo);
83 static HRESULT WINAPI HTMLTableCell_GetIDsOfNames(IHTMLTableCell *iface, REFIID riid,
84 LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
86 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
87 return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames,
88 cNames, lcid, rgDispId);
91 static HRESULT WINAPI HTMLTableCell_Invoke(IHTMLTableCell *iface, DISPID dispIdMember, REFIID riid,
92 LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
93 UINT *puArgErr)
95 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
96 return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid,
97 lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
100 static HRESULT WINAPI HTMLTableCell_put_rowSpan(IHTMLTableCell *iface, LONG v)
102 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
103 FIXME("(%p)->(%d)\n", This, v);
104 return E_NOTIMPL;
107 static HRESULT WINAPI HTMLTableCell_get_rowSpan(IHTMLTableCell *iface, LONG *p)
109 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
110 FIXME("(%p)->(%p)\n", This, p);
111 return E_NOTIMPL;
114 static HRESULT WINAPI HTMLTableCell_put_colSpan(IHTMLTableCell *iface, LONG v)
116 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
117 FIXME("(%p)->(%d)\n", This, v);
118 return E_NOTIMPL;
121 static HRESULT WINAPI HTMLTableCell_get_colSpan(IHTMLTableCell *iface, LONG *p)
123 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
124 FIXME("(%p)->(%p)\n", This, p);
125 return E_NOTIMPL;
128 static HRESULT WINAPI HTMLTableCell_put_align(IHTMLTableCell *iface, BSTR v)
130 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
131 nsAString str;
132 nsresult nsres;
134 TRACE("(%p)->(%s)\n", This, debugstr_w(v));
136 nsAString_InitDepend(&str, v);
137 nsres = nsIDOMHTMLTableCellElement_SetAlign(This->nscell, &str);
138 nsAString_Finish(&str);
139 if (NS_FAILED(nsres)) {
140 ERR("Set Align failed: %08x\n", nsres);
141 return E_FAIL;
143 return S_OK;
146 static HRESULT WINAPI HTMLTableCell_get_align(IHTMLTableCell *iface, BSTR *p)
148 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
149 nsAString str;
150 nsresult nsres;
152 TRACE("(%p)->(%p)\n", This, p);
154 nsAString_Init(&str, NULL);
155 nsres = nsIDOMHTMLTableCellElement_GetAlign(This->nscell, &str);
157 return return_nsstr(nsres, &str, p);
160 static HRESULT WINAPI HTMLTableCell_put_vAlign(IHTMLTableCell *iface, BSTR v)
162 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
163 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
164 return E_NOTIMPL;
167 static HRESULT WINAPI HTMLTableCell_get_vAlign(IHTMLTableCell *iface, BSTR *p)
169 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
170 FIXME("(%p)->(%p)\n", This, p);
171 return E_NOTIMPL;
174 static HRESULT WINAPI HTMLTableCell_put_bgColor(IHTMLTableCell *iface, VARIANT v)
176 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
177 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
178 return E_NOTIMPL;
181 static HRESULT WINAPI HTMLTableCell_get_bgColor(IHTMLTableCell *iface, VARIANT *p)
183 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
184 FIXME("(%p)->(%p)\n", This, p);
185 return E_NOTIMPL;
188 static HRESULT WINAPI HTMLTableCell_put_noWrap(IHTMLTableCell *iface, VARIANT_BOOL v)
190 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
191 FIXME("(%p)->(%x)\n", This, v);
192 return E_NOTIMPL;
195 static HRESULT WINAPI HTMLTableCell_get_noWrap(IHTMLTableCell *iface, VARIANT_BOOL *p)
197 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
198 FIXME("(%p)->(%p)\n", This, p);
199 return E_NOTIMPL;
202 static HRESULT WINAPI HTMLTableCell_put_background(IHTMLTableCell *iface, BSTR v)
204 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
205 FIXME("(%p)->(%s)\n", This, debugstr_w(v));
206 return E_NOTIMPL;
209 static HRESULT WINAPI HTMLTableCell_get_background(IHTMLTableCell *iface, BSTR *p)
211 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
212 FIXME("(%p)->(%p)\n", This, p);
213 return E_NOTIMPL;
216 static HRESULT WINAPI HTMLTableCell_put_borderColor(IHTMLTableCell *iface, VARIANT v)
218 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
219 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
220 return E_NOTIMPL;
223 static HRESULT WINAPI HTMLTableCell_get_borderColor(IHTMLTableCell *iface, VARIANT *p)
225 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
226 FIXME("(%p)->(%p)\n", This, p);
227 return E_NOTIMPL;
230 static HRESULT WINAPI HTMLTableCell_put_borderColorLight(IHTMLTableCell *iface, VARIANT v)
232 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
233 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
234 return E_NOTIMPL;
237 static HRESULT WINAPI HTMLTableCell_get_borderColorLight(IHTMLTableCell *iface, VARIANT *p)
239 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
240 FIXME("(%p)->(%p)\n", This, p);
241 return E_NOTIMPL;
244 static HRESULT WINAPI HTMLTableCell_put_borderColorDark(IHTMLTableCell *iface, VARIANT v)
246 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
247 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
248 return E_NOTIMPL;
251 static HRESULT WINAPI HTMLTableCell_get_borderColorDark(IHTMLTableCell *iface, VARIANT *p)
253 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
254 FIXME("(%p)->(%p)\n", This, p);
255 return E_NOTIMPL;
258 static HRESULT WINAPI HTMLTableCell_put_width(IHTMLTableCell *iface, VARIANT v)
260 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
261 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
262 return E_NOTIMPL;
265 static HRESULT WINAPI HTMLTableCell_get_width(IHTMLTableCell *iface, VARIANT *p)
267 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
268 FIXME("(%p)->(%p)\n", This, p);
269 return E_NOTIMPL;
272 static HRESULT WINAPI HTMLTableCell_put_height(IHTMLTableCell *iface, VARIANT v)
274 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
275 FIXME("(%p)->(%s)\n", This, debugstr_variant(&v));
276 return E_NOTIMPL;
279 static HRESULT WINAPI HTMLTableCell_get_height(IHTMLTableCell *iface, VARIANT *p)
281 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
282 FIXME("(%p)->(%p)\n", This, p);
283 return E_NOTIMPL;
286 static HRESULT WINAPI HTMLTableCell_get_cellIndex(IHTMLTableCell *iface, LONG *p)
288 HTMLTableCell *This = impl_from_IHTMLTableCell(iface);
289 nsresult nsres;
291 TRACE("(%p)->(%p)\n", This, p);
292 nsres = nsIDOMHTMLTableCellElement_GetCellIndex(This->nscell, p);
293 if (NS_FAILED(nsres)) {
294 ERR("Get CellIndex failed: %08x\n", nsres);
295 return E_FAIL;
298 return S_OK;
301 static const IHTMLTableCellVtbl HTMLTableCellVtbl = {
302 HTMLTableCell_QueryInterface,
303 HTMLTableCell_AddRef,
304 HTMLTableCell_Release,
305 HTMLTableCell_GetTypeInfoCount,
306 HTMLTableCell_GetTypeInfo,
307 HTMLTableCell_GetIDsOfNames,
308 HTMLTableCell_Invoke,
309 HTMLTableCell_put_rowSpan,
310 HTMLTableCell_get_rowSpan,
311 HTMLTableCell_put_colSpan,
312 HTMLTableCell_get_colSpan,
313 HTMLTableCell_put_align,
314 HTMLTableCell_get_align,
315 HTMLTableCell_put_vAlign,
316 HTMLTableCell_get_vAlign,
317 HTMLTableCell_put_bgColor,
318 HTMLTableCell_get_bgColor,
319 HTMLTableCell_put_noWrap,
320 HTMLTableCell_get_noWrap,
321 HTMLTableCell_put_background,
322 HTMLTableCell_get_background,
323 HTMLTableCell_put_borderColor,
324 HTMLTableCell_get_borderColor,
325 HTMLTableCell_put_borderColorLight,
326 HTMLTableCell_get_borderColorLight,
327 HTMLTableCell_put_borderColorDark,
328 HTMLTableCell_get_borderColorDark,
329 HTMLTableCell_put_width,
330 HTMLTableCell_get_width,
331 HTMLTableCell_put_height,
332 HTMLTableCell_get_height,
333 HTMLTableCell_get_cellIndex
336 static inline HTMLTableCell *impl_from_HTMLDOMNode(HTMLDOMNode *iface)
338 return CONTAINING_RECORD(iface, HTMLTableCell, element.node);
341 static HRESULT HTMLTableCell_QI(HTMLDOMNode *iface, REFIID riid, void **ppv)
343 HTMLTableCell *This = impl_from_HTMLDOMNode(iface);
345 if(IsEqualGUID(&IID_IUnknown, riid)) {
346 TRACE("(%p)->(IID_IUnknown %p)\n", This, ppv);
347 *ppv = &This->IHTMLTableCell_iface;
348 }else if(IsEqualGUID(&IID_IDispatch, riid)) {
349 TRACE("(%p)->(IID_IDispatch %p)\n", This, ppv);
350 *ppv = &This->IHTMLTableCell_iface;
351 }else if(IsEqualGUID(&IID_IHTMLTableCell, riid)) {
352 TRACE("(%p)->(IID_IHTMLTableCell %p)\n", This, ppv);
353 *ppv = &This->IHTMLTableCell_iface;
354 }else {
355 return HTMLElement_QI(&This->element.node, riid, ppv);
358 IUnknown_AddRef((IUnknown*)*ppv);
359 return S_OK;
362 static void HTMLTableCell_destructor(HTMLDOMNode *iface)
364 HTMLTableCell *This = impl_from_HTMLDOMNode(iface);
366 HTMLElement_destructor(&This->element.node);
369 static const NodeImplVtbl HTMLTableCellImplVtbl = {
370 HTMLTableCell_QI,
371 HTMLTableCell_destructor,
372 HTMLElement_cpc,
373 HTMLElement_clone,
374 HTMLElement_handle_event,
375 HTMLElement_get_attr_col
378 static const tid_t HTMLTableCell_iface_tids[] = {
379 HTMLELEMENT_TIDS,
380 IHTMLTableCell_tid,
384 static dispex_static_data_t HTMLTableCell_dispex = {
385 NULL,
386 DispHTMLTableCell_tid,
387 NULL,
388 HTMLTableCell_iface_tids
391 HRESULT HTMLTableCell_Create(HTMLDocumentNode *doc, nsIDOMHTMLElement *nselem, HTMLElement **elem)
393 HTMLTableCell *ret;
394 nsresult nsres;
396 ret = heap_alloc_zero(sizeof(*ret));
397 if(!ret)
398 return E_OUTOFMEMORY;
400 ret->IHTMLTableCell_iface.lpVtbl = &HTMLTableCellVtbl;
401 ret->element.node.vtbl = &HTMLTableCellImplVtbl;
403 HTMLElement_Init(&ret->element, doc, nselem, &HTMLTableCell_dispex);
405 nsres = nsIDOMHTMLElement_QueryInterface(nselem, &IID_nsIDOMHTMLTableCellElement, (void**)&ret->nscell);
407 /* Share nscell reference with nsnode */
408 assert(nsres == NS_OK && (nsIDOMNode*)ret->nscell == ret->element.node.nsnode);
409 nsIDOMNode_Release(ret->element.node.nsnode);
411 *elem = &ret->element;
412 return S_OK;