<<>> <> <> <> <> <<>> DIRECTORY XTk USING [Class, Event, TQ, Widget, WidgetSpec]; <<>> <> <> XTkScroller: CEDAR DEFINITIONS ~ BEGIN <<>> Scroller: TYPE = XTk.Widget; scrollerClass: READONLY XTk.Class; Direction: TYPE = {horizontal, vertical}; --order may change State: TYPE = RECORD [start, next: REAL]; <<[start..next) denotes the displayed area, in range [0..1); . >> <<>> CreateScroller: PROC [widgetSpec: XTk.WidgetSpec ¬ [], direction: Direction ¬ vertical, state: State ¬ [0, 1]] RETURNS [Scroller]; <> <<>> GetDirection: PROC [scroller: Scroller] RETURNS [direction: Direction]; <<... returns the direction of a scroller.>> GetState: PROC [scroller: Scroller] RETURNS [state: State]; <<... returns the current state of the scroller.>> SetState: PROC [scroller: Scroller, state: State, propagate: BOOL ¬ FALSE]; <<... sets the state of the scroller. >> setStateCalled: READONLY ATOM; -- ¬ $ScrollerSetStateCalled <> <<>> <<>> Action: TYPE = {none, backward, forward, thumb, configure}; ScrollProc: TYPE = PROC [scroller: Scroller, action: Action, value: REAL, event: XTk.Event, clientData: REF]; <> <<"action" is the reason the client procedure is being called.>> <<"value" >> <> <> <<"event" X event causing action (NIL if not available); useful for time stamp...>> <<"clientData" from registration.>> InteractiveRegistrations: PROC [scroller: Scroller, scrollerProc: ScrollProc, clientData: REF ¬ NIL, tq: XTk.TQ ¬ NIL]; <> <> <> END.