|
|
/*
* @doc INTERNAL * * @module _ANTIEVT.H | * * * Purpose: * Class declarations for common anti-event objects * * Author: * alexgo 3/25/95 * * Copyright (c) 1995-2000, Microsoft Corporation. All rights reserved. */
#ifndef __ANTIEVT_H__
#define __ANTIEVT_H__
#include "_frunptr.h"
class CTxtEdit; class CAntiEventDispenser; class COleObject;
/*
* CBaseAE * * @class * Base anti-event that manages a linked list of anti-events * */ class CBaseAE : public IAntiEvent { //@access Public Methods
public: virtual void Destroy(); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo( CTxtEdit *ped, IUndoBuilder *publdr ); virtual HRESULT MergeData( DWORD dwDataType, void *pdata); //@cmember
// Merges undo data into the
// current context.
virtual void OnCommit( CTxtEdit *ped ); //@cmember Called when AE is
// committed to undo stack
virtual void SetNext( IAntiEvent *pNext ); //@cmember Sets next AE
virtual IAntiEvent *GetNext(); //@cmember Gets next AE
//@access Protected Methods
protected: // CBaseAE should only exist as a parent class
CBaseAE(); //@cmember Constructor
~CBaseAE(){;}
//@access Private Methods and Data
private: IAntiEvent * _pnext; //@cmember Pointer to the next
//AntiEvent
};
/*
* CReplaceRangeAE * * @class * an anti-event object than undoes a CTxtPtr::ReplaceRange * operation * * @base public | CBaseAE */ class CReplaceRangeAE: public CBaseAE { //@access Public Methods
public: // IAntiEvent methods
virtual void Destroy(); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo( CTxtEdit *ped, IUndoBuilder *publdr); virtual HRESULT MergeData( DWORD dwDataType, void *pdata); //@cmember
// Merges undo data into the
// current context
//@access Private methods and data
private: //@cmember Constructor
CReplaceRangeAE(LONG cpMin, LONG cpMax, LONG cchDel, TCHAR *pchDel, IAntiEvent *paeCF, IAntiEvent *paePF); ~CReplaceRangeAE(); //@cmember Destructor
LONG _cpMin; //@cmember cp delete start
LONG _cpMax; //@cmember cp delete end
LONG _cchDel; //@cmember #of chars to insert
TCHAR * _pchDel; //@cmember chars to insert
IAntiEvent *_paeCF; //@cmember charformat AE
IAntiEvent *_paePF; //@cmember par format AE
friend class CAntiEventDispenser; };
/*
* CReplaceFormattingAE * * @class * an anti-event object than undoes replacing multiple char formats * * @base public | CBaseAE */ class CReplaceFormattingAE: public CBaseAE { //@access Public methods
public: //
// IAntiEvent methods
//
virtual void Destroy(); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo(CTxtEdit *ped, IUndoBuilder *publdr);
//@access Private Methods and Data
private: //@cmember Constructor
CReplaceFormattingAE(CTxtEdit* ped, LONG cp, CFormatRunPtr &rp, LONG cch, IFormatCache *pf, BOOL fPara);
~CReplaceFormattingAE(); //@cmember Destuctor
LONG _cp; //@cmember cp at formatting start
LONG _cRuns; //@cmember # of format runs
CFormatRun *_prgRuns; //@cmember format runs
BOOL _fPara; //@cmember TRUE if para format
friend class CAntiEventDispenser; };
/*
* CReplaceObjectAE * * @class * an anti-event object that undoes the deletion of an object * * @base public | CBaseAE */ class CReplaceObjectAE : public CBaseAE { //@access Public methods
public: //
// IAntiEvent methods
//
virtual void Destroy(void); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo(CTxtEdit *ped, IUndoBuilder *publdr); virtual void OnCommit(CTxtEdit *ped); //@cmember called when
// committed
private: CReplaceObjectAE(COleObject *pobj); //@cmember Constructor
~CReplaceObjectAE(); //@cmember Destructor
COleObject * _pobj; //@cmember pointer to the
// deleted object
BOOL _fUndoInvoked; //@cmember undo was invoked
// on this object.
friend class CAntiEventDispenser; };
/*
* CResizeObjectAE * * @class * an anti-event object that undoes the resizing of an object * * @base public | CBaseAE */ class CResizeObjectAE : public CBaseAE { //@access Public methods
public: //
// IAntiEvent methods
//
virtual void Destroy(void); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo(CTxtEdit *ped, IUndoBuilder *publdr); virtual void OnCommit(CTxtEdit *ped); //@cmember called when
// committed
private: CResizeObjectAE(COleObject *pobj, SIZEUV size); //@cmember Constructor
~CResizeObjectAE(); //@cmember Destructor
COleObject * _pobj; //@cmember pointer to the
// deleted object
SIZEUV _size; //@cmember The old size
BOOL _fUndoInvoked; //@cmember undo was invoked
// on this object.
friend class CAntiEventDispenser; };
/*
* CSelectionAE * * @class * an anti-event object to restore a selection * * @base public | CBaseAE */ class CSelectionAE : public CBaseAE { //@access Public methods
public: //
// IAntiEvent methods
//
virtual void Destroy(void); //@cmember Destroy
//@cmember Undo
virtual HRESULT Undo(CTxtEdit *ped, IUndoBuilder *publdr); virtual HRESULT MergeData( DWORD dwDataType, void *pdata); //@cmember
// Merges undo data into the
// current context
private: //@cmember Constructor
CSelectionAE(LONG cp, LONG cch, LONG cpNext, LONG cchNext); ~CSelectionAE(); //@cmember Destructor
LONG _cp; //@cmember Active end
LONG _cch; //@cmember Signed extension
LONG _cpNext; //@cmember Next active end
LONG _cchNext; //@cmember Next extension
friend class CAntiEventDispenser; };
/*
* CAntiEventDispenser * * @class * creates anti events and caches them intelligently to provide * for efficient multi-level undo */ class CAntiEventDispenser { //@access Public methods
public: // no memory mgmt routines; the dispenser is global
//@cmember text antievent
IAntiEvent * CreateReplaceRangeAE( CTxtEdit *ped, LONG cpMin, LONG cpMax, LONG cchDel, TCHAR *pchDel, IAntiEvent *paeCF, IAntiEvent *paePF ); //@cmember formatting AE
IAntiEvent * CreateReplaceFormattingAE( CTxtEdit *ped, LONG cp, CFormatRunPtr &rp, LONG cch, IFormatCache *pf, BOOL fPara ); //@cmember Object AE
IAntiEvent * CreateReplaceObjectAE(CTxtEdit *ped, COleObject *pobj); //@cmember Object AE
IAntiEvent * CreateResizeObjectAE(CTxtEdit *ped, COleObject *pobj, SIZEUV size); //@cmember Selection AE
IAntiEvent * CreateSelectionAE(CTxtEdit *ped, LONG cp, LONG cch, LONG cpNext, LONG cchNext);
private:
// FUTURE (alexgo): we'll want to maintain an allocation cache of
// anti-events
};
// NB!! Global variable.
extern class CAntiEventDispenser gAEDispenser;
#endif // !__ANTIEVNT_H__
|