<<>> <> <> <> <> DIRECTORY Rope USING [ROPE]; PopUpMenus: CEDAR DEFINITIONS = BEGIN <> ROPE: TYPE = Rope.ROPE; Menu: TYPE = REF MenuRep; --handle representing a popup menu MenuRep: TYPE = PRIVATE RECORD [impl: REF]; EntryProc: TYPE = PROC [menu: Menu¬NIL, entryData: REF¬NIL, callData: REF¬NIL] RETURNS [REF¬NIL]; <> <> <> <> <> <> Create: PROC [header: ROPE¬NIL, doc: ROPE¬NIL, clientData: REF¬NIL] RETURNS [Menu]; <> <<(creates the handle, but does not invoke the created popup menu yet)>> <> <> <> Entry: PROC [menu: Menu, entry: ROPE¬NIL, proc: EntryProc¬NIL, entryData: REF¬NIL, doc: ROPE¬NIL] RETURNS [sameMenu: Menu]; <> << Replaces existing line if entry rope is already used>> <> <> <> << a NIL proc and a NIL entryData: removes entry from menu>> << a NIL proc: on call returns entryData>> <> <> Timeout: PROC [menu: Menu, time: INT¬0, proc: EntryProc¬NIL, entryData: REF¬NIL] RETURNS [sameMenu: Menu]; <> <> <> <> << a NIL proc and a NIL entryData: no-op on time out (Normal case!)>> << a NIL proc: on timeout returns entryData>> <> Skipped: PROC [menu: Menu, proc: EntryProc¬NIL, entryData: REF¬NIL] RETURNS [sameMenu: Menu]; <> <> <> <> <> ReLabel: PROC [menu: Menu, header: ROPE¬NIL, doc: ROPE¬NIL] RETURNS [sameMenu: Menu]; <> <> <> <> Call: PROC [menu: Menu, callData: REF¬NIL, position: REF¬NIL, default: REF¬NIL] RETURNS [REF]; <> << (draws the menu, accepts interactive selection and calls the EntryProc)>> <> << or entryData if EntryProc was NIL>> <> <> <> << defaults to: the current mouse position>> <> << defaults to: no line selected at the beginning>> ClientData: PROC [menu: Menu] RETURNS [REF]; <> END.