<> <> <> <> <> <> <> <> <> <<>> DIRECTORY Buttons USING [Button, ButtonProc], Imager USING [Font], Menus USING [MenuEntry, MenuProc, MouseButton], Rope USING [ROPE], ViewerClasses USING [ViewerRec]; ActionQueue: CEDAR DEFINITIONS = BEGIN Queue: TYPE = RECORD [std, panic: REF QueueObj]; QueueObj: TYPE ~ MONITORED RECORD [ firstEvent: Event _ NIL, pushModel: BOOL, newEvent: CONDITION, notifierRunning: BOOL _ FALSE ]; Create: PROC [pushModel: BOOL _ TRUE] RETURNS [Queue]; <> <> <> <> <> <> <> CreateMenuEntry: PROC [q: Queue, name: Rope.ROPE, proc: Menus.MenuProc, clientData: REF ANY _ NIL, documentation: REF ANY _ NIL, fork: BOOL _ TRUE, guarded: BOOL _ FALSE, panic: BOOL _ FALSE ] RETURNS [Menus.MenuEntry]; <> CreateButton: PROC [q: Queue, info: ViewerClasses.ViewerRec _ [], proc: Buttons.ButtonProc, clientData: REF ANY _ NIL, fork: BOOL _ TRUE, font: Imager.Font _ NIL, documentation: REF ANY _ NIL, guarded: BOOL _ FALSE, paint: BOOL _ TRUE, panic: BOOL _ FALSE ] RETURNS [Buttons.Button]; <> QueueClientAction: PROC [q: Queue, proc: PROC [REF ANY], data: REF ANY]; <> <> <> Event: TYPE ~ LIST OF Action; Action: TYPE = RECORD [ SELECT type: * FROM client => [ proc: PROC [REF ANY], data: REF ANY ], user => [ proc: Menus.MenuProc, parent: REF ANY, clientData: REF ANY, mouseButton: Menus.MouseButton, shift, control: BOOL ] ENDCASE ]; DequeueAction: PROC [q: Queue] RETURNS [Action]; <> <> Flush: PROC [q: Queue]; <> <> <> FlushWithCallback: PROC [q: Queue, proc: PROC[Action] _ NIL]; <> END.