|
|
/*
* NOTMGR.C * * Purpose: * Notification Manager implemenation * * Author: * AlexGo 6/5/95 * * Copyright (c) 1995-1997, Microsoft Corporation. All rights reserved. */
#include "_common.h"
#include "_notmgr.h"
ASSERTDATA
/*
* CNotifyMgr::CNotifyMgr () */ CNotifyMgr::CNotifyMgr() { TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::CNotifyMgr");
_pitnlist = NULL; }
/*
* CNotifyMgr::~CNotifyMgr () * */ CNotifyMgr::~CNotifyMgr() { TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::~CNotifyMgr");
ITxNotify *plist;
for( plist = _pitnlist; plist != NULL; plist = plist->_pnext ) { plist->Zombie(); }
TRACEERRSZSC("CNotifyMgr::~CNotifyMgr(): zombie(s) exist", _pitnlist != 0); }
/*
* CNotifyMgr::Add (pITN) * * @mfunc * Adds a notification sink to the list * * Algorithm: * puts the entry at the *front* of the notification list, so * that high frequency entries (like ranges and text pointers * existing on the stack) can be added and removed efficiently */ void CNotifyMgr::Add( ITxNotify *pITN ) { TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::Add");
pITN->_pnext = _pitnlist; _pitnlist = pITN; }
/*
* CNotifyMgr::Remove (pITN) * * @mfunc * removes a notification sink from the list */ void CNotifyMgr::Remove( ITxNotify *pITN ) { TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::Remove");
ITxNotify *plist = _pitnlist; ITxNotify **ppprev = &_pitnlist;
while(plist) { if( plist == pITN ) { *ppprev = plist->_pnext; break; } ppprev = &(plist->_pnext); plist = plist->_pnext; } }
/*
* CNotifyMgr::NotifyPreReplaceRange (pITNignore, cp, cchDel, cchNew, cpFormatMin, cpFormatMax, dwFlags) * * @mfunc * send an OnReplaceRange notification to all sinks (except pITNignore) */ void CNotifyMgr::NotifyPreReplaceRange( ITxNotify * pITNignore, //@parm Notification sink to ignore
LONG cp, //@parm cp where ReplaceRange starts ("cpMin")
LONG cchDel, //@parm Count of chars after cp that are deleted
LONG cchNew, //@parm Count of chars inserted after cp
LONG cpFormatMin, //@parm cpMin for a formatting change
LONG cpFormatMax, //@parm cpMost for a formatting change
NOTIFY_DATA *pNotifyData) //@parm special data to indicate changes
{ TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::NotifyPreReplaceRange");
ITxNotify *plist;
for( plist = _pitnlist; plist != NULL; plist = plist->_pnext ) { if( plist != pITNignore ) { plist->OnPreReplaceRange( cp, cchDel, cchNew, cpFormatMin, cpFormatMax, pNotifyData ); } } }
/*
* CNotifyMgr::NotifyPostReplaceRange (pITNignore, cp, cchDel, cchNew, cpFormatMin, cpFormatMax, dwFlags) * * @mfunc * send an OnReplaceRange notification to all sinks (except pITNignore) * * @comm * pITNignore typically is the TxtPtr/etc that is actually making the * ReplaceRange modification */ void CNotifyMgr::NotifyPostReplaceRange( ITxNotify * pITNignore, //@parm Notification sink to ignore
LONG cp, //@parm cp where ReplaceRange starts ("cpMin")
LONG cchDel, //@parm Count of chars after cp that are deleted
LONG cchNew, //@parm Count of chars inserted after cp
LONG cpFormatMin, //@parm cpMin for a formatting change
LONG cpFormatMax, //@parm cpMost for a formatting change
NOTIFY_DATA *pNotifyData) //@parm special data to indicate changes
{ TRACEBEGIN(TRCSUBSYSNOTM, TRCSCOPEINTERN, "CNotifyMgr::NotifyPostReplaceRange");
ITxNotify *plist;
for( plist = _pitnlist; plist != NULL; plist = plist->_pnext ) { if( plist != pITNignore ) { plist->OnPostReplaceRange( cp, cchDel, cchNew, cpFormatMin, cpFormatMax, pNotifyData ); } } }
|