MODULE Drag EXPORTS Main; IMPORT Trestle, VBT, TextVBT, RigidVBT, ShadowedFeedbackVBT, HVSplit, HVBar; IMPORT Axis, Shadow, DragSwitchVBT, Fmt; FROM Colors IMPORT lblue, dblue; CONST shsize = 5.0; (* shadow size in points *) min = 20.0; (* size of demo area in millimeters *) TYPE SF = ShadowedFeedbackVBT.T; DS = DragSwitchVBT.T OBJECT OVERRIDES callback := Callback; during := During END; PROCEDURE Callback (v: DS; READONLY cd: VBT.MouseRec) = BEGIN TextVBT.Put(display, "callback called"); END Callback; PROCEDURE During (v: DS; READONLY cd: VBT.PositionRec) = VAR point := cd.cp.pt; txt := "current position (" & Fmt.Int(point.h) & "," & Fmt.Int(point.v) & ")"; BEGIN TextVBT.Put(display, txt); END During; VAR shadow := Shadow.New(size := shsize, light := lblue, dark := dblue); switch := NEW(SF).init(ch := TextVBT.New("DragSwitch"), shadow := shadow); drag := NEW(DS).init(switch); display := TextVBT.New(""); work := RigidVBT.FromHV(TextVBT.New("Drag Demo"), 2.0 * min, min); main := HVSplit.Cons( Axis.T.Ver, drag, HVBar.New(), display, HVBar.New(), work); BEGIN Trestle.Install(main); Trestle.AwaitDelete(main) END Drag.