DIRECTORY Commander, Rope, XTkHelpStrings, XTkHelpWidgets, XTkPopUps, Xl, XTk, XTkWidgets; XTkPopUpButtonsTest: CEDAR MONITOR IMPORTS Commander, Rope, XTkHelpStrings, XTkHelpWidgets, XTkPopUps, Xl, XTk, XTkWidgets ~ BEGIN ApplicationEnterLeave: Xl.EventProcType = { label: XTkWidgets.Widget ~ NARROW[clientData]; SELECT event.type FROM leaveNotify => { ev: Xl.LeaveNotifyEvent ~ NARROW[event]; XTkWidgets.SetStyleKey[label, NIL]; }; enterNotify => { ev: Xl.EnterNotifyEvent ~ NARROW[event]; XTkWidgets.SetStyleKey[label, $BlackOnGray]; }; ENDCASE => {}; }; ApplicationButton2Hit: XTk.WidgetNotifyProc = { text: Rope.ROPE ¬ NARROW[registerData]; label: XTkWidgets.Widget ¬ XTkWidgets.CreateLabel[text: Rope.Concat["selected: ", text]]; shell: XTkWidgets.Widget ¬ XTkWidgets.CreateShell[child: label, windowHeader: "XTkPopUpButtonsTest", standardMigration: TRUE]; XTkWidgets.RealizeShell[shell]; }; ApplicationDoWithPopShell: XTkPopUps.CreateWidgetProc = { text: Rope.ROPE ¬ NARROW[closureData]; text1: Rope.ROPE ¬ Rope.Concat[text, "1"]; text2: Rope.ROPE ¬ Rope.Concat[text, "2"]; labtext: Rope.ROPE ¬ Rope.Concat["Label ", text]; buttext: Rope.ROPE ¬ Rope.Concat["Button ", text]; l1: XTkWidgets.Widget ¬ XTkWidgets.CreateLabel[text: labtext]; l2: XTkWidgets.Widget ¬ XTkWidgets.CreateButton[text: buttext, hitProc: ApplicationButton2Hit, registerData: buttext, help: buttext]; recurse1: XTkWidgets.Widget ¬ XTkPopUps.CreatePopUpButton[ text: "Recurse-1", createMenu: NEW[XTkPopUps.WidgetCreateClosureRec ¬ [ApplicationDoWithPopShell, text1]] ]; recurse2: XTkWidgets.Widget ¬ XTkPopUps.CreatePopUpButton[ text: "Recurse-2", createMenu: NEW[XTkPopUps.WidgetCreateClosureRec ¬ [ApplicationDoWithPopShell, text2]] ]; container: XTkWidgets.Widget ¬ XTkWidgets.CreateYStack[stack: LIST[l1, l2, recurse1, recurse2]]; XTk.AddPermanentMatch[l1, [ proc: ApplicationEnterLeave, handles: Xl.CreateEventFilter[enterNotify, leaveNotify], tq: NIL, data: l1 ], [enterWindow: TRUE, leaveWindow: TRUE] ]; XTkPopUps.RegisterBaseSelection[recurse1, ApplicationButton2Hit, Rope.Concat["Base ", text1]]; XTkPopUps.RegisterBaseSelection[recurse2, ApplicationButton2Hit, Rope.Concat["Base ", text2]]; RETURN [container]; }; Test: Commander.CommandProc ~ { text: Rope.ROPE ¬ "Menu "; baseButton: XTkWidgets.Widget ¬ XTkPopUps.CreatePopUpButton[ text: "The very base", createMenu: NEW[XTkPopUps.WidgetCreateClosureRec ¬ [ApplicationDoWithPopShell, text]] ]; helpField: XTkWidgets.Widget ¬ XTkHelpWidgets.Create[].w; container: XTkWidgets.Widget ¬ XTkWidgets.CreateYStack[[], LIST[baseButton, helpField]]; shell: XTkWidgets.Widget ¬ XTkWidgets.CreateShell[child: container, windowHeader: "X11Test", standardMigration: TRUE]; XTkPopUps.RegisterBaseSelection[baseButton, ApplicationButton2Hit, Rope.Flatten["the very base"]]; XTkWidgets.RealizeShell[shell]; }; Commander.Register["XTkPopUpButtonsTest", Test, "test..."]; END. ΦXTkPopUpButtonsTest.mesa Copyright Σ 1991, 1992 by Xerox Corporation. All rights reserved. Christian Jacobi, March 10, 1992 3:33 pm PST XTkHelpStrings.SetHandle[shell, XTkHelpStrings.GetHandle[helpField]]; ΚΑ–(cedarcode) style•NewlineDelimiter ˜codešœ™Kšœ Οeœ7™BK™,—šΟk œQ˜ZK˜—šΟnœžœž˜"KšžœS˜Z—šž˜K˜—šŸœ˜+Kšœžœ ˜.šžœ ž˜šœ˜Kšœžœ˜(Kšœžœ˜#K˜—šœ˜Kšœžœ˜(Kšœ,˜,K˜—Kšžœ˜—K˜K˜—šŸœ˜/Kšœ žœžœ˜'K˜YKšœxžœ˜~Kšœ˜K˜—K˜K˜šŸœ ˜9Kšœ žœžœ˜&Kšœ žœ˜*Kšœ žœ˜*Kšœžœ˜1Kšœžœ ˜2K˜>Kšœ…˜…šœ:˜:Kšœ˜Kšœ žœG˜VKšœ˜—šœ:˜:Kšœ˜Kšœ žœG˜VKšœ˜—Kšœ>žœ˜`šœ˜šœ˜Kšœ˜Kšœ9˜9Kšœžœ˜ Kšœ˜Kšœ˜—Kšœžœžœ˜&Kšœ˜—Kšœ^˜^Kšœ^˜^Kšžœ ˜K˜—K˜K˜šŸœ˜Kšœ žœ ˜šœ<˜