DIRECTORY Buttons, Containers, Imager, ImagerColor, ImagerFont, IO, List, PopUpButtons, Process, ProcessProps, Rope, TypeScript, VFonts, ViewerClasses, ViewerIO, ViewerOps; TestPopUpButtons: CEDAR PROGRAM IMPORTS Buttons, Containers, Imager, ImagerColor, ImagerFont, IO, List, PopUpButtons, Process, ProcessProps, TypeScript, ViewerIO, ViewerOps = BEGIN Viewer: TYPE = ViewerClasses.Viewer; Tool: TYPE = REF ToolPrivate; ToolPrivate: TYPE = RECORD [ container, b4, b7, b12, ob, nb, mb, b1, b0, cb, b7d, og, ng, ogf, ngf, typescript: Viewer _ NIL, log: IO.STREAM _ NIL, sense: BOOL _ TRUE ]; hSep: INTEGER = 2; vSep: INTEGER = 2; red: Imager.Color = ImagerColor.ColorFromRGB[[R~1.0, G~0.0, B~0.0]]; green: Imager.Color = ImagerColor.ColorFromRGB[[R~0.0, G~1.0, B~0.0]]; blue: Imager.Color = ImagerColor.ColorFromRGB[[R~0.0, G~0.0, B~1.0]]; colorfulColors: PopUpButtons.Colors = NEW [PopUpButtons.ColorsPrivate _ [ [ALL[[Imager.black, green, red]], ALL[[Imager.black, red, green]]], [ALL[[green, Imager.black, red]], ALL[[red, Imager.black, green]]] ]]; MakeTest: PROC [err: Imager.ErrorDesc] RETURNS [t: Tool] = { t _ NEW [ToolPrivate _ []]; t.container _ Containers.Create[[name: "PopUpButtons Test"]]; t.b4 _ class4.Instantiate[[parent: t.container, wx: 0, name: "Test 4"], t, NIL, NIL, FALSE]; t.b7 _ class7.Instantiate[[parent: t.container, wx: 0, wy: t.b4.wy + t.b4.wh + vSep, name: "Test 7"], t, NIL, NIL, FALSE]; t.b12 _ class12.Instantiate[[parent: t.container, wx: 0, wy: t.b7.wy + t.b7.wh + vSep, name: "Test 12"], t, NIL, NIL, FALSE]; t.ob _ Buttons.Create[info: [parent: t.container, wx: MAX[t.b4.wx+t.b4.ww+hSep, t.b7.wx+t.b7.ww+hSep], name: "A Button"], proc: AButt, clientData: t, paint: FALSE]; t.nb _ classN.Instantiate[[parent: t.container, wx: t.ob.wx, wy: t.ob.wy + t.ob.wh + vSep, name: "A Button"], t, NIL, NIL, FALSE]; t.mb _ classN.Instantiate[[parent: t.container, wx: MAX[t.ob.wx+t.ob.ww+hSep, t.nb.wx+t.nb.ww+hSep], name: "A Button"], t, NIL, NIL, FALSE]; t.b1 _ class1.Instantiate[[parent: t.container, wx: t.mb.wx+t.mb.ww+hSep, name: "Test 1"], t, NIL, NIL, FALSE]; t.b0 _ class0.Instantiate[[parent: t.container, wx: t.b1.wx+t.b1.ww+hSep, name: "Test 0"], t, NIL, NIL, FALSE]; t.cb _ classC.Instantiate[[parent: t.container, wx: t.b0.wx+t.b0.ww+hSep], t, NIL, NIL, FALSE]; t.b7d _ class7d.Instantiate[[parent: t.container, wx: t.cb.wx+t.cb.ww+hSep, name: "Test 7d"], t, NIL, NIL, FALSE]; t.og _ Buttons.Create[info: [parent: t.container, wx: t.nb.wx+t.nb.ww+hSep, wy: t.b1.wy+t.b1.wh+vSep, name: "Big"], font: bigFont, proc: AButt, clientData: t, paint: FALSE]; t.ng _ classB.Instantiate[[parent: t.container, wx: t.og.wx+t.og.ww+hSep, wy: t.og.wy], t, NIL, NIL, FALSE]; t.ogf _ Buttons.Create[info: [parent: t.container, wx: t.ng.wx+t.ng.ww+hSep, wy: t.og.wy, name: "Big~F"], font: bigFont, proc: AButt, clientData: t, fork: FALSE, paint: FALSE]; t.ngf _ classBF.Instantiate[[parent: t.container, wx: t.ogf.wx+t.ogf.ww+hSep, wy: t.og.wy], t, NIL, NIL, FALSE]; t.typescript _ TypeScript.Create[[parent: t.container, wy: t.og.wy+t.og.wh+vSep, ww: 20, wh: 20, name: "Log"], FALSE]; Containers.ChildXBound[t.container, t.typescript]; Containers.ChildYBound[t.container, t.typescript]; t.log _ ViewerIO.CreateViewerStreams["Log", t.typescript].out; t.log.PutF["err = [%g, %g]\n", [atom[err.code]], [rope[err.explanation]] ]; ViewerOps.PaintViewer[t.container, client]; }; classN: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert coloration"]], doc: "Comparison button"]]; AButt: Buttons.ButtonProc = { t: Tool = NARROW[clientData]; t.log.PutRope["I'm a Buttons.Button\n"]; IF mouseButton = red THEN Process.Pause[ticks: Process.SecondsToTicks[5]]; }; class4: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert color"], [$TellWDir, "Report working directory"], [NIL, NIL], [$Test4, "This one's 4 you"]], doc: "PopUpButtons test"]]; class7: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert color"], [$Test3, "Have some 3"], [NIL, NIL], [$TellWDir, "Report working directory"], [NIL, NIL], [NIL, NIL], [$TellProcessProps, "Report process props"]], guarded: TRUE, doc: "Another PopUpButtons test", disarmMsg: "Be brave"]]; class7d: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert color"], [$Test3, "Have some 3"], [NIL, NIL], [$TellWDir, "Report working directory"], [NIL, NIL], [NIL, NIL], [$TellProcessProps, "Report process props"]], disableDecoding: TRUE, doc: "Another PopUpButtons test"]]; class12: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert color"], [$Test3, "Have some 3"], [NIL, NIL], [$Test4, "This one's 4 you"], [NIL, NIL], [NIL, NIL], [$Test7, "Lucky number 7"], [NIL, NIL], [$Test9], [$Test10], [$Test11]], doc: "Yet another PopUpButtons test"]]; BButt: PopUpButtons.PopUpButtonProc = { t: Tool = NARROW[instanceData]; t.log.PutF["I'm a PopUpButtons.Button; Got %g\n", [refAny[key]]]; SELECT key FROM $Flip => { button: Viewer = NARROW[view]; is: PopUpButtons.InstanceSpec = PopUpButtons.ViewerToSpec[button]; ri: PopUpButtons.RopeImage = NARROW[is.image.data]; PopUpButtons.AmbushInstance[button: button, specImage: TRUE, image: PopUpButtons.ImageForRope[ri.text, SELECT ri.colors FROM PopUpButtons.defaultColors => PopUpButtons.inverseColors, PopUpButtons.inverseColors => PopUpButtons.defaultColors, ENDCASE => ERROR, ri.font]]; }; $Pause => { Process.Pause[ticks: Process.SecondsToTicks[5]]; }; $TellWDir => t.log.PutF["Process property $WorkingDirectory = %g.\n", [refAny[List.Assoc[$WorkingDirectory, ProcessProps.GetPropList[]]]]]; $TellProcessProps => t.log.PutF["Process props = %g.\n", [refAny[ProcessProps.GetPropList[]]]]; ENDCASE => NULL; }; class1: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: Butt1, choices: LIST[[$Doit, "The only choice"]], doc: "Test button with 1 choice"]]; Butt1: PopUpButtons.PopUpButtonProc = { t: Tool = NARROW[instanceData]; t.log.PutF["Got %g\n", [refAny[key]]]; }; class0: PopUpButtons.Class = PopUpButtons.MakeClass[[proc: Butt0, choices: LIST[], doc: "Test button with 0 choices"]]; Butt0: PopUpButtons.PopUpButtonProc = { t: Tool = NARROW[instanceData]; t.log.PutF["Got %g\n", [refAny[key]]]; }; colorImage: PopUpButtons.Image = PopUpButtons.ImageForRope["Color", colorfulColors]; classC: PopUpButtons.Class = PopUpButtons.MakeClass[[image: colorImage, proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$ReturnAtOnce, "Don't delay"]], guarded: TRUE, doc: "A button with chromatic colors", help: PopUpButtons.HelpFromDoc["TestPopUpButtonsDoc.Tioga", LIST["the", "a"]]]]; err: Imager.ErrorDesc _ [NIL, NIL]; bigFont: Imager.Font _ ImagerFont.Find["Xerox/PressFonts/TimesRoman-MRR" ! Imager.Warning => {err _ error; RESUME}].Scale[40]; classB: PopUpButtons.Class _ PopUpButtons.MakeClass[[image: PopUpButtons.ImageForRope[rope: "Big", font: bigFont], proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert coloring"]], doc: "A button with a large font"]]; classBF: PopUpButtons.Class _ PopUpButtons.MakeClass[[image: PopUpButtons.ImageForRope[rope: "Big~F", font: bigFont], proc: BButt, choices: LIST[[$Pause, "Delay 5 seconds"], [$Flip, "Invert coloring"]], fork: FALSE, doc: "A button with a large font", help: PopUpButtons.noHelp]]; aTester: Tool _ MakeTest[err]; END. †TestPopUpButtons.mesa Demers, January 2, 1987 2:20:56 pm PST Last tweaked by Mike Spreitzer on September 6, 1989 5:58:30 pm PDT ส ภ– "cedar" style•NewlineDelimiter ˜code™K™&K™B—K˜Kšฯk œ7œj˜ฌK˜šฯnœœ˜Kšœ7œL˜ŒK˜—K˜Kš˜K˜Kšœœ˜$K˜Kšœœœ ˜šœ œœ˜Kšœ\œ˜`Kšœœœœ˜Kšœœ˜K˜—K˜Kšœœ˜Kšœœ˜K˜K˜DK˜FK˜EK˜šœ&œ ˜IKšœœœ˜CKšœœœ˜BKšœ˜—K˜šžœœœ˜˜>KšœK˜KK˜+K˜—K˜KšœKœX˜งK˜–‚ -- [parent: REF ANY, clientData: REF ANY _ NIL, mouseButton: Menus.MouseButton _ red, shift: BOOL _ FALSE, control: BOOL _ FALSE]šžœ˜Kšœ œ ˜K˜(Kšœœ1˜JK˜—K˜KšœKœaœœ=˜๕K˜KšœKœQœœ-œœœœ:œ<˜ใK˜KšœLœQœœ-œœœœBœ%˜ีK˜KšœLœQœœ"œœœœ œœK˜าK˜šžœ"˜'Kšœ œ˜KšœA˜Ašœ˜˜ Kšœœ˜KšœB˜BKšœœ˜3Kš œ7œ,œ œuœœ ˜K˜—˜ K–[ticks: PrincOps.Ticks]˜0K˜—Kšœ‹˜‹Kšœ_˜_Kšœœ˜—K˜—K˜KšœKœA˜K˜šžœ"˜'Kšœ œ˜K˜&K˜—K˜KšœKœ(˜wK˜šžœ"˜'Kšœ œ˜Kšœ&˜&K˜—K˜KšœT˜TK˜Kšœ^œHœeœ˜งK˜Kšœœœ˜#K˜Kšœkœ ˜~K˜Kšœ‰œ_˜์K˜KšœŒœAœA˜—K˜K˜K˜Kšœ˜—…—‚*ศ