MODULE RadioButtons EXPORTS Main;
IMPORT Trestle, VBT, TextVBT, SwitchVBT, ChoiceVBT;
IMPORT MarginFeedbackVBT, BiFeedbackVBT, ShadowedFeedbackVBT;
IMPORT Shadow, Axis, HVSplit, HVBar;
FROM Colors IMPORT lblue, dblue;
TYPE
S = SwitchVBT.T OBJECT
METHODS
init (ch: VBT.T; s: Shadow.T): S := Init
END;
PROCEDURE Init (self: S; ch: VBT.T; s: Shadow.T): S =
VAR
m := MarginFeedbackVBT.NewBullet(
NEW(ShadowedFeedbackVBT.T).init(ch, s));
BEGIN
EVAL SwitchVBT.T.init(self, f := NEW(BiFeedbackVBT.T).init(m));
RETURN (self);
END Init;
CONST shsize = 5.0; (* shadow size in points *)
PROCEDURE kanu (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
TextVBT.Put(text, "90.1 FM");
END kanu;
PROCEDURE wbaa (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
TextVBT.Put(text, "106.1 AM");
END wbaa;
PROCEDURE kera (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
TextVBT.Put(text, "90.5 FM");
END kera;
VAR
text := TextVBT.New("frequency");
sh := Shadow.New(size := shsize, light := lblue, dark := dblue);
switch1 := NEW(S).init(TextVBT.New("KANU"), sh);
switch2 := NEW(S).init(TextVBT.New("WBAA"), sh);
switch3 := NEW(S).init(TextVBT.New("KERA"), sh);
group := NEW (ChoiceVBT.Group);
choice1 := NEW(ChoiceVBT.T, callback := kanu).init(switch1, group);
choice2 := NEW(ChoiceVBT.T, callback := wbaa).init(switch2, group);
choice3 := NEW(ChoiceVBT.T, callback := kera).init(switch3, group);
main := HVSplit.Cons(Axis.T.Ver, choice1, HVBar.New(), choice2,
HVBar.New(), choice3, HVBar.New(), text);
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main)
END RadioButtons.