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. πMenusPrivate.mesa; Written by S. McGregor Edited by McGregor on July 21, 1983 10:43 am Last Edited by: Maxwell, December 17, 1982 9:59 am Last Edited by: Pausch, August 17, 1983 4:38 pm Last Edited by: Wyatt, November 14, 1983 12:56 pm Called when the mouse is pressed down over a menu to do the proper inverse-video stuff. Called when a mouse button is released over a menu. Determines the space occupied by the viewer's caption and menu. Uses the following: v.ww, v.wh, v.border, v.parent, and v.column. Returns the distance from the bottom of the header to the bottom of the viewer. provided for convenience of BuildWindowMenus in WindowManagerImpl this will reset all fields in the data structure, including position and size of each entry. Κy– "cedar" style˜JšΟc)™)Jš,™,Jšœ2™2J™/J™1J™šΟk ˜ Jšœžœ ˜Jšœžœ˜Jšœžœ˜Jšœžœžœ˜Jšœžœ˜ Jšœžœ ˜J˜—Jšœžœž ˜Jšœž˜J˜šœžœ˜$J˜—Jšœžœ!˜Jšœ(˜>J˜Jšœžœ˜0J˜Jšœ žœ ˜J˜šΟn œžœžœ ˜7J˜—šŸ œžœ%žœ ˜GJ˜—šŸ œžœ!˜4J˜—šŸœžœ<˜JJšœW™WJ˜—šŸœžœN˜[Jšœ3™3J˜—JšŸ œžœ(žœžœ˜EJ˜šŸœžœ˜)Jšœ&žœžœžœ˜5J˜—J˜šŸœžœ žœžœ˜5J™?J™AJ™OJ˜—šŸœžœžœ žœžœ žœžœ˜PJšœA™AJ˜—šŸœžœžœ žœ˜AJšœ\™\—J˜Jšžœ˜J˜J˜—…—6Ÿ