From cce0fb751aade7b3f0cb50fc86525103b2de57f6 Mon Sep 17 00:00:00 2001 From: "locka%iol.ie" Date: Sun, 14 Feb 1999 13:26:57 +0000 Subject: [PATCH] Added object implementing IPropertyBag git-svn-id: svn://10.0.0.236/trunk@20707 18797224-902f-48f8-a5cc-f745e15eee43 --- .../webshell/embed/ActiveX/PropertyBag.cpp | 94 +++++++++++++++++++ mozilla/webshell/embed/ActiveX/PropertyBag.h | 43 +++++++++ mozilla/webshell/embed/ActiveX/PropertyList.h | 45 +++++++++ 3 files changed, 182 insertions(+) create mode 100644 mozilla/webshell/embed/ActiveX/PropertyBag.cpp create mode 100644 mozilla/webshell/embed/ActiveX/PropertyBag.h create mode 100644 mozilla/webshell/embed/ActiveX/PropertyList.h diff --git a/mozilla/webshell/embed/ActiveX/PropertyBag.cpp b/mozilla/webshell/embed/ActiveX/PropertyBag.cpp new file mode 100644 index 00000000000..babc57b574e --- /dev/null +++ b/mozilla/webshell/embed/ActiveX/PropertyBag.cpp @@ -0,0 +1,94 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ + +#include "StdAfx.h" + +#include "PropertyBag.h" + + +CPropertyBag::CPropertyBag() +{ +} + + +CPropertyBag::~CPropertyBag() +{ +} + + +/////////////////////////////////////////////////////////////////////////////// +// IPropertyBag implementation + +HRESULT STDMETHODCALLTYPE CPropertyBag::Read(/* [in] */ LPCOLESTR pszPropName, /* [out][in] */ VARIANT __RPC_FAR *pVar, /* [in] */ IErrorLog __RPC_FAR *pErrorLog) +{ + if (pszPropName == NULL) + { + return E_INVALIDARG; + } + if (pVar == NULL) + { + return E_INVALIDARG; + } + + VariantInit(pVar); + PropertyList::iterator i; + for (i = m_PropertyList.begin(); i != m_PropertyList.end(); i++) + { + // Is the property already in the list? + if (wcsicmp((*i).szName, pszPropName) == 0) + { + // Copy the new value + VariantCopy(pVar, &(*i).vValue); + return S_OK; + } + } + return S_OK; +} + + +HRESULT STDMETHODCALLTYPE CPropertyBag::Write(/* [in] */ LPCOLESTR pszPropName, /* [in] */ VARIANT __RPC_FAR *pVar) +{ + if (pszPropName == NULL) + { + return E_INVALIDARG; + } + if (pVar == NULL) + { + return E_INVALIDARG; + } + + PropertyList::iterator i; + for (i = m_PropertyList.begin(); i != m_PropertyList.end(); i++) + { + // Is the property already in the list? + if (wcsicmp((*i).szName, pszPropName) == 0) + { + // Copy the new value + (*i).vValue = CComVariant(*pVar); + return S_OK; + } + } + + Property p; + p.szName = CComBSTR(pszPropName); + p.vValue = *pVar; + + m_PropertyList.push_back(p); + return S_OK; +} + diff --git a/mozilla/webshell/embed/ActiveX/PropertyBag.h b/mozilla/webshell/embed/ActiveX/PropertyBag.h new file mode 100644 index 00000000000..7cb86d9af59 --- /dev/null +++ b/mozilla/webshell/embed/ActiveX/PropertyBag.h @@ -0,0 +1,43 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#ifndef PROPERTYBAG_H +#define PROPERTYBAG_H + + +class CPropertyBag : public CComObjectRootEx, + public IPropertyBag +{ + // List of properties in the bag + PropertyList m_PropertyList; + +public: + CPropertyBag(); + virtual ~CPropertyBag(); + +BEGIN_COM_MAP(CPropertyBag) + COM_INTERFACE_ENTRY(IPropertyBag) +END_COM_MAP() + + // IPropertyBag methods + virtual /* [local] */ HRESULT STDMETHODCALLTYPE Read(/* [in] */ LPCOLESTR pszPropName, /* [out][in] */ VARIANT __RPC_FAR *pVar, /* [in] */ IErrorLog __RPC_FAR *pErrorLog); + virtual HRESULT STDMETHODCALLTYPE Write(/* [in] */ LPCOLESTR pszPropName, /* [in] */ VARIANT __RPC_FAR *pVar); +}; + +typedef CComObject CPropertyBagInstance; + +#endif \ No newline at end of file diff --git a/mozilla/webshell/embed/ActiveX/PropertyList.h b/mozilla/webshell/embed/ActiveX/PropertyList.h new file mode 100644 index 00000000000..62a33ce03fc --- /dev/null +++ b/mozilla/webshell/embed/ActiveX/PropertyList.h @@ -0,0 +1,45 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * The contents of this file are subject to the Netscape Public License + * Version 1.0 (the "NPL"); you may not use this file except in + * compliance with the NPL. You may obtain a copy of the NPL at + * http://www.mozilla.org/NPL/ + * + * Software distributed under the NPL is distributed on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL + * for the specific language governing rights and limitations under the + * NPL. + * + * The Initial Developer of this code under the NPL is Netscape + * Communications Corporation. Portions created by Netscape are + * Copyright (C) 1998 Netscape Communications Corporation. All Rights + * Reserved. + */ +#ifndef PROPERTYLIST_H +#define PROPERTYLIST_H + + +// Property is a name,variant pair held by the browser. In IE, properties +// offer a primitive way for DHTML elements to talk back and forth with +// the host app. The Mozilla app currently just implements them for +// compatibility reasons +struct Property +{ + CComBSTR szName; + CComVariant vValue; +}; + +// A list of properties +typedef std::vector PropertyList; + + +// DEVNOTE: These operators are required since the unpatched VC++ 5.0 +// generates code even for unreferenced template methods in +// the file and will give compiler errors without +// them. Service Pack 1 and above fixes this problem + +int operator <(const Property&, const Property&); +int operator ==(const Property&, const Property&); + + +#endif \ No newline at end of file