<> <<>> <> <<>> <> <> <> DIRECTORY Rope USING [ROPE], ViewerClasses USING [Input, Viewer]; Menus: CEDAR DEFINITIONS = BEGIN Viewer: TYPE = ViewerClasses.Viewer; Input: TYPE = ViewerClasses.Input; ROPE: TYPE = Rope.ROPE; Action: TYPE = RECORD[ name: ROPE, -- name of action (for pop-up menu) input: Input, -- input to be passed to the notify proc doc: ROPE _ -- description of the action (don't be lazy, now ...) ]; <> Entry: TYPE = RECORD[ name: ROPE, actions: LIST OF Action, guarded: BOOL _ FALSE ]; <> <<>> Line: TYPE = REF LineRep; -- a line of Entries LineRep: TYPE = RECORD[ name: ATOM, entries: LIST OF Entry, active: BOOL _ TRUE ]; <> Menu: TYPE = LIST OF Line; <> <<>> ParseDescription: PROC[def: ROPE, errorFile: ROPE _ NIL] RETURNS[Menu]; <> <<>> <> SetMenu: PROC[viewer: Viewer, menu: Menu, paint: BOOL _ TRUE]; LineInViewer: PROC[viewer: Viewer, name: ATOM] RETURNS[exists: BOOLEAN]; Change: TYPE = {show, hide, toggle}; ChangeLine: PROC[viewer: Viewer, name: ATOM, change: Change, paint: BOOL _ TRUE]; ShowLine: PROC[viewer: Viewer, name: ATOM, paint: BOOL _ TRUE] = INLINE { ChangeLine[viewer, name, show, paint] }; HideLine: PROC[viewer: Viewer, name: ATOM, paint: BOOL _ TRUE] = INLINE { ChangeLine[viewer, name, hide, paint] }; ToggleLine: PROC[viewer: Viewer, name: ATOM, paint: BOOL _ TRUE] = INLINE { ChangeLine[viewer, name, toggle, paint] }; END.