FUNCTION qTool_Zoom, state, event_id, zoom_low=zoom_low, zoom_high=zoom_high ;+ ; NAME: ; qTool_Zoom ; PURPOSE: ; Handles event related to zooming operations ; CATEGORY: ; ; CALLING SEQUENCE: ; R = qTool_Zoom(state, event_id) ; INPUTS: ; state array[1]; type: structure ; qImage_cw state structure ; event_id scalar; type: long integer ; widget ID of widget generating the zoom 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 zoom factor ;- InitVar, zoom_low , -30 InitVar, zoom_high, 30 CASE event_id OF state.wid_zoom: BEGIN widget_control, state.wid_zoom, get_value=zoom_new, get_uvalue=zoom_current IF zoom_current LT 1 THEN zoom_current = -round(1.0/zoom_current) zoom_new = (zoom_new > zoom_low) < zoom_high IF zoom_new EQ -1 OR zoom_new EQ 0 THEN zoom_new = 1 set = zoom_new NE zoom_current widget_control, state.wid_zoom, set_value=zoom_new END state.wid_zoomin : BEGIN widget_control, state.wid_zoom, get_value=zoom_current zoom_new = (zoom_current+1) < zoom_high IF zoom_new EQ -1 OR zoom_new EQ 0 THEN zoom_new = 1 set = zoom_new NE zoom_current IF set THEN widget_control, state.wid_zoom, set_value=zoom_new END state.wid_zoomout: BEGIN widget_control, state.wid_zoom, get_value=zoom_current zoom_new = (zoom_current-1) > zoom_low IF zoom_new EQ -1 OR zoom_new EQ 0 THEN zoom_new = -2 set = zoom_new NE zoom_current IF set THEN widget_control, state.wid_zoom, set_value=zoom_new END ;state.wid_maxzoom : 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_zoom, get_value=zoom_current ; zoom_new = floor( min( float(screen_size)/(box[*,1]-box[*,0]+1)) ) ; zoom_new = (zoom_new > zoom_low) < zoom_high ; set = 1 ;set = zoom_new ne zoom_current ;IF set THEN BEGIN ; widget_control, state.wid_zoom , set_value =zoom_new ; widget_control, state.wid_maxzoom, set_uvalue=1 ; Forces centering of box ;ENDIF ; ENDIF ;END ENDCASE RETURN, set & END