;+ ; NAME: ; qSlider ; PURPOSE: ; Create sliders to return values to caller ; CATEGORY: ; Compound widget ; CALLING SEQUENCE ; val = qSlider(sld_def) ; INPUTS: ; sld_def array[6]; type; integer ; 6 values representing the ; minimum, maximum and default ; values of the two sliders. ; ex. ; [1,30,13, 300,1300, 600] ; min, max, def, min, max, def ; sld_name array[2]; type; string ; 2 values including the names ; for each slider ; OUTPUTS: ; Result integer 0 if canceled or exited ; array[2] with 2 slider final ; values if accepted. ;- PRO qSlider_event, event widget_control, event.top, get_uvalue=slider kill=0 state = slider.state CASE event.id OF state.wid_cancel : kill=1 state.wid_accept : kill=2 ELSE: BEGIN kill=0 widget_control, state.wid_slider1, get_value=slider1 widget_control, state.wid_slider2, get_value=slider2 (*slider.ptr).slider1 = slider1 (*slider.ptr).slider2 = slider2 END ENDCASE CASE kill OF 0: widget_control, event.top, set_uvalue=slider 1: BEGIN widget_control, event.top, /destroy return END 2: BEGIN (*slider.ptr).die = 1 widget_control, event.top, /destroy return END ENDCASE RETURN & END FUNCTION qSlider, sld_def, sld_name @compile_opt.pro state = {STATE_QSLIDER, $ wid_slider1: 0L, $ wid_slider2: 0L, $ wid_accept: 0L, $ wid_cancel: 0L } wid_sld = widget_base(title='Select Values', /column) dummy1 = widget_base(wid_sld, /row) dummy2 = widget_base(wid_sld, /row) dummy3 = widget_base(wid_sld, /column) dummy4 = widget_base(wid_sld, /column) state.wid_slider1 = widget_slider(dummy1, minimum=sld_def[0], maximum=sld_def[1], title=sld_name[0], uvalue='slider1', value=sld_def[2]) state.wid_slider2 = widget_slider(dummy2, minimum=sld_def[3], maximum=sld_def[4],title=sld_name[1], uvalue='slider2', value=sld_def[5]) state.wid_accept = widget_button(dummy3, uvalue='save', value='Save') state.wid_cancel = widget_button(dummy4, uvalue='cancel', value='Cancel') widget_control, state.wid_slider2, get_value=slider2 widget_control, state.wid_slider1, get_value=slider1 ptr = {slider1:slider1, slider2:slider2, die:0 } slider = {ptr:ptr_new(ptr), state:state} sliderptr = slider widget_control, wid_sld, set_uvalue=slider, /no_copy widget_control, wid_sld, /realize xmanager, 'qSlider', wid_sld, event_handler='qSlider_event' IF (*sliderptr.ptr).die NE 0 THEN BEGIN out = [(*sliderptr.ptr).slider1, (*sliderptr.ptr).slider2] return, out ENDIF return, 0 END