MODULE Numeric EXPORTS Main;
IMPORT Trestle, VBT, TextVBT, NumericVBT, Font, Shadow, AnyEvent;
IMPORT HVSplit, HVBar, Axis, ButtonVBT, TextPort;
FROM Colors IMPORT royal, white, lgrey, dgrey;
PROCEDURE Callback (v: NumericVBT.T; event: AnyEvent.T) =
BEGIN
TYPECASE event OF
| AnyEvent.Mouse => TextVBT.Put(display, "Mouse clicked");
| AnyEvent.Key => TextVBT.Put(display, "Return pressed");
END;
END Callback;
PROCEDURE SetEmpty (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
IF NOT NumericVBT.IsEmpty(numeric) THEN
NumericVBT.SetEmpty(numeric);
END;
END SetEmpty;
PROCEDURE SetMax (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
IF NOT NumericVBT.IsEmpty(numeric) THEN
NumericVBT.PutMax(numeric, NumericVBT.Get(numeric));
END;
END SetMax;
PROCEDURE SetMin (v: ButtonVBT.T; READONLY cd: VBT.MouseRec) =
BEGIN
IF NOT NumericVBT.IsEmpty(numeric) THEN
NumericVBT.PutMin(numeric, NumericVBT.Get(numeric));
END;
END SetMin;
CONST times14 = "-*-times-*-r-*-*-14-*-*-*-*-*-*-*";
VAR
font := Font.FromName(ARRAY OF TEXT{times14});
sh := Shadow.New(3.0, royal, white, lgrey, dgrey);
numeric := NEW(NumericVBT.T, callback := Callback).init(
min := FIRST(INTEGER), max := LAST(INTEGER),
allowEmpty := TRUE, naked := FALSE, font := font,
shadow := sh);
display := TextVBT.New("");
vsplit := HVSplit.Cons(Axis.T.Ver, numeric, HVBar.New(), display);
setempty := ButtonVBT.New(TextVBT.New("Set Empty"), SetEmpty);
setmax := ButtonVBT.New(TextVBT.New("Set Max"), SetMax);
setmin := ButtonVBT.New(TextVBT.New("Set Min"), SetMin);
buttons := HVSplit.Cons(Axis.T.Ver, setmax, HVBar.New(), setmin,
HVBar.New(), setempty);
main := HVSplit.Cons(Axis.T.Hor, vsplit, HVBar.New(), buttons);
BEGIN
Trestle.Install(main);
Trestle.AwaitDelete(main)
END Numeric.