DIRECTORY Buttons USING [Button, ButtonProc], Imager USING [Font], Menus USING [MenuEntry, MenuProc, MouseButton], Rope USING [ROPE], ViewerClasses USING [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 ANY _ NIL, documentation: REF ANY _ NIL, fork: BOOL _ TRUE, guarded: 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 ] RETURNS [Buttons.Button]; QueueClientAction: PROC [q: Queue, proc: PROC [REF ANY], data: REF ANY]; 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. ΨMBQueue.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Created by: Cattell and Haugeland on October 21, 1982 9:11 am Last edited by: Cattell on October 21, 1982 9:11 am Last edited by: MBrown on October 21, 1982 6:22 pm Last Edited by: Maxwell, December 17, 1982 10:06 am Doug Wyatt, April 14, 1985 11:34:53 pm PST Provides Menu items and Buttons that are automatically serialized. Creates a queue, a context in which mouse buttons are serialized. All menu item and mouse button procs defined in the context of this queue will be strictly serialized, i.e. the procs will be called in the order that the user clicked, and each proc will completely finish execution before the next one starts. If pushModel = FALSE, then actions are to be removed from the queue by a client process, using DequeueAction (below), rather than by this package. The client process should be prepared to handle ABORTED. Identical to Menus.CreateEntry, except for the first argument q. Defines a menu item that is interpreted in the context of q. Identical to Buttons.Create, except for the first argument q. Defines a button that is interpreted in the context of q. Allows client to queue actions other than the menu item clicks and button clicks, which are user-initiated. The client's proc will be called after any user clicks before the call, and before any user clicks after the call. Waits for an action to appear, then returns it. Called only for "pull model" queues. Flushes all pending button presses and menu selections in the context of q. This procedure can be called, e.g., when some illegal actions suggests the user is confused an further mouse-ahead should be ignored. Like Flush, but applies proc to each action being flushed. Κ˜codešœ ™ Kšœ Οmœ1™