MODULE Mouse EXPORTS Main; IMPORT Trestle, VBT, TextVBT, RigidVBT, HVSplit, BorderedVBT as BdVBT; IMPORT Axis, Region, PaintOp, Fmt; FROM VBT IMPORT Modifier, ClickType; (* used in MouseEvent *) TYPE MouseVBT = VBT.Leaf OBJECT whatChanged, time, cp, modifiers, clickType, clickCount: TextVBT.T; METHODS init():MouseVBT := Init; OVERRIDES mouse:=MouseEvent; repaint:=Repaint; (* Leaf repaint does nothing *) END; PROCEDURE Init(v:MouseVBT):MouseVBT = BEGIN v.whatChanged:= TextVBT.New(" "); v.time := TextVBT.New(" "); v.cp := TextVBT.New(" "); (* cursor postion *) v.modifiers := TextVBT.New(" "); v.clickType := TextVBT.New(" "); v.clickCount := TextVBT.New(" "); (* "double click", etc *) RETURN v; END Init; PROCEDURE MouseEvent(v:MouseVBT; READONLY cd: VBT.MouseRec) = (* elided *) PROCEDURE Repaint(v:MouseVBT; READONLY rgn: Region.T) = BEGIN VBT.PaintRegion(v,rgn,PaintOp.Bg); END Repaint; VAR mousevbt := NEW(MouseVBT).init(); vbt1 := RigidVBT.FromHV(mousevbt, 20.0, 35.0); split1 := HVSplit.Cons(Axis.T.Ver, BdVBT.New(TextVBT.New("what changed")), BdVBT.New(TextVBT.New("time")), BdVBT.New(TextVBT.New("position")), BdVBT.New(TextVBT.New("modifiers")), BdVBT.New(TextVBT.New("click type")), BdVBT.New(TextVBT.New("click count"))); vbt2 := RigidVBT.FromHV(split1, 20.0, 35.0); split2 := HVSplit.Cons(Axis.T.Ver, BdVBT.New(mousevbt.whatChanged), BdVBT.New(mousevbt.time), BdVBT.New(mousevbt.cp), BdVBT.New(mousevbt.modifiers), BdVBT.New(mousevbt.clickType), BdVBT.New(mousevbt.clickCount)); vbt3 := RigidVBT.FromHV(split2, 35.0, 35.0); main := HVSplit.Cons(Axis.T.Hor,vbt1,vbt2,vbt3); BEGIN Trestle.Install(main); Trestle.AwaitDelete(main); END Mouse.