<> <> <> <> DIRECTORY Imager USING [Context], Menus USING [Entry, MenuEntryTrigger], Process USING [Milliseconds], Rope USING [ROPE], TIPUser USING [TIPScreenCoords], ViewerClasses USING [NotifyProc, Viewer]; MenusPrivate: CEDAR DEFINITIONS = BEGIN Viewer: TYPE = ViewerClasses.Viewer; ROPE: TYPE = Rope.ROPE; <> menuHLeading: INTEGER = 5; -- white space before first entry menuHSpace: INTEGER = 12; -- white space between entries InternalFormatMenuRef: TYPE = REF InternalFormatMenu; InternalFormatMenu: TYPE = RECORD[ <> name: ROPE, beginsActive: BOOLEAN _ TRUE, breakBefore: BOOLEAN _ TRUE, breakAfter: BOOLEAN _ TRUE, notify: ViewerClasses.NotifyProc _ NIL, entries: LIST OF EntryRef _ NIL ]; EntryRef: TYPE = REF Menus.Entry; ViewerMenus: TYPE = REF ViewerMenusRec; ViewerMenusRec: TYPE = RECORD [ x: INTEGER _ 0, -- lower-left hand corner of entire menu area of viewer y: INTEGER _ 0, -- the x and y are RELATIVE to the viewer. w: INTEGER _ 0, -- width of entire menu area of viewer h: INTEGER _ 0, -- height list: LIST OF ViewerMenu _ NIL, inverted: EntryState _ NIL ]; ViewerMenu: TYPE = REF ViewerMenuRec; ViewerMenuRec: TYPE = RECORD [ commonData: InternalFormatMenuRef , -- 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: EntryRef _ NIL ]; GuardState: TYPE = { guarded, arming, armed }; armingTime: Process.Milliseconds = 100; -- cover removal time. armedTime: Process.Milliseconds = 5000; -- unguarded interval. MarkMenu: PROC [menus: ViewerMenus, parent: Viewer, mousePos: TIPUser.TIPScreenCoords]; <> HitMenu: PROC [menus: ViewerMenus, parent: Viewer, mousePos: TIPUser.TIPScreenCoords, trigger: Menus.MenuEntryTrigger] ; 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: ROPE, addBefore: ROPE _ NIL, paint: BOOL _ TRUE]; <> ReComputeMenus: PROC [v: Viewer] RETURNS[heightDelta: INTEGER]; ReComputeWindowMenus: PROC [v: Viewer, guard: BOOL, color: BOOL]; <> Debug: PROC [msg: ROPE, waitForLeftShift: BOOL _ TRUE, level: INTEGER _ 1]; AlterDebuggingLevel: PROC [amount: INTEGER, relative: BOOL _ TRUE]; END.