; PRO testwid_event, event ; ; ; compile_opt idl2, strictarrsubs ; ; ; widget_control, event.id, get_uvalue=uval ; if n_elements(uval) EQ 0 then return ; case uval of ; 'done':widget_control, event.top, /destroy ; 'get':BEGIN ; id = widget_info(event.top,find_by_uname = 'discret') ; widget_control, id, get_value = value1 ; help, value1 ; print, 'value1', value1 ; id = widget_info(event.top,find_by_uname = 'continus') ; widget_control, id, get_value = value2 ; help, value2 ; print, 'value2', value2 ; END ; ELSE: ; endcase ; return ; end ; PRO testwid, _extra = ex ; ; ; compile_opt idl2, strictarrsubs ; ; ; base=widget_base(/COLUMN) ; nothing = widget_label(base, value = 'beginning of the test') ; ; ; nothing = cw_selectinterval(base, 10+indgen(5), _extra = ex, uname = 'discret', uvalue = 'discret') ; print, nothing ; nothing = cw_selectinterval(base, indgen(20), _extra = ex, uname = 'continus', uvalue = 'continus') ; print, nothing ; ; ; nothing = widget_button(base, value = 'get', uvalue = 'get') ; nothing = widget_button(base, value = 'done', uvalue = 'done') ; widget_control, base, /REALIZE ; xmanager,'testwid', base, /no_block ; return ; end ; ;+ ; ; @file_comments ; ; @categories ; Compound widget ; ; @param ID ; ; @returns ; ; @restrictions ; ; @examples ; ; @history ; ; @version ; $Id$ ; ; @todo ; seb ; ;- FUNCTION cw_selectinterval_get_value, id ; compile_opt idl2, strictarrsubs ; bgroupid=widget_info(id, find_by_uname = 'bgroup') ; the widget is a set of button if bgroupid ne 0 then begin widget_control, bgroupid, get_value = selected widget_control, bgroupid, get_uvalue = vecteur vecteur = vecteur.vecteur endif else begin ; the widget is 2 sliders Minid = Widget_Info(Id, Find_by_uname = 'min') widget_control, minid, get_value = minval minval = minval.value maxid = widget_info(id, find_by_uname = 'max') widget_control, maxid, get_value = maxval maxval = maxval.value widget_control, minid, get_uvalue = vecteur vecteur = vecteur.vecteur selected = where(vecteur ge minval and vecteur le maxval) ENDELSE if selected[0] eq -1 then return, -1 else return, vecteur[selected] END ; ;+ ; @file_comments ; ; @categories ; Compound widget ; ; @param EVENT ; ; @returns ; ; @restrictions ; ; @examples ; ; @history ; ; @version ; $Id$ ; ;- FUNCTION cw_selectinterval_event, event ; compile_opt idl2, strictarrsubs ; widget_control, event.id, get_uvalue=uval case uval.name of 'min':begin ; change the value if the minimum for the slider called max maxid=widget_info(event.handler, find_by_uname = 'max') widget_control, maxid, set_value={SLIDER_MIN:event.value+1} end 'max':begin ; change the value if the maximum for the slider called min minid=widget_info(event.handler, find_by_uname = 'min') widget_control, minid, set_value={SLIDER_MAX:event.value-1} end 'bgroup': endcase return, {ID:event.handler, TOP:event.top, HANDLER:0L} END ; ;+ ; ; @file_comments ; ; @categories ; Compound widget ; ; @param PARENT ; The widget ID of the parent widget. ; ; @param VECTEUR {type=vector} ; A vector whose the first element must be the smallest one and the last ; must be the biggest one. ; ; @keyword _EXTRA ; Used to pass keywords ; ; @returns ; ; @restrictions ; ; @examples ; ; @history ; ; @version ; $Id$ ; ;- FUNCTION cw_selectinterval, parent, vecteur, _EXTRA=ex ; compile_opt idl2, strictarrsubs ; base = widget_base(parent $ , EVENT_FUNC = 'cw_selectinterval_event' $ , FUNC_GET_VALUE='cw_selectinterval_get_value' $ , PRO_SET_VALUE='cw_selectinterval_set_value' $ , /ROW, _extra = ex) if n_elements(vecteur) le 10 then begin nothing = CW_BGROUP(base, strtrim(vecteur,1),/nonexclusive,/row, uvalue = {name:'bgroup', vecteur:vecteur}, uname='bgroup') buttvalue=bytarr(n_elements(nothing)) buttvalue[0]=1 widget_control, nothing, set_value=buttvalue endif else begin min=min(floor(vecteur)) max=max(ceil(vecteur)) nothing=cw_slider_pm(base, value = min, min=min, max=max-1, uvalue = {name:'min', vecteur:vecteur}, uname='min') nothing=cw_slider_pm(base, value = max, min=min+1, max=max, uvalue = {name:'max'}, uname='max') endelse return, base end