<> <> <<>> <<>> DIRECTORY Buttons USING [ButtonProc], Menus USING [ClickProc, MenuEntry], MBQueue USING [Action], Rope USING [ROPE], VFonts USING [Font], ViewerClasses USING [Viewer, ViewerRec]; NutButtons: CEDAR DEFINITIONS = BEGIN OPEN ViewerClasses; NutButton: TYPE = Viewer; -- A button is a viewer that posts a message and when clicked, invokes a procedure. ButtonFontInfo: TYPE = REF ButtonFontInfoRec; ButtonFontInfoRec: TYPE = RECORD [ twoFont: BOOL _ FALSE, singleFont: VFonts.Font _ NIL, attrFont: VFonts.Font _ NIL, valFont: VFonts.Font _ NIL]; Create: PROC [info: ViewerRec _ [], proc: Buttons.ButtonProc, clientData: REF ANY _ NIL, fork: BOOL _ FALSE, documentation: REF ANY _ NIL, font: ButtonFontInfo _ NIL, guarded: BOOL _ FALSE, paint: BOOL _ TRUE] RETURNS [button: NutButton] ; <> <> < CONTINUE catch phrase so that the client may make use of Process.Abort to cancel execution. If fork=FALSE then proc will be called at Process.priorityForeground!>> <<>> Queue: TYPE = REF QueueObj; QueueObj: TYPE; Action: TYPE = MBQueue.Action; QueueButton: PROC [ q: Queue, info: ViewerClasses.ViewerRec _ [], proc: Buttons.ButtonProc, clientData: REF ANY _ NIL, fork: BOOL _ TRUE, font: ButtonFontInfo _ NIL, documentation: REF ANY _ NIL, guarded: BOOL _ FALSE, paint: BOOL _ TRUE] RETURNS [NutButton]; CreateQueue: PROC [pushModel: BOOL] RETURNS [Queue]; CreateQMenuEntry: PROC [ q: Queue, name: Rope.ROPE, proc: Menus.ClickProc, clientData: REF ANY _ NIL, documentation: REF ANY _ NIL, fork: BOOL _ TRUE, guarded: BOOL _ FALSE] RETURNS [Menus.MenuEntry]; QueueClientAction: PROC [ q: Queue, proc: PROC [REF ANY], data: REF ANY]; DequeueAction: PROC [q: Queue] RETURNS [Action]; Flush: PROC [q: Queue]; END.