277 lines
6.6 KiB
C++
277 lines
6.6 KiB
C++
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
//
|
||
|
// IASBooleanAttributeEditor.cpp
|
||
|
//
|
||
|
// Abstract:
|
||
|
//
|
||
|
// Implementation file for the CIASBooleanAttributeEditor class.
|
||
|
//
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "Precompiled.h"
|
||
|
#include "IASBooleanAttributeEditor.h"
|
||
|
#include "IASBooleanEditorPage.h"
|
||
|
#include "iashelper.h"
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// CIASBooleanAttributeEditor::CIASBooleanAttributeEditor
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
CIASBooleanAttributeEditor::CIASBooleanAttributeEditor()
|
||
|
{
|
||
|
int nLoadStringResult = LoadString(
|
||
|
_Module.GetResourceInstance(),
|
||
|
IDS_BOOLEAN_TRUE,
|
||
|
szTrue,
|
||
|
IAS_MAX_STRING);
|
||
|
_ASSERT( nLoadStringResult > 0 );
|
||
|
|
||
|
nLoadStringResult = LoadString(
|
||
|
_Module.GetResourceInstance(),
|
||
|
IDS_BOOLEAN_FALSE,
|
||
|
szFalse,
|
||
|
IAS_MAX_STRING);
|
||
|
_ASSERT( nLoadStringResult > 0 );
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// CIASBooleanAttributeEditor::ShowEditor
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CIASBooleanAttributeEditor::ShowEditor(
|
||
|
/*[in, out]*/ BSTR *pReserved
|
||
|
)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState())
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
try
|
||
|
{
|
||
|
//
|
||
|
// Boolean Editor
|
||
|
//
|
||
|
CIASBooleanEditorPage cBoolPage;
|
||
|
|
||
|
// Initialize the page's data exchange fields with info
|
||
|
// from IAttributeInfo
|
||
|
|
||
|
CComBSTR bstrName;
|
||
|
CComBSTR bstrSyntax;
|
||
|
ATTRIBUTESYNTAX asSyntax = IAS_SYNTAX_BOOLEAN;
|
||
|
ATTRIBUTEID Id = ATTRIBUTE_UNDEFINED;
|
||
|
|
||
|
if( m_spIASAttributeInfo )
|
||
|
{
|
||
|
hr = m_spIASAttributeInfo->get_AttributeName( &bstrName );
|
||
|
if( FAILED(hr) ) throw hr;
|
||
|
|
||
|
hr = m_spIASAttributeInfo->get_SyntaxString( &bstrSyntax );
|
||
|
if( FAILED(hr) ) throw hr;
|
||
|
|
||
|
hr = m_spIASAttributeInfo->get_AttributeSyntax( &asSyntax );
|
||
|
if( FAILED(hr) ) throw hr;
|
||
|
|
||
|
hr = m_spIASAttributeInfo->get_AttributeID( &Id );
|
||
|
if( FAILED(hr) ) throw hr;
|
||
|
}
|
||
|
|
||
|
cBoolPage.m_strAttrName = bstrName;
|
||
|
cBoolPage.m_strAttrFormat = bstrSyntax;
|
||
|
|
||
|
// Attribute type is actually attribute ID in string format
|
||
|
WCHAR szTempId[MAX_PATH];
|
||
|
wsprintf(szTempId, _T("%ld"), Id);
|
||
|
cBoolPage.m_strAttrType = szTempId;
|
||
|
|
||
|
// Initialize the page's data exchange fields with info
|
||
|
// from VARIANT value passed in.
|
||
|
|
||
|
if ( V_VT(m_pvarValue) == VT_EMPTY )
|
||
|
{
|
||
|
V_VT(m_pvarValue) = VT_BOOL;
|
||
|
V_BOOL(m_pvarValue) = VARIANT_FALSE;
|
||
|
}
|
||
|
|
||
|
cBoolPage.m_bValue = (V_BOOL(m_pvarValue) == VARIANT_TRUE);
|
||
|
|
||
|
int iResult = cBoolPage.DoModal();
|
||
|
if (IDOK == iResult)
|
||
|
{
|
||
|
CComVariant varTemp;
|
||
|
varTemp = cBoolPage.m_bValue;
|
||
|
put_ValueAsVariant(varTemp);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
hr = S_FALSE;
|
||
|
}
|
||
|
}
|
||
|
catch( HRESULT & hr )
|
||
|
{
|
||
|
return hr;
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
return hr = E_FAIL;
|
||
|
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
|
||
|
CIASBooleanAttributeEditor::SetAttributeValue
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CIASBooleanAttributeEditor::SetAttributeValue(VARIANT * pValue)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState())
|
||
|
|
||
|
// Check for preconditions.
|
||
|
if( ! pValue )
|
||
|
{
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
|
||
|
m_pvarValue = pValue;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// CIASBooleanAttributeEditor::get_ValueAsString
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CIASBooleanAttributeEditor::get_ValueAsString(
|
||
|
BSTR * pbstrDisplayText)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState())
|
||
|
|
||
|
// Check for preconditions.
|
||
|
if( ! pbstrDisplayText )
|
||
|
{
|
||
|
return E_INVALIDARG;
|
||
|
}
|
||
|
if( ! m_spIASAttributeInfo || ! m_pvarValue )
|
||
|
{
|
||
|
// We are not initialized properly.
|
||
|
return OLE_E_BLANK;
|
||
|
}
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
CComBSTR bstrDisplay;
|
||
|
|
||
|
VARTYPE vType = V_VT(m_pvarValue);
|
||
|
|
||
|
switch( vType )
|
||
|
{
|
||
|
case VT_BOOL:
|
||
|
{
|
||
|
if( V_BOOL(m_pvarValue) )
|
||
|
{
|
||
|
bstrDisplay = szTrue; //L"TRUE";
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
bstrDisplay = szFalse; //L"FALSE";
|
||
|
}
|
||
|
break;
|
||
|
}
|
||
|
case VT_EMPTY:
|
||
|
// do nothing -- we will fall through and return a blank string.
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
// need to check what is happening here,
|
||
|
ASSERT(0);
|
||
|
break;
|
||
|
|
||
|
}
|
||
|
|
||
|
*pbstrDisplayText = bstrDisplay.Copy();
|
||
|
|
||
|
}
|
||
|
catch( HRESULT &hr )
|
||
|
{
|
||
|
return hr;
|
||
|
}
|
||
|
catch(...)
|
||
|
{
|
||
|
return E_FAIL;
|
||
|
}
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// CIASBooleanAttributeEditor::put_ValueAsVariant
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CIASBooleanAttributeEditor::put_ValueAsVariant(
|
||
|
const CComVariant& newVal)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState())
|
||
|
|
||
|
if( ! m_pvarValue )
|
||
|
{
|
||
|
// We are not initialized properly.
|
||
|
return OLE_E_BLANK;
|
||
|
}
|
||
|
if( m_spIASAttributeInfo == NULL )
|
||
|
{
|
||
|
// We are not initialized properly.
|
||
|
return OLE_E_BLANK;
|
||
|
}
|
||
|
|
||
|
if( V_VT(&newVal) != VT_BOOL)
|
||
|
{
|
||
|
ASSERT(true);
|
||
|
}
|
||
|
|
||
|
V_VT(m_pvarValue) = VT_BOOL;
|
||
|
V_BOOL(m_pvarValue) = V_BOOL(&newVal);
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
// CIASBooleanAttributeEditor::put_ValueAsString
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
STDMETHODIMP CIASBooleanAttributeEditor::put_ValueAsString(BSTR newVal)
|
||
|
{
|
||
|
AFX_MANAGE_STATE(AfxGetStaticModuleState())
|
||
|
|
||
|
if( ! m_pvarValue )
|
||
|
{
|
||
|
// We are not initialized properly.
|
||
|
return OLE_E_BLANK;
|
||
|
}
|
||
|
if( m_spIASAttributeInfo == NULL )
|
||
|
{
|
||
|
// We are not initialized properly.
|
||
|
return OLE_E_BLANK;
|
||
|
}
|
||
|
|
||
|
CComBSTR bstrTemp(newVal);
|
||
|
|
||
|
V_VT(m_pvarValue) = VT_BOOL;
|
||
|
if( wcsncmp(newVal, szTrue, wcslen(szTrue) ) == 0 )
|
||
|
{
|
||
|
V_BOOL(m_pvarValue) = VARIANT_TRUE;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
V_BOOL(m_pvarValue) = VARIANT_FALSE;
|
||
|
}
|
||
|
|
||
|
return S_OK;
|
||
|
}
|