trestle_by_example/src/feedback/Feedback.m3


MODULE Main;

IMPORT Trestle, VBT, TextVBT, SwitchVBT, ShadowedFeedbackVBT,
       BorderedFeedbackVBT;
IMPORT HVSplit, HVBar, Axis, Font, Shadow, PaintOp, Pts;
FROM Colors IMPORT lblue, dblue, red, white;

CONST
  times14 = "-*-times-*-r-*-*-14-*-*-*-*-*-*-*";
  size    = 1.0;                 (* border size in millimeters. *)

PROCEDURE NoAction (v: SwitchVBT.T; READONLY cd: VBT.MouseRec) =
  BEGIN (* Do nothing *)
  END NoAction;

VAR
  font  := Font.FromName(ARRAY OF TEXT{times14});
  pts   := Pts.FromMM(2.0 * size); (* shadow size in points *)
  text1 := TextVBT.New("Push1", fnt := font);
  text2 := TextVBT.New("Push2", fnt := font);
  sh    := Shadow.New(size := pts, light := lblue, dark := dblue);
  sfb   := NEW(ShadowedFeedbackVBT.T).init(ch := text1, shadow := sh);
  sw1   := NEW(SwitchVBT.T, callback := NoAction).init(sfb);
  pair  := PaintOp.Pair(white, red);
  bfb := NEW(BorderedFeedbackVBT.T).init(
           ch := text2, size := size, op := pair);
  sw2  := NEW(SwitchVBT.T, callback := NoAction).init(bfb);
  main := HVSplit.Cons(Axis.T.Hor, sw1, HVBar.New(op := PaintOp.Bg), sw2);
BEGIN
  Trestle.Install(main);
  Trestle.AwaitDelete(main)
END Main.