UndoEvent.mesa
Copyright Ó 1985, 1986, 1991, 1992 by Xerox Corporation. All rights reserved.
written by Bill Paxton, June 1981
last edit by Bill Paxton, April 5, 1982 12:39 pm
Doug Wyatt, February 26, 1992 12:20 pm PST
An undo event is a series of actions that are to be undone as a unit.
The event record contains sufficient information to undo the actions.
DIRECTORY
EditNotify USING [Change];
UndoEvent:
CEDAR
DEFINITIONS ~
BEGIN
Event: TYPE ~ REF EventRep;
EventRep:
TYPE ~
RECORD [subevents: SubEvent];
-- actual type of Tioga.EventRep
SubEvent: TYPE = REF SubEventBody;
SubEventBody:
TYPE =
RECORD [
next: SubEvent,
undoProc: UndoProc,
undoRef: REF Change
];
Change:
TYPE ~ EditNotify.Change;
undo list contains changes.
UndoProc:
TYPE =
PROC [undoRef:
REF Change, currentEvent: Event];
procedure supplied by client to undo the effects of a particular subevent
Create:
PROC
RETURNS [Event];
Note:
PROC [event: Event, undoProc: UndoProc, undoRef:
REF Change];
adds <undoProc, undoRef> to list of subevents
Undo:
PROC [undoEvent: Event, currentEvent: Event ¬
NIL];
otherwise, calls undoProc[undoRef,currentEvent] for each subevent
in reverse order that subevents originally happened
currentEvent arg is to record the effects of Undo so it too will be undoable
Reset:
PROC [event: Event];
resets the list of subevents to NIL
Undo automatically does a Reset when it is finished
Empty:
PROC [event: Event]
RETURNS [
BOOL];
returns true if subevents list is empty
END.