MODULE React EXPORTS Main; IMPORT Trestle, VBT, TextVBT, SwitchVBT, ChoiceVBT, ReactivityVBT; IMPORT MarginFeedbackVBT, BiFeedbackVBT, ShadowedFeedbackVBTASShVBT; 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.NewCheck(NEW(ShVBT.T).init(ch, s)); BEGIN EVAL SwitchVBT.T.init(self, f := NEW(BiFeedbackVBT.T).init(m)); RETURN (self); END Init; PROCEDURE ActiveAction (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) = BEGIN ReactivityVBT.Set(button, ReactivityVBT.State.Active); END ActiveAction; PROCEDURE PassiveAction (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) = BEGIN ReactivityVBT.Set(button, ReactivityVBT.State.Passive); END PassiveAction; PROCEDURE DormantAction (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) = BEGIN ReactivityVBT.Set(button, ReactivityVBT.State.Dormant); END DormantAction; PROCEDURE VanishAction (v: ChoiceVBT.T; READONLY cd: VBT.MouseRec) = BEGIN ReactivityVBT.Set(button, ReactivityVBT.State.Vanish); END VanishAction; VAR shadow := Shadow.New(size := 5.0, light := lblue, dark := dblue); button := ReactivityVBT.New( NEW(SwitchVBT.T).init( NEW(ShVBT.T).init(TextVBT.New("React"), shadow))); switch1 := NEW(S).init(TextVBT.New("Active"), shadow); switch2 := NEW(S).init(TextVBT.New("Passive"), shadow); switch3 := NEW(S).init(TextVBT.New("Dormant"), shadow); switch4 := NEW(S).init(TextVBT.New("Vanish"), shadow); group := NEW (ChoiceVBT.Group); choice1 := NEW(ChoiceVBT.T, callback := ActiveAction).init( switch1, group); choice2 := NEW(ChoiceVBT.T, callback := PassiveAction).init( switch2, group); choice3 := NEW(ChoiceVBT.T, callback := DormantAction).init( switch3, group); choice4 := NEW(ChoiceVBT.T, callback := VanishAction).init( switch4, group); main := HVSplit.Cons(Axis.T.Ver, choice1, choice2, choice3, choice4, HVBar.New(), button); BEGIN Trestle.Install(main); Trestle.AwaitDelete(main) END React.