<<>> <> <> <> <> <<>> DIRECTORY Xl USING [GContext], XTk USING [Event, Widget, WidgetSpec]; XTkSlider: CEDAR DEFINITIONS ~ BEGIN OPEN Xl; <<>> Widget: TYPE = XTk.Widget; Slider: TYPE = Widget; WidgetSpec: TYPE = XTk.WidgetSpec; Direction: TYPE = {right, up, left, down}; --order may change Reason: TYPE = {temporary, client, set, abort}; NormalizedSliderValue: TYPE = REAL; -- in range [0.0, 1.0] <<>> <> <> <<>> <<"reason" is the reason the client procedure is being called.>> <> <> <> <> <<"contents" displayed or new contents of slider.>> <<"event" X event causing action (NIL if not available); useful for time stamp...>> <<"clientData" from widget creation.>> <> <<>> SliderProc: TYPE = PROC [slider: Slider, clientData: REF, contents: NormalizedSliderValue, event: XTk.Event, reason: Reason]; <> <> FilterProc: TYPE = PROC [slider: Slider, clientData: REF, contents: REAL, event: XTk.Event, reason: Reason] RETURNS [filteredValue: REAL]; <> IsSlider: PROC [widget: XTk.Widget] RETURNS [BOOL]; <> <<>> CreateSlider: PROC [widgetSpec: WidgetSpec ¬ [], direction: Direction ¬ right, contents: NormalizedSliderValue, clientData: REF ¬ NIL, filterProc: FilterProc ¬ NIL, sliderProc: SliderProc ¬ NIL, gc: Xl.GContext ¬ NIL] RETURNS [Slider]; <> <> <> <> <> <<>> SetFilter: PROC [slider: XTk.Widget, filterProc: FilterProc ¬ NIL, sliderProc: SliderProc ¬ NIL, clientData: REF ¬ NIL]; <> <<>> SetGC: PROC [slider: Slider, gc: Xl.GContext ¬ NIL]; <> GetContents: PROC [slider: Slider] RETURNS [contents: NormalizedSliderValue]; <> <> SetContents: PROC [slider: Slider, contents: NormalizedSliderValue, event: XTk.Event ¬ NIL]; <> <> <> InternalSetContents: PROC [slider: Slider, contents: NormalizedSliderValue, event: XTk.Event ¬ NIL, reason: Reason ¬ client]; <> <> sliderSetKey: READONLY ATOM; -- ¬ $sliderSet <> <> END.