336 lines
11 KiB
C++
336 lines
11 KiB
C++
/******************************************************************************
|
|
|
|
Copyright (c) 2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
UserSettings.cpp
|
|
|
|
Abstract:
|
|
This file contains the implementation of the client-side proxy for
|
|
IPCHUserSettings2 and IPCHUserSettings.
|
|
|
|
Revision History:
|
|
Davide Massarenti (Dmassare) 07/17/2000
|
|
created
|
|
|
|
******************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include <TaxonomyDatabase.h>
|
|
|
|
#define PROXY_METHOD(func,meth) \
|
|
__HCP_FUNC_ENTRY( func ); \
|
|
\
|
|
HRESULT hr; \
|
|
CComPtr<IPCHSetOfHelpTopics> sht; \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht )); \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->##meth()); \
|
|
\
|
|
hr = S_OK; \
|
|
\
|
|
__HCP_FUNC_CLEANUP; \
|
|
\
|
|
__HCP_FUNC_EXIT(hr)
|
|
|
|
#define PROXY_PROPERTY_PUT(func,meth,newVal) \
|
|
__HCP_BEGIN_PROPERTY_PUT__NOLOCK(func,hr); \
|
|
\
|
|
CComPtr<IPCHSetOfHelpTopics> sht; \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht )); \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->##meth( newVal )); \
|
|
\
|
|
__HCP_END_PROPERTY(hr)
|
|
|
|
#define PROXY_PROPERTY_GET(func,meth,pVal) \
|
|
__HCP_BEGIN_PROPERTY_GET__NOLOCK(func,hr,pVal); \
|
|
\
|
|
CComPtr<IPCHSetOfHelpTopics> sht; \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht )); \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->##meth( pVal )); \
|
|
\
|
|
__HCP_END_PROPERTY(hr)
|
|
|
|
#define PROXY_PROPERTY_GET2(func,meth,pVal,value) \
|
|
__HCP_BEGIN_PROPERTY_GET2__NOLOCK(func,hr,pVal,value); \
|
|
\
|
|
CComPtr<IPCHSetOfHelpTopics> sht; \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht )); \
|
|
\
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->##meth( pVal )); \
|
|
\
|
|
__HCP_END_PROPERTY(hr)
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
CPCHProxy_IPCHSetOfHelpTopics::CPCHProxy_IPCHSetOfHelpTopics()
|
|
{
|
|
m_parent = NULL; // CPCHProxy_IPCHUserSettings2* m_parent;
|
|
//
|
|
// MPC::CComPtrThreadNeutral<IPCHSetOfHelpTopics> m_Direct_SKU;
|
|
m_fMachine = false; // bool m_fMachine;
|
|
}
|
|
|
|
CPCHProxy_IPCHSetOfHelpTopics::~CPCHProxy_IPCHSetOfHelpTopics()
|
|
{
|
|
Passivate();
|
|
}
|
|
|
|
////////////////////
|
|
|
|
HRESULT CPCHProxy_IPCHSetOfHelpTopics::ConnectToParent( /*[in]*/ CPCHProxy_IPCHUserSettings2* parent, /*[in]*/ bool fMachine )
|
|
{
|
|
__HCP_FUNC_ENTRY( "CPCHProxy_IPCHSetOfHelpTopics::ConnectToParent" );
|
|
|
|
HRESULT hr;
|
|
|
|
__MPC_PARAMCHECK_BEGIN(hr)
|
|
__MPC_PARAMCHECK_NOTNULL(parent);
|
|
__MPC_PARAMCHECK_END();
|
|
|
|
|
|
m_parent = parent;
|
|
m_fMachine = fMachine;
|
|
|
|
//
|
|
// If the parent is connected directly, let's do the same.
|
|
//
|
|
if(parent->IsConnected())
|
|
{
|
|
CComPtr<IPCHSetOfHelpTopics> sht;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht ));
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__HCP_FUNC_CLEANUP;
|
|
|
|
__HCP_FUNC_EXIT(hr);
|
|
}
|
|
|
|
void CPCHProxy_IPCHSetOfHelpTopics::Passivate()
|
|
{
|
|
m_Direct_SKU.Release();
|
|
|
|
m_parent = NULL;
|
|
}
|
|
|
|
HRESULT CPCHProxy_IPCHSetOfHelpTopics::EnsureDirectConnection( /*[out]*/ CComPtr<IPCHSetOfHelpTopics>& sht, /*[in]*/ bool fRefresh )
|
|
{
|
|
__HCP_FUNC_ENTRY( "CPCHProxy_IPCHSetOfHelpTopics::EnsureDirectConnection" );
|
|
|
|
HRESULT hr;
|
|
ProxySmartLock lock( &m_DirectLock );
|
|
|
|
|
|
if(fRefresh) m_Direct_SKU.Release();
|
|
|
|
sht.Release(); __MPC_EXIT_IF_METHOD_FAILS(hr, m_Direct_SKU.Access( &sht ));
|
|
if(!sht)
|
|
{
|
|
DEBUG_AppendPerf( DEBUG_PERF_PROXIES, "CPCHProxy_IPCHSetOfHelpTopics::EnsureDirectConnection - IN" );
|
|
|
|
if(m_parent)
|
|
{
|
|
CComPtr<IPCHUserSettings> us;
|
|
|
|
lock = NULL;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, m_parent->EnsureDirectConnection( us ));
|
|
lock = &m_DirectLock;
|
|
|
|
if(m_fMachine)
|
|
{
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, us->get_MachineSKU( &sht ));
|
|
}
|
|
else
|
|
{
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, us->get_CurrentSKU( &sht ));
|
|
}
|
|
|
|
m_Direct_SKU = sht;
|
|
}
|
|
|
|
DEBUG_AppendPerf( DEBUG_PERF_PROXIES, "CPCHProxy_IPCHSetOfHelpTopics::EnsureDirectConnection - OUT" );
|
|
|
|
if(!sht)
|
|
{
|
|
__MPC_SET_ERROR_AND_EXIT(hr, E_HANDLE);
|
|
}
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__HCP_FUNC_CLEANUP;
|
|
|
|
__HCP_FUNC_EXIT(hr);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_SKU( /*[out, retval]*/ BSTR *pVal )
|
|
{
|
|
__HCP_BEGIN_PROPERTY_GET("CPCHProxy_IPCHSetOfHelpTopics::get_SKU",hr,pVal);
|
|
|
|
if(IsConnected())
|
|
{
|
|
CComPtr<IPCHSetOfHelpTopics> sht;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->get_SKU( pVal ));
|
|
}
|
|
else if(m_parent)
|
|
{
|
|
Taxonomy::HelpSet& ths = m_parent->THS();
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( (m_fMachine ? ths.m_strSKU_Machine : ths.m_strSKU).c_str(), pVal ));
|
|
}
|
|
|
|
__HCP_END_PROPERTY(hr);
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_Language( /*[out, retval]*/ long *pVal )
|
|
{
|
|
__HCP_BEGIN_PROPERTY_GET("CPCHProxy_IPCHSetOfHelpTopics::get_SKU",hr,pVal);
|
|
|
|
if(IsConnected())
|
|
{
|
|
CComPtr<IPCHSetOfHelpTopics> sht;
|
|
|
|
lock = NULL;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht ));
|
|
lock = this;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->get_Language( pVal ));
|
|
}
|
|
else if(m_parent)
|
|
{
|
|
Taxonomy::HelpSet& ths = m_parent->THS();
|
|
|
|
*pVal = (m_fMachine ? ths.m_lLCID_Machine : ths.m_lLCID);
|
|
}
|
|
|
|
__HCP_END_PROPERTY(hr);
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_DisplayName( /*[out, retval]*/ BSTR *pVal )
|
|
{
|
|
__HCP_BEGIN_PROPERTY_GET("CPCHProxy_IPCHSetOfHelpTopics::get_DisplayName",hr,pVal);
|
|
|
|
if(IsConnected())
|
|
{
|
|
CComPtr<IPCHSetOfHelpTopics> sht;
|
|
|
|
lock = NULL;
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, EnsureDirectConnection( sht ));
|
|
lock = this;
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, sht->get_DisplayName( pVal ));
|
|
}
|
|
else if(m_parent)
|
|
{
|
|
Taxonomy::Instance& inst = (m_fMachine ? m_parent->MachineInstance() : m_parent->CurrentInstance());
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, m_parent->EnsureInSync());
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, MPC::GetBSTR( inst.m_strDisplayName.c_str(), pVal ));
|
|
}
|
|
|
|
__HCP_END_PROPERTY(hr);
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_ProductID( /*[out, retval]*/ BSTR *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_ProductID", get_ProductID, pVal );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_Version( /*[out, retval]*/ BSTR *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_Location", get_Location, pVal );
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_Location( /*[out, retval]*/ BSTR *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_Location", get_Location, pVal );
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_Exported( /*[out, retval]*/ VARIANT_BOOL *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_Exported", get_Exported, pVal );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::put_Exported( /*[in]*/ VARIANT_BOOL newVal )
|
|
{
|
|
PROXY_PROPERTY_PUT( "CPCHProxy_IPCHSetOfHelpTopics::put_Exported", put_Exported, newVal );
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::put_onStatusChange( /*[in]*/ IDispatch* function )
|
|
{
|
|
PROXY_PROPERTY_PUT( "CPCHProxy_IPCHSetOfHelpTopics::put_onStatusChange", put_onStatusChange, function );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_Status( /*[out, retval]*/ SHT_STATUS *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET2( "CPCHProxy_IPCHSetOfHelpTopics::get_Status", get_Status, pVal, SHT_NOTACTIVE );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_ErrorCode( /*[out, retval]*/ long *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_ErrorCode", get_ErrorCode, pVal );
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_IsMachineHelp( /*[out, retval]*/ VARIANT_BOOL *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_IsMachineHelp", get_IsMachineHelp, pVal );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_IsInstalled( /*[out, retval]*/ VARIANT_BOOL *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_IsInstalled", get_IsInstalled, pVal );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_CanInstall( /*[out, retval]*/ VARIANT_BOOL *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_CanInstall", get_CanInstall, pVal );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::get_CanUninstall( /*[out, retval]*/ VARIANT_BOOL *pVal )
|
|
{
|
|
PROXY_PROPERTY_GET( "CPCHProxy_IPCHSetOfHelpTopics::get_CanUninstall", get_CanUninstall, pVal );
|
|
}
|
|
|
|
////////////////////////////////////////
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::Install()
|
|
{
|
|
PROXY_METHOD( "CPCHProxy_IPCHSetOfHelpTopics::Install", Install );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::Uninstall()
|
|
{
|
|
PROXY_METHOD( "CPCHProxy_IPCHSetOfHelpTopics::Uninstall", Uninstall );
|
|
}
|
|
|
|
STDMETHODIMP CPCHProxy_IPCHSetOfHelpTopics::Abort()
|
|
{
|
|
PROXY_METHOD( "CPCHProxy_IPCHSetOfHelpTopics::Abort", Abort );
|
|
}
|