<> <> <> <> <> <<>> DIRECTORY Imager USING [Context], Menus USING [Entry, Menu, MenuName, Trigger], Process USING [Milliseconds], TIPUser USING [TIPScreenCoords], ViewerClasses USING [Viewer]; MenusPrivate: CEDAR DEFINITIONS = BEGIN OPEN Menus; Viewer: TYPE = ViewerClasses.Viewer; menuHLeading: INTEGER = 5; -- white space before first entry menuHSpace: INTEGER = 12; -- white space between entries ViewerMenus: TYPE = REF ViewerMenusRec; ViewerMenusRec: TYPE = RECORD [ x, y: INTEGER _ 0, -- lower-left corner of entire menu area of viewer, relative to the viewer w, h: INTEGER _ 0, -- width and height of entire menu area of viewer list: LIST OF ViewerMenu _ NIL, inverted: EntryState _ NIL ]; ViewerMenu: TYPE = REF ViewerMenuRec; ViewerMenuRec: TYPE = RECORD [ commonData: Menu, -- data common to all instances of the menu entries: LIST OF EntryState _ NIL, active: BOOLEAN _ TRUE ]; EntryState: TYPE = REF EntryStateRec; EntryStateRec: TYPE = MONITORED RECORD [ width: INTEGER _ 0, xPos: INTEGER _ 0, yPos: INTEGER _ 0, greyed: BOOL _ FALSE, guardState: GuardState _ armed, commonData: Entry _ NIL ]; GuardState: TYPE = { guarded, arming, armed }; armingTime: Process.Milliseconds = 100; -- cover removal time. armedTime: Process.Milliseconds = 5000; -- unguarded interval. TIPScreenCoords: TYPE = TIPUser.TIPScreenCoords; MarkMenu: PROC[menus: ViewerMenus, parent: Viewer, mousePos: TIPScreenCoords]; <> HitMenu: PROC[menus: ViewerMenus, parent: Viewer, mousePos: TIPScreenCoords, trigger: Trigger]; ClearMenu: PROC[menus: ViewerMenus, parent: Viewer, paint: BOOL _ TRUE] ; DrawMenu: PROC[v: Viewer, menus: ViewerMenus, context: Imager.Context, whatChanged: REF ANY _ NIL]; ViewerlessAddMenu: PROC [name: MenuName, addBefore: MenuName _ NIL, paint: BOOL _ TRUE]; <> RecomputeMenus: PROC[v: Viewer] RETURNS[heightDelta: INTEGER]; ReComputeWindowMenus: PROC [v: Viewer, guard: BOOL, color: BOOL]; <> END.