<> <> <> <> <> <<>> DIRECTORY Imager USING [Context], Menus USING [Action, Entry], Process USING [Milliseconds], Rope USING [ROPE], TIPUser USING [TIPScreenCoords], ViewerClasses USING [Viewer]; MenusPrivate: CEDAR DEFINITIONS = BEGIN Viewer: TYPE = ViewerClasses.Viewer; menuHLeading: INTEGER = 5; -- white space before first entry menuHSpace: INTEGER = 12; -- white space between entries Action: TYPE = Menus.Action; EntryState: TYPE = { guarded, arming, armed }; EntryInfo: TYPE = REF EntryInfoRec; EntryInfoRec: TYPE = MONITORED RECORD[ name: Rope.ROPE, actions: LIST OF Action, x, y: INTEGER _ 0, -- lower left corner of the entry, relative to the viewer w: INTEGER _ 0, -- width of the entry guarded: BOOL _ FALSE, state: EntryState _ armed, greyCount: CARDINAL _ 0 ]; LineInfo: TYPE = REF LineInfoRec; LineInfoRec: TYPE = RECORD[ name: ATOM, entries: LIST OF EntryInfo _ NIL, active: BOOL _ TRUE ]; MenuInfo: TYPE = REF MenuInfoRec; MenuInfoRec: TYPE = RECORD[ lines: LIST OF LineInfo, x, y: INTEGER _ 0, -- lower-left corner of menu region of viewer, relative to the viewer w, h: INTEGER _ 0, -- width and height of menu region of viewer inverted: EntryInfo _ NIL ]; armingTime: Process.Milliseconds = 100; -- cover removal time. armedTime: Process.Milliseconds = 5000; -- unguarded interval. TIPScreenCoords: TYPE = TIPUser.TIPScreenCoords; Trigger: TYPE = [0..6); MakeEntry: PROC[entry: Menus.Entry] RETURNS[EntryInfo]; ChooseAction: PROC[entry: EntryInfo, trigger: Trigger] RETURNS[Action]; GuardResponse: PROC[viewer: Viewer, action: Action]; MarkMenu: PROC[menu: MenuInfo, parent: Viewer, mousePos: TIPScreenCoords]; <> HitMenu: PROC[menu: MenuInfo, parent: Viewer, mousePos: TIPScreenCoords, trigger: Trigger]; <> ClearMenu: PROC[menu: MenuInfo, parent: Viewer, paint: BOOL _ TRUE] ; DrawMenu: PROC[v: Viewer, menu: MenuInfo, context: Imager.Context, whatChanged: REF ANY _ NIL]; EstablishHeader: PROC[v: Viewer] RETURNS[y: INTEGER]; <> <> <> ViewerlessAddMenu: PROC [name: ATOM, addBefore: ATOM _ NIL, paint: BOOL _ TRUE]; <> ReComputeWindowMenus: PROC [v: Viewer, guard: BOOL, color: BOOL]; <> END.