DIRECTORY Imager, PopUpButtons, Rope, ViewerClasses; PopUpSelection2: CEDAR DEFINITIONS = BEGIN ROPE: TYPE = Rope.ROPE; Create: PROC [choices: ChoiceS, doc: ROPE, allMayBeUp: BOOL, header: Image _ NIL, left, top: Label _ nullLabel, columns: NAT _ 1, fullRows: NAT _ 0, timeOut: NAT _ 0] RETURNS [Menu]; ChoiceList: TYPE ~ LIST OF RECORD [key: ROPE, doc: ROPE _ NIL]; ChoiceS: TYPE = REF ChoiceSequence; ChoiceSequence: TYPE = RECORD [elts: SEQUENCE length: NAT OF Choice]; Choice: TYPE = RECORD [ image: Image, doc: ROPE]; nullChoice: Choice = [NIL, NIL]; Image: TYPE ~ REF ImagePrivate; ImagePrivate: TYPE ~ PopUpButtons.ImagePrivate; defaultFont: Imager.Font; Colors: TYPE ~ PopUpButtons.Colors; defaultColors, inverseColors: Colors; dontPaint: READONLY Imager.Color; Align: TYPE ~ PopUpButtons.Align; bottomLeft: Align ~ [0.0, 0.0]; center: Align ~ [0.5, 0.5]; ImageForRope: PROC [rope: ROPE, colors: Colors _ NIL, font: Imager.Font _ NIL, align: Align _ bottomLeft] RETURNS [image: Image]; nullLabel: Label = NIL; Label: TYPE = REF LabelPrivate; LabelPrivate: TYPE = RECORD [ minSpacing--parallel to edge being labelled--, minWidth--perpendicular--: NAT, Draw: PROC [context: Imager.Context, org: Imager.VEC, n, spacing, width: NAT, data: REF ANY], data: REF ANY ]; MouseButton: TYPE ~ ViewerClasses.MouseButton; Menu: TYPE = REF MenuPrivate; MenuPrivate: TYPE; Pop: PROC [menu: Menu, default: NAT _ 0, position: REF _ NIL, InNotifier: Consumer _ NIL, notifyData: REF ANY _ NIL] RETURNS [INT, MouseButton]; Consumer: TYPE = PROC [INT, MouseButton, REF ANY]; Sequify: PROC [list: ChoiceList] RETURNS [seq: ChoiceS]; PopRopes: PROC [ choices: ChoiceList, doc: ROPE, allMayBeUp: BOOL, default: NAT _ 0, header: ROPE _ NIL, left, top: Label _ nullLabel, columns: NAT _ 1, fullRows: NAT _ 0, timeOut: NAT _ 0, position: REF _ NIL, InNotifier: Consumer _ NIL, notifyData: REF ANY _ NIL] RETURNS [sel: INT, mb: MouseButton]; END. ŒPopUpSelection2.Mesa Copyright c 1983, 1985, 1986 by Xerox Corporation. All rights reserved. Created by Christian Jacobi, August 3, 1983 9:47 am Last edited by: Christian Jacobi, August 26, 1986 10:21:13 am PDT Last tweaked by Mike Spreitzer on January 30, 1989 11:37:30 am PST A pop-up menu abstraction. All coordinates and sizes are in pixels. IF NOT allMayBeUp THEN Pop returns as soon as it notices all mouse buttons are up ELSE Pop waits for down-click, then returns on up-click. Shows a pop-up menu and returns the number of the selected entry. returns: 1 for first choice, 2 for second... 0 if selected outside menu or on header-line -1 if timed out default: Hint for initial selection by implicit mouse movement. 0 if no default. position: Hint to override mouse position. See documentation for possible types. Pop must not be called from inside a viewers-repaint or a TIP-notify procedure. You can get the answer in the notifier process, however, by supplying InNotifier & notifyData. Must not be in a local frame, because it will be called from a different process (maybe even after Pop returns, depending on scheduling). An easy way to go. Κά˜codešœ™Kšœ Οmœ=™HKšœ3™3K™AK™B—K˜KšΟk œ+˜4K˜KšΟnœžœž œ˜%K™Kšœ™K˜Kšž˜K˜Kšžœžœžœ˜K˜K™(K˜šŸœžœžœžœžœ)žœžœžœžœ˜Άšžœžœ ™Kšžœ;™?Kšžœ4™8——K˜Kšœ žœžœžœžœžœžœžœ˜?K˜Kšœ žœžœ˜#Kš œžœžœžœ žœžœ ˜EK˜šœžœžœ˜K˜ Kšœžœ˜ —K˜Kšœžœžœ˜ K˜Kšœžœžœ˜Kšœžœ˜/K˜K˜Kšœžœ˜#Kšœ%˜%Kšœ žœ˜!K˜Kšœžœ˜!Kšœ˜K˜K˜Kš Ÿ œžœžœžœžœžœ˜K˜Kšœžœ˜Kšœžœžœ˜šœžœžœ˜Kšœ Οc#œ  œžœ˜NKš Ÿœžœ'žœžœžœžœ˜]Kšœžœž˜ K˜—K˜Kšœ žœ˜.Kšœžœžœ ˜Kšœ žœ˜K˜šŸœžœžœžœžœŸ œ žœžœžœžœžœžœ˜™AKšœ,™,Kšœ-™-Kšœ™KšœQ™QKšœQ™QKšœ―™―——K˜š œ žœžœžœžœžœ˜2Kšœ‰™‰—K˜KšŸœžœžœ˜8K˜šŸœž˜˜Kšœ˜Kšœžœ˜ Kšœ žœ˜Kšœ žœ˜Kšœžœžœ˜Kšœ˜Kšœ žœ˜Kšœ žœ˜Kšœ žœ˜Kšœ žœžœ˜KšŸ œ žœ˜Kšœ žœžœžœ˜—šžœžœ˜$K™——K˜Kšžœ˜K˜K˜—…—’