home *** CD-ROM | disk | FTP | other *** search
- #include "StdAfx.H"
- #include "TestCon.H"
-
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
-
-
- IMPLEMENT_DYNAMIC( CScriptManager, CObject );
-
- CScriptManager::CScriptManager( CTestContainer98Doc* pDoc ) :
- m_pDoc( pDoc )
- {
- ASSERT( m_pDoc != NULL );
- }
-
- CScriptManager::~CScriptManager()
- {
- CScript* pScript;
- IDispatch* pDispatch;
- POSITION posNamedItem;
- CString strItemName;
-
- while( !m_lpScripts.IsEmpty() )
- {
- pScript = m_lpScripts.RemoveHead();
- delete pScript;
- }
-
- posNamedItem = m_mapNamedItems.GetStartPosition();
- while( posNamedItem != NULL )
- {
- m_mapNamedItems.GetNextAssoc( posNamedItem, strItemName, pDispatch );
- pDispatch->Release();
- }
- }
-
- HRESULT CScriptManager::AddNamedItem( LPCTSTR pszItemName,
- IDispatch* pDispatch )
- {
- USES_CONVERSION;
- POSITION posScript;
- CScript* pScript;
- HRESULT hResult;
- LPCOLESTR pszItemNameO;
-
- m_mapNamedItems.SetAt( pszItemName, pDispatch );
- pDispatch->AddRef();
-
- pszItemNameO = T2COLE( pszItemName );
- posScript = GetFirstScriptPosition();
- while( posScript != NULL )
- {
- pScript = GetNextScript( posScript );
- ASSERT( pScript != NULL );
- hResult = pScript->AddNamedItem( pszItemName );
- if( FAILED( hResult ) )
- {
- return( hResult );
- }
- }
-
- return( S_OK );
- }
-
- HRESULT CScriptManager::AddNamedItems( IActiveScript* pScript )
- {
- HRESULT hResult;
- POSITION posNamedItem;
- IDispatch* pDispatch;
- CString strItemName;
- BSTR bstrItemName;
-
- ASSERT( pScript != NULL );
-
- hResult = pScript->AddNamedItem( L"TCForm", SCRIPTITEM_ISVISIBLE|
- SCRIPTITEM_ISSOURCE );
- if( FAILED( hResult ) )
- {
- return( hResult );
- }
-
- posNamedItem = m_mapNamedItems.GetStartPosition();
- while( posNamedItem != NULL )
- {
- m_mapNamedItems.GetNextAssoc( posNamedItem, strItemName, pDispatch );
- bstrItemName = strItemName.AllocSysString();
- hResult = pScript->AddNamedItem( bstrItemName, SCRIPTITEM_ISVISIBLE|
- SCRIPTITEM_ISSOURCE );
- SysFreeString( bstrItemName );
- if( FAILED( hResult ) )
- {
- return( hResult );
- }
- }
-
- return( S_OK );
- }
-
- CScript* CScriptManager::FindMacro( LPCTSTR pszMacroName )
- {
- POSITION posScript;
- CScript* pScript;
-
- ASSERT( pszMacroName != NULL );
-
- posScript = GetFirstScriptPosition();
- while( posScript != NULL )
- {
- pScript = GetNextScript( posScript );
- if( pScript->FindMacro( pszMacroName ) )
- {
- return( pScript );
- }
- }
-
- return( NULL );
- }
-
- POSITION CScriptManager::GetFirstScriptPosition() const
- {
- return( m_lpScripts.GetHeadPosition() );
- }
-
- HRESULT CScriptManager::GetItemDispatch( LPCTSTR pszItemName,
- IUnknown** ppDispatch )
- {
- IDispatch* pDispatch;
- BOOL tFound;
-
- ASSERT( pszItemName != NULL );
- ASSERT( ppDispatch != NULL );
-
- *ppDispatch = NULL;
-
- if( strcmp( pszItemName, "TCForm" ) == 0 )
- {
- *ppDispatch = m_pDoc->GetIDispatch( TRUE );
- return( S_OK );
- }
- else
- {
- tFound = m_mapNamedItems.Lookup( pszItemName, pDispatch );
- if( tFound )
- {
- *ppDispatch = pDispatch;
- (*ppDispatch)->AddRef();
- return( S_OK );
- }
- }
-
- return( TYPE_E_ELEMENTNOTFOUND );
- }
-
- HRESULT CScriptManager::GetItemTypeInfo( LPCTSTR pszItemName,
- ITypeInfo** ppTypeInfo )
- {
- IProvideClassInfoPtr pProvideClassInfo;
- IDispatch* pDispatch;
- HRESULT hResult;
- BOOL tFound;
-
- ASSERT( pszItemName != NULL );
- ASSERT( ppTypeInfo != NULL );
-
- *ppTypeInfo = NULL;
-
- if( strcmp( pszItemName, "TCForm" ) == 0 )
- {
- hResult = m_pDoc->GetTypeInfoOfGuid( GetUserDefaultLCID(),
- __uuidof( Document ), ppTypeInfo );
- if( SUCCEEDED( hResult ) )
- {
- return( S_OK );
- }
- }
- else
- {
- tFound = m_mapNamedItems.Lookup( pszItemName, pDispatch );
- if( tFound )
- {
- pProvideClassInfo = pDispatch;
- if( pProvideClassInfo != NULL )
- {
- hResult = pProvideClassInfo->GetClassInfo( ppTypeInfo );
- if( SUCCEEDED( hResult ) )
- {
- return( S_OK );
- }
- }
- }
- }
-
- return( TYPE_E_ELEMENTNOTFOUND );
- }
-
- CScript* CScriptManager::GetNextScript( POSITION& posScript )
- {
- return( m_lpScripts.GetNext( posScript ) );
- }
-
- int CScriptManager::GetNumScripts() const
- {
- return( m_lpScripts.GetCount() );
- }
-
- HRESULT CScriptManager::LoadScript( LPCTSTR pszFileName,
- LPCTSTR pszScriptName, CScript** ppScript )
- {
- CScript* pScript;
- HRESULT hResult;
- POSITION posScript;
-
- ASSERT( pszFileName != NULL );
- ASSERT( pszScriptName != NULL );
-
- if( ppScript != NULL )
- {
- *ppScript = NULL;
- }
-
- pScript = new CScript( this );
- if( pScript == NULL )
- {
- return( E_OUTOFMEMORY );
- }
-
- posScript = m_lpScripts.AddHead( pScript );
-
- hResult = pScript->LoadScript( pszFileName, pszScriptName );
- if( FAILED( hResult ) )
- {
- m_lpScripts.RemoveAt( posScript );
- delete pScript;
- return( hResult );
- }
-
- if( ppScript != NULL )
- {
- *ppScript = pScript;
- }
-
- return( S_OK );
- }
-