MODULE Checkbox EXPORTS Main;
IMPORT Trestle, VBT, TextVBT, RigidVBT, Shadow, Font, BooleanVBT;
IMPORT SwitchVBT, BiFeedbackVBT, ShadowedFeedbackVBT, MarginFeedbackVBT;
FROM Colors IMPORT lblue, dblue;
CONST
shsize = 8.0; (* shadow size in points *)
times14 = "-*-times-*-r-*-*-14-*-*-*-*-*-*-*";
PROCEDURE Check (v: BooleanVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
IF BooleanVBT.Get(v) THEN
TextVBT.Put(text, "Uncheck");
ELSE
TextVBT.Put(text, "Check");
END;
END Check;
VAR
font := Font.FromName(ARRAY OF TEXT{times14});
sh := Shadow.New(size := shsize, light := lblue, dark := dblue);
text := TextVBT.New(" Check ", fnt := font);
v := RigidVBT.FromHV(text, 20.0, 10.0);
sfb := NEW(ShadowedFeedbackVBT.T).init(ch := v, shadow := sh);
mfb := MarginFeedbackVBT.NewBox(ch := sfb);
bfb := NEW(BiFeedbackVBT.T).init(ch := mfb);
switch := NEW(SwitchVBT.T).init(bfb);
main := NEW(BooleanVBT.T, callback := Check).init(switch);
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main)
END Checkbox.