<<>> <> <> <> <> <> <> <<>> DIRECTORY Buttons USING [Button, ButtonProc], Imager USING [Font], Menus USING [MenuEntry, MenuProc, MouseButton], Rope USING [ROPE], ViewerClasses USING [Viewer, ViewerRec]; MBQueue: CEDAR DEFINITIONS = BEGIN Queue: TYPE = REF QueueObj; QueueObj: TYPE; Create: PROC [pushModel: BOOL ¬ TRUE] RETURNS [Queue]; <> <> <> <> <> <> <> CreateMenuEntry: PROC [ q: Queue, name: Rope.ROPE, proc: Menus.MenuProc, clientData: REF ¬ NIL, documentation: REF ¬ NIL, guarded: BOOL ¬ FALSE, immediate: BOOL ¬ FALSE ] RETURNS [Menus.MenuEntry]; <> CreateButton: PROC [ q: Queue, info: ViewerClasses.ViewerRec ¬ [], proc: Buttons.ButtonProc, clientData: REF ¬ NIL, font: Imager.Font ¬ NIL, documentation: REF ¬ NIL, guarded: BOOL ¬ FALSE, paint: BOOL ¬ TRUE, immediate: BOOL ¬ FALSE ] RETURNS [Buttons.Button]; <> QueueClientAction: PROC [q: Queue, proc: PROC [REF], data: REF, immediate: BOOL ¬ FALSE]; <> Action: TYPE = RECORD [ SELECT type: * FROM client => [ proc: PROC [REF], data: REF ], user => [ proc: Menus.MenuProc, parent: ViewerClasses.Viewer, clientData: REF, mouseButton: Menus.MouseButton, shift, control: BOOL ] ENDCASE ]; DequeueAction: PROC [q: Queue] RETURNS [Action]; <> <> Flush: PROC [q: Queue, abort: BOOL ¬ FALSE]; <> FlushWithCallback: PROC [q: Queue, proc: PROC [Action] ¬ NIL, abort: BOOL ¬ FALSE]; <> END.