FUNCTION qTool_Rebin, state, event_id, rebin_low=rebin_low, rebin_high=rebin_high ;+ ; NAME: ; qTool_rebin ; PURPOSE: ; Handles event related to rebinning operations ; CATEGORY: ; ; CALLING SEQUENCE: ; R = qTool_Rebin(state, event_id) ; INPUTS: ; state array[1]; type: structure ; qTool state structure ; event_id scalar; type: long integer ; widget ID of widget generating the rebin event ; OUTPUTS: ; R scalar; type: integer ; 0: screen needs to be redrawn ; 1: screen does not need to be redrawn ; INCLUDE: @compile_opt.pro ; On error, return to caller ; CALLS: ; PROCEDURE: ; MODIFICATION HISTORY: ; FEB-2001, Paul Hick (UCSD/CASS) ; JUL-2003, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ; Minor bug fix in update of cw_field containing rebin factor ;- InitVar, rebin_low , 1 InitVar, rebin_high, 29 CASE event_id OF state.wid_rebin: BEGIN widget_control, state.wid_rebin, get_value=rebin_new, get_uvalue=rebin_current ;IF rebin_current LT 1 THEN rebin_current = -round(1.0/rebin_current) rebin_new = rebin_new/2*2+1 rebin_new = (rebin_new > rebin_low) < rebin_high IF rebin_new EQ -1 OR rebin_new EQ 0 THEN rebin_new = 1 set = rebin_new NE rebin_current widget_control, state.wid_rebin, set_value=rebin_new END state.wid_rebinin : BEGIN widget_control, state.wid_rebin, get_value=rebin_current rebin_new = (rebin_current+2) < rebin_high IF rebin_new EQ -1 OR rebin_new EQ 0 THEN rebin_new = 1 set = rebin_new NE rebin_current IF set THEN widget_control, state.wid_rebin, set_value=rebin_new END state.wid_rebinout: BEGIN widget_control, state.wid_rebin, get_value=rebin_current rebin_new = (rebin_current-2) > rebin_low ;IF rebin_new EQ -1 OR rebin_new EQ 0 THEN rebin_new = -2 set = rebin_new NE rebin_current IF set THEN widget_control, state.wid_rebin, set_value=rebin_new END ;state.wid_maxrebin : BEGIN ; screen_size = qImage_cw_Property(state, /screen_size) ; IF screen_size[0]*screen_size[1] NE 0 THEN BEGIN ; qImage_cw_Box, state, /get, box ; widget_control, state.wid_rebin, get_value=rebin_current ; rebin_new = floor( min( float(screen_size)/(box[*,1]-box[*,0]+1)) ) ; rebin_new = (rebin_new > rebin_low) < rebin_high ; set = 1 ;set = rebin_new ne rebin_current ;IF set THEN BEGIN ; widget_control, state.wid_rebin , set_value =rebin_new ; widget_control, state.wid_maxrebin, set_uvalue=1 ; Forces centering of box ;ENDIF ; ENDIF ;END ENDCASE RETURN, set & END