; V3 is designed for previously stretched images ; V4 openws xlim.out in $JUNK instead of default directory ; V5 stores the stretch constants in a more customized file (image_chars) PRO stretch_slider_event, event parent=event.handler ;stash = WIDGET_INFO(parent, /CHILD) ;WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY widget_control,widget_info(parent,/child),get_uvalue=state,/no_copy wset,state.win_draw CASE event.id OF state.brightness_slide: begin widget_control, event.id, get_value= dum_b state.brightness=dum_b/100. state.xlim1=state.scale_max*(state.contrast-state.brightness) state.xlim2=state.scale_max*(2.-state.brightness-state.contrast) if state.xlim1 lt 0. then state.xlim1=0. state.brightness=1.-(state.xlim1+state.xlim2)/2./state.scale_max state.contrast=1.-(state.xlim2-state.xlim1)/2./state.scale_max tv,bytscl(state.image,min=state.xlim1,max=state.xlim2,top=!d.table_size) openw,6,state.image_chars printf,6,state.xlim1,state.xlim2 close,6 end state.contrast_slide: begin widget_control, event.id, get_value= dum_c state.contrast=dum_c/100. state.xlim1=state.scale_max*(state.contrast-state.brightness) state.xlim2=state.scale_max*(2.-state.brightness-state.contrast) if state.xlim1 lt 0. then state.xlim1=0. state.brightness=1.-(state.xlim1+state.xlim2)/2./state.scale_max state.contrast=1.-(state.xlim2-state.xlim1)/2./state.scale_max tv,bytscl(state.image,min=state.xlim1,max=state.xlim2,top=!d.table_size) openw,6,state.image_chars printf,6,state.xlim1,state.xlim2 close,6 end state.xlim1_slide: begin widget_control, event.id, get_value= dum_x state.xlim1=dum_x state.brightness=1.-(state.xlim1+state.xlim2)/2./state.scale_max state.contrast=1.-(state.xlim2-state.xlim1)/2./state.scale_max tv,bytscl(state.image,min=state.xlim1,max=state.xlim2,top=!d.table_size) openw,6,state.image_chars printf,6,state.xlim1,state.xlim2 close,6 end state.xlim2_slide: begin widget_control, event.id, get_value= dum_x state.xlim2=dum_x state.xl=[state.xlim1,state.xlim2] state.brightness=1.-(state.xlim1+state.xlim2)/2./state.scale_max state.contrast=1.-(state.xlim2-state.xlim1)/2./state.scale_max tv,bytscl(state.image,min=state.xlim1,max=state.xlim2,top=!d.table_size) openw,6,state.image_chars printf,6,state.xlim1,state.xlim2 close,6 end ENDCASE ; Swallow events, except for the REPORT event ;WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY widget_control,widget_info(parent,/child),set_uvalue=state,/no_copy END pro stretch_slider,image,win_draw,image_chars,GROUP = GROUP scale_max=max(image) xlim1=0. xlim2=scale_max openw,6,image_chars printf,6,xlim1,xlim2 close,6 brightness=1.-(xlim1+xlim2)/2./scale_max contrast=1.-(xlim2-xlim1)/2./scale_max ;wset,win_draw tv,bytscl(image,min=xlim1,max=xlim2,top=!d.table_size) minvalue = 1. maxvalue = 100. base = WIDGET_BASE(TITLE = 'Stretch Slider', /COLUMN,xoffset=0,yoffset=0) widget_control,base ; A slide widget for the brightness brightness_slide = widget_slider(base, $ minimum = minvalue, $ maximum = maxvalue, $ value = 97, $ title = 'Brightness', $ /frame,uvalue = 'brightness_slide',xsize=300) ; A slide widget for the contrast contrast_slide= widget_slider(base, $ minimum = minvalue, $ maximum = maxvalue, $ value = 97, $ title = 'Contrast', $ /frame,uvalue = 'contrast_slide',xsize=300) ; A slide widget for the lower x limit xlim1_slide= widget_slider(base, $ minimum = 0., $ maximum = scale_max, $ value = 0., $ title = 'XLim 1', $ /frame,uvalue = 'xlim1_slide',xsize=300) ; A slide widget for the upper x limit xlim2_slide= widget_slider(base, $ minimum = 1., $ maximum = scale_max, $ value = scale_max , $ title = 'XLim 2', $ /frame,uvalue = 'xlim1_slide',xsize=300) state = { image: image, $ scale_max: scale_max,$ xlim1: xlim1,$ xlim2: xlim2,$ xl: [xlim1,xlim2],$ brightness_slide: brightness_slide, $ contrast_slide: contrast_slide, $ xlim1_slide: xlim1_slide,$ xlim2_slide: xlim2_slide,$ brightness: brightness, $ contrast: contrast,$ image_chars: image_chars, $ win_draw: win_draw $ } WIDGET_CONTROL, WIDGET_INFO(base, /CHILD), SET_UVALUE=state, /NO_COPY ; Realize the widgets: WIDGET_CONTROL, base, /REALIZE ; Hand off control of the widget to the XMANAGER: XMANAGER, "stretch_slider", base, GROUP_LEADER = GROUP END