MODULE Menu2 EXPORTS Main; IMPORT Trestle, VBT, TextVBT, MenuSwitchVBT, ShadowedFeedbackVBT, Shadow; IMPORT HVSplit, Axis, AnchorBtnVBT, Rect, RigidVBT; IMPORT Wr, Stdio; FROM Colors IMPORT lblue, dblue; CONST shsize = 5.0; (* shadow size in points *) hmin = 15.0; vmin = 10.0; (* button size in millimeters *) PROCEDURE Cut (v: MenuSwitchVBT.T; READONLY cd: VBT.MouseRec) = BEGIN Wr.PutText(Stdio.stdout, "Cut\n"); Wr.Flush(Stdio.stdout); END Cut; PROCEDURE Paste (v: MenuSwitchVBT.T; READONLY cd: VBT.MouseRec) = BEGIN Wr.PutText(Stdio.stdout, "Paste\n"); Wr.Flush(Stdio.stdout); END Paste; VAR sh := Shadow.New(size := shsize, light := lblue, dark := dblue); fcut := ShadowedFeedbackVBT.NewMenu(TextVBT.New("Cut"), sh); fpaste := ShadowedFeedbackVBT.NewMenu(TextVBT.New("Paste"), sh); cut := NEW(MenuSwitchVBT.T, callback := Cut).init(fcut); paste := NEW(MenuSwitchVBT.T, callback := Paste).init(fpaste); menu := HVSplit.Cons(Axis.T.Ver, cut, paste); edit := TextVBT.New("Edit"); fanchor := NEW(ShadowedFeedbackVBT.T).init(ch := edit, shadow := sh); anchor := AnchorBtnVBT.New(ch := fanchor, menu := menu); main := RigidVBT.FromHV(anchor, hmin, vmin); BEGIN AnchorBtnVBT.Set(anchor, n := 0, hfudge := hmin, vfudge := -vmin / 2.0); Trestle.Install(main); Trestle.AwaitDelete(main); END Menu2.