VIEWNTFR.CPP
/* copyright (c) 1995 Microsoft Corporation -- All rights reserved */ 
 
#include "precomp.h" 
 
#pragma warning(disable:4514) // Unreferened inline function has been removed 
 
CViewNotifier::CViewNotifier (void) 
{ 
    Initialize(); 
} 
 
CViewNotifier::~CViewNotifier () 
{ 
} 
 
BOOL CViewNotifier::Initialize (void) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) 
    { 
        m_aryAdviseSink [i] = NULL; 
    } 
 
    return TRUE; 
} 
 
HRESULT CViewNotifier::Advise(LPMAPIVIEWADVISESINK pAdvise, 
                              ULONG * pulConnection) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) 
    { 
        if (NULL == m_aryAdviseSink [i] ) 
        { 
            m_aryAdviseSink [i] = pAdvise; 
            m_aryAdviseSink [i] ->AddRef(); 
            *pulConnection = ++i; 
            // connection == index + 1 
            return S_OK; 
        } 
    } 
 
    return ResultFromScode(E_OUTOFMEMORY); 
} 
 
HRESULT CViewNotifier::Unadvise (ULONG ulConnection) 
{ 
    if (--ulConnection < MAXSINKS) 
    {   // connection == index + 1 
        m_aryAdviseSink [ulConnection] ->Release(); 
        m_aryAdviseSink [ulConnection] = NULL; 
        return S_OK; 
    } 
    return ResultFromScode(E_INVALIDARG); 
} 
 
void CViewNotifier::OnShutdown (void) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) 
    { 
        if (NULL != m_aryAdviseSink [i] ) 
        { 
            m_aryAdviseSink [i] -> OnShutdown (); 
        } 
    } 
} 
 
void CViewNotifier::OnNewMessage (void) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) 
    { 
        if (NULL != m_aryAdviseSink [i] ) 
        { 
            m_aryAdviseSink [i] ->OnNewMessage(); 
        } 
    } 
} 
 
HRESULT CViewNotifier::OnPrint(ULONG ulPageNumber, HRESULT hrStatus) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) 
    { 
        if (NULL != m_aryAdviseSink [i] ) 
        { 
            if(MAPI_E_USER_CANCEL == GetScode(m_aryAdviseSink [i] ->OnPrint(ulPageNumber, hrStatus))) 
                return MAPI_E_USER_CANCEL; 
        } 
    } 
     
    return hrSuccess; 
} 
 
void CViewNotifier::OnSubmitted (void) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) { 
        if (NULL != m_aryAdviseSink [i] ) { 
            m_aryAdviseSink [i] ->OnSubmitted(); 
        } 
    } 
} 
 
void CViewNotifier::OnSaved (void) 
{ 
    ULONG   i; 
 
    for (i = 0; i < MAXSINKS; ++i) { 
        if (NULL != m_aryAdviseSink [i] ) { 
            m_aryAdviseSink [i] ->OnSaved(); 
        } 
    } 
}