-- UndoEventImpl.mesa
-- written by Bill Paxton, June 1981
-- last edit by Bill Paxton, April 5, 1982 12:38 pm
DIRECTORY
UndoEvent,
TextNode;
UndoEventImpl: CEDAR PROGRAM
IMPORTS TextNode
EXPORTS UndoEvent =
BEGIN OPEN UndoEvent;
Create: PUBLIC PROC RETURNS [Ref] = { RETURN [TextNode.pZone.NEW[EventBody]] };
Note: PUBLIC PROC [event: Ref, undoProc: UndoProc, undoRef: REF Change] = {
IF event = NIL THEN RETURN;
event.subevents ← TextNode.pZone.NEW[SubEventBody ←
[event.subevents,undoProc,undoRef]] };
Undo: PUBLIC PROC [undoEvent: Ref, currentEvent: Ref ← NIL] = {
-- calls undoProc[undoRef] for each subevent
-- in reverse order that subevents originally happened
sub: SubEvent;
IF undoEvent=NIL THEN RETURN;
sub ← undoEvent.subevents; undoEvent.subevents ← NIL;
UNTIL sub=NIL DO sub.undoProc[sub.undoRef,currentEvent]; sub ← sub.next; ENDLOOP };
Reset: PUBLIC PROC [event: Ref] = { IF event # NIL THEN event.subevents ← NIL };
Empty: PUBLIC PROC [event: Ref] RETURNS [BOOLEAN] = { RETURN [event=NIL OR event.subevents=NIL] };
Start: PUBLIC PROC = {
};
END.