Files
Mozilla/mozilla/webshell/embed/ActiveX/xml/XMLElement.cpp
locka%iol.ie b720811918 no message
git-svn-id: svn://10.0.0.236/trunk@36096 18797224-902f-48f8-a5cc-f745e15eee43
1999-06-21 21:50:58 +00:00

183 lines
3.4 KiB
C++

// XMLElement.cpp : Implementation of CXMLElement
#include "stdafx.h"
#include "Activexml.h"
#include "XMLElement.h"
CXMLElement::CXMLElement()
{
m_nType = 0;
}
CXMLElement::~CXMLElement()
{
}
HRESULT CXMLElement::SetParent(IXMLElement *pParent)
{
// Note: parent is not refcounted
m_pParent = pParent;
return S_OK;
}
HRESULT CXMLElement::ReleaseAll()
{
// Release all children
m_cChildren.clear();
return S_OK;
}
/////////////////////////////////////////////////////////////////////////////
// CXMLElement
HRESULT STDMETHODCALLTYPE CXMLElement::get_tagName(/* [out][retval] */ BSTR __RPC_FAR *p)
{
if (p == NULL)
{
return E_INVALIDARG;
}
USES_CONVERSION;
*p = SysAllocString(A2OLE(m_szTagName.c_str()));
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::put_tagName(/* [in] */ BSTR p)
{
if (p == NULL)
{
return E_INVALIDARG;
}
USES_CONVERSION;
m_szTagName = OLE2A(p);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::get_parent(/* [out][retval] */ IXMLElement __RPC_FAR *__RPC_FAR *ppParent)
{
if (ppParent == NULL)
{
return E_INVALIDARG;
}
*ppParent = NULL;
if (m_pParent)
{
return m_pParent->QueryInterface(IID_IXMLElement, (void **) ppParent);
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::setAttribute(/* [in] */ BSTR strPropertyName, /* [in] */ VARIANT PropertyValue)
{
if (strPropertyName == NULL || PropertyValue.vt != VT_BSTR)
{
return E_INVALIDARG;
}
USES_CONVERSION;
std::string szPropertyName = OLE2A(strPropertyName);
std::string szPropertyValue = OLE2A(PropertyValue.bstrVal);
m_cAttributes[szPropertyName] = szPropertyValue;
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::getAttribute(/* [in] */ BSTR strPropertyName, /* [out][retval] */ VARIANT __RPC_FAR *PropertyValue)
{
if (strPropertyName == NULL || PropertyValue == NULL)
{
return E_INVALIDARG;
}
USES_CONVERSION;
std::string szPropertyName = OLE2A(strPropertyName);
StringMap::iterator i = m_cAttributes.find(szPropertyName);
if (i == m_cAttributes.end())
{
return S_FALSE;
}
PropertyValue->vt = VT_BSTR;
PropertyValue->bstrVal = SysAllocString(A2OLE((*i).second.c_str()));
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::removeAttribute(/* [in] */ BSTR strPropertyName)
{
if (strPropertyName == NULL)
{
return E_INVALIDARG;
}
USES_CONVERSION;
std::string szPropertyName = OLE2A(strPropertyName);
StringMap::iterator i = m_cAttributes.find(szPropertyName);
if (i == m_cAttributes.end())
{
return E_INVALIDARG;
}
m_cAttributes.erase(i);
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::get_children(/* [out][retval] */ IXMLElementCollection __RPC_FAR *__RPC_FAR *pp)
{
// TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CXMLElement::get_type(/* [out][retval] */ long __RPC_FAR *plType)
{
if (plType == NULL)
{
return E_INVALIDARG;
}
*plType = m_nType;
return S_OK;
}
HRESULT STDMETHODCALLTYPE CXMLElement::get_text(/* [out][retval] */ BSTR __RPC_FAR *p)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CXMLElement::put_text(/* [in] */ BSTR p)
{
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CXMLElement::addChild(/* [in] */ IXMLElement __RPC_FAR *pChildElem, long lIndex, long lReserved)
{
if (pChildElem == NULL)
{
return E_INVALIDARG;
}
//TODO
return E_NOTIMPL;
}
HRESULT STDMETHODCALLTYPE CXMLElement::removeChild(/* [in] */ IXMLElement __RPC_FAR *pChildElem)
{
// TODO
return E_NOTIMPL;
}