static HRESULT WINAPI HTMLSelectElement_get_name(IHTMLSelectElement *iface, BSTR *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsAString name_str; const PRUnichar *name = NULL; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsAString_Init(&name_str, NULL); nsres = nsIDOMHTMLSelectElement_GetName(This->nsselect, &name_str); if(NS_SUCCEEDED(nsres)) { static const WCHAR wszGarbage[] = {'g','a','r','b','a','g','e',0}; nsAString_GetData(&name_str, &name); /* * Native never returns empty string here. If an element has no name, * name of previous element or ramdom data is returned. */ *p = SysAllocString(*name ? name : wszGarbage); }else { ERR("GetName failed: %08x\n", nsres); } nsAString_Finish(&name_str); TRACE("name=%s\n", debugstr_w(*p)); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_tags(IHTMLSelectElement *iface, VARIANT tagName, IDispatch **pdisp) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); FIXME("(%p)->(v %p)\n", This, pdisp); return E_NOTIMPL; }
static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElement *element, VARIANT before) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); IHTMLDOMNode *node, *tmp; HRESULT hres; FIXME("(%p)->(%p %s): semi-stub\n", This, element, debugstr_variant(&before)); if(V_VT(&before) != VT_EMPTY) { FIXME("unhandled before %s\n", debugstr_variant(&before)); return E_NOTIMPL; } hres = IHTMLElement_QueryInterface(element, &IID_IHTMLDOMNode, (void**)&node); if(FAILED(hres)) return hres; hres = IHTMLDOMNode_appendChild(&This->element.node.IHTMLDOMNode_iface, node, &tmp); IHTMLDOMNode_Release(node); if(SUCCEEDED(hres) && tmp) IHTMLDOMNode_Release(tmp); return hres; }
static HRESULT WINAPI HTMLSelectElement_QueryInterface(IHTMLSelectElement *iface, REFIID riid, void **ppv) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); return IHTMLDOMNode_QueryInterface(&This->element.node.IHTMLDOMNode_iface, riid, ppv); }
static HRESULT WINAPI HTMLSelectElement_put_onchange(IHTMLSelectElement *iface, VARIANT v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); TRACE("(%p)->()\n", This); return set_node_event(&This->element.node, EVENTID_CHANGE, &v); }
static HRESULT WINAPI HTMLSelectElement_GetTypeInfo(IHTMLSelectElement *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); return IDispatchEx_GetTypeInfo(&This->element.node.dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo); }
static HRESULT WINAPI HTMLSelectElement_Invoke(IHTMLSelectElement *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); return IDispatchEx_Invoke(&This->element.node.dispex.IDispatchEx_iface, dispIdMember, riid, lcid, wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr); }
static HRESULT WINAPI HTMLSelectElement_GetIDsOfNames(IHTMLSelectElement *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); return IDispatchEx_GetIDsOfNames(&This->element.node.dispex.IDispatchEx_iface, riid, rgszNames, cNames, lcid, rgDispId); }
static HRESULT WINAPI HTMLSelectElement_get_options(IHTMLSelectElement *iface, IDispatch **p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); TRACE("(%p)->(%p)\n", This, p); *p = (IDispatch*)&This->IHTMLSelectElement_iface; IDispatch_AddRef(*p); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_put_multiple(IHTMLSelectElement *iface, VARIANT_BOOL v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsresult nsres; TRACE("(%p)->(%x)\n", This, v); nsres = nsIDOMHTMLSelectElement_SetMultiple(This->nsselect, !!v); assert(nsres == NS_OK); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BSTR *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsAString value_str; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsAString_Init(&value_str, NULL); nsres = nsIDOMHTMLSelectElement_GetValue(This->nsselect, &value_str); return return_nsstr(nsres, &value_str, p); }
static HRESULT WINAPI HTMLSelectElement_put_length(IHTMLSelectElement *iface, LONG v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsresult nsres; TRACE("(%p)->(%d)\n", This, v); nsres = nsIDOMHTMLSelectElement_SetLength(This->nsselect, v); if(NS_FAILED(nsres)) ERR("SetLength failed: %08x\n", nsres); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_multiple(IHTMLSelectElement *iface, VARIANT_BOOL *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); cpp_bool val; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsres = nsIDOMHTMLSelectElement_GetMultiple(This->nsselect, &val); assert(nsres == NS_OK); *p = val ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_selectedIndex(IHTMLSelectElement *iface, LONG *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); PRInt32 idx = 0; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsres = nsIDOMHTMLSelectElement_GetSelectedIndex(This->nsselect, &idx); if(NS_FAILED(nsres)) ERR("GetSelectedIndex failed: %08x\n", nsres); *p = idx; return S_OK; }
static HRESULT WINAPI HTMLSelectElement_remove(IHTMLSelectElement *iface, LONG index) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsresult nsres; TRACE("(%p)->(%d)\n", This, index); if(index < 0) return E_INVALIDARG; nsres = nsIDOMHTMLSelectElement_select_Remove(This->nsselect, index); if(NS_FAILED(nsres)) { ERR("Remove failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT WINAPI HTMLSelectElement_put_disabled(IHTMLSelectElement *iface, VARIANT_BOOL v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsresult nsres; TRACE("(%p)->(%x)\n", This, v); nsres = nsIDOMHTMLSelectElement_SetDisabled(This->nsselect, v != VARIANT_FALSE); if(NS_FAILED(nsres)) { ERR("SetDisabled failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT WINAPI HTMLSelectElement_put_value(IHTMLSelectElement *iface, BSTR v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsAString value_str; nsresult nsres; TRACE("(%p)->(%s)\n", This, debugstr_w(v)); nsAString_InitDepend(&value_str, v); nsres = nsIDOMHTMLSelectElement_SetValue(This->nsselect, &value_str); nsAString_Finish(&value_str); if(NS_FAILED(nsres)) ERR("SetValue failed: %08x\n", nsres); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_put_size(IHTMLSelectElement *iface, LONG v) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsresult nsres; TRACE("(%p)->(%d)\n", This, v); if(v < 0) return CTL_E_INVALIDPROPERTYVALUE; nsres = nsIDOMHTMLSelectElement_SetSize(This->nsselect, v); if(NS_FAILED(nsres)) { ERR("SetSize failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_disabled(IHTMLSelectElement *iface, VARIANT_BOOL *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); PRBool disabled = FALSE; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsres = nsIDOMHTMLSelectElement_GetDisabled(This->nsselect, &disabled); if(NS_FAILED(nsres)) { ERR("GetDisabled failed: %08x\n", nsres); return E_FAIL; } *p = disabled ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_length(IHTMLSelectElement *iface, LONG *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); PRUint32 length = 0; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsres = nsIDOMHTMLSelectElement_GetLength(This->nsselect, &length); if(NS_FAILED(nsres)) ERR("GetLength failed: %08x\n", nsres); *p = length; TRACE("ret %d\n", *p); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_size(IHTMLSelectElement *iface, LONG *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); DWORD val; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); if(!p) return E_INVALIDARG; nsres = nsIDOMHTMLSelectElement_GetSize(This->nsselect, &val); if(NS_FAILED(nsres)) { ERR("GetSize failed: %08x\n", nsres); return E_FAIL; } *p = val; return S_OK; }
static HRESULT WINAPI HTMLSelectElement_add(IHTMLSelectElement *iface, IHTMLElement *element, VARIANT before) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsIWritableVariant *nsvariant; HTMLElement *element_obj; nsresult nsres; TRACE("(%p)->(%p %s)\n", This, element, debugstr_variant(&before)); element_obj = unsafe_impl_from_IHTMLElement(element); if(!element_obj) { FIXME("External IHTMLElement implementation?\n"); return E_INVALIDARG; } nsvariant = create_nsvariant(); if(!nsvariant) return E_FAIL; switch(V_VT(&before)) { case VT_EMPTY: case VT_ERROR: nsres = nsIWritableVariant_SetAsEmpty(nsvariant); break; case VT_I2: nsres = nsIWritableVariant_SetAsInt16(nsvariant, V_I2(&before)); break; default: FIXME("unhandled before %s\n", debugstr_variant(&before)); nsIWritableVariant_Release(nsvariant); return E_NOTIMPL; } if(NS_SUCCEEDED(nsres)) nsres = nsIDOMHTMLSelectElement_Add(This->nsselect, element_obj->nselem, (nsIVariant*)nsvariant); nsIWritableVariant_Release(nsvariant); if(NS_FAILED(nsres)) { ERR("Add failed: %08x\n", nsres); return E_FAIL; } return S_OK; }
static HRESULT WINAPI HTMLSelectElement_item(IHTMLSelectElement *iface, VARIANT name, VARIANT index, IDispatch **pdisp) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); TRACE("(%p)->(%s %s %p)\n", This, debugstr_variant(&name), debugstr_variant(&index), pdisp); if(!pdisp) return E_POINTER; *pdisp = NULL; if(V_VT(&name) == VT_I4) { if(V_I4(&name) < 0) return E_INVALIDARG; return htmlselect_item(This, V_I4(&name), pdisp); } FIXME("Unsupported args\n"); return E_NOTIMPL; }
static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTMLFormElement **p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsIDOMHTMLFormElement *nsform; nsIDOMNode *form_node; HTMLDOMNode *node; HRESULT hres; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); if(!p) return E_POINTER; nsres = nsIDOMHTMLSelectElement_GetForm(This->nsselect, &nsform); FIXME("get form %08x : %p\n", nsres, nsform); if (NS_FAILED(nsres)) { ERR("GetForm failed: %08x, nsform: %p\n", nsres, nsform); *p = NULL; return E_FAIL; } if (nsform == NULL) { TRACE("nsform not found\n"); *p = NULL; return S_OK; } nsres = nsIDOMHTMLFormElement_QueryInterface(nsform, &IID_nsIDOMNode, (void**)&form_node); nsIDOMHTMLFormElement_Release(nsform); assert(nsres == NS_OK); hres = get_node(This->element.node.doc, form_node, TRUE, &node); nsIDOMNode_Release(form_node); if (FAILED(hres)) return hres; hres = IHTMLDOMNode_QueryInterface(&node->IHTMLDOMNode_iface, &IID_IHTMLElement, (void**)p); node_release(node); return hres; }
static HRESULT WINAPI HTMLSelectElement_get_value(IHTMLSelectElement *iface, BSTR *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); nsAString value_str; const PRUnichar *value = NULL; nsresult nsres; TRACE("(%p)->(%p)\n", This, p); nsAString_Init(&value_str, NULL); nsres = nsIDOMHTMLSelectElement_GetValue(This->nsselect, &value_str); if(NS_SUCCEEDED(nsres)) { nsAString_GetData(&value_str, &value); *p = *value ? SysAllocString(value) : NULL; }else { ERR("GetValue failed: %08x\n", nsres); } nsAString_Finish(&value_str); TRACE("value=%s\n", debugstr_w(*p)); return S_OK; }
static HRESULT WINAPI HTMLSelectElement_get_type(IHTMLSelectElement *iface, BSTR *p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); const PRUnichar *type; nsAString type_str; nsresult nsres; HRESULT hres = S_OK; TRACE("(%p)->(%p)\n", This, p); nsAString_Init(&type_str, NULL); nsres = nsIDOMHTMLSelectElement_GetType(This->nsselect, &type_str); if(NS_SUCCEEDED(nsres)) { nsAString_GetData(&type_str, &type); *p = *type ? SysAllocString(type) : NULL; }else { ERR("GetType failed: %08x\n", nsres); hres = E_FAIL; } nsAString_Finish(&type_str); return hres; }
static ULONG WINAPI HTMLSelectElement_Release(IHTMLSelectElement *iface) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); return IHTMLDOMNode_Release(&This->element.node.IHTMLDOMNode_iface); }
static HRESULT WINAPI HTMLSelectElement_remove(IHTMLSelectElement *iface, LONG index) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); FIXME("(%p)->(%d)\n", This, index); return E_NOTIMPL; }
static HRESULT WINAPI HTMLSelectElement_get_form(IHTMLSelectElement *iface, IHTMLFormElement **p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }
static HRESULT WINAPI HTMLSelectElement_get__newEnum(IHTMLSelectElement *iface, IUnknown **p) { HTMLSelectElement *This = impl_from_IHTMLSelectElement(iface); FIXME("(%p)->(%p)\n", This, p); return E_NOTIMPL; }