PRO qView_Gain, state, event, wid_send=wid_send, send_event=send_event ;+ ; NAME: ; qView_Gain ; PURPOSE: ; CATEGORY: ; CALLING SEQUENCE: ; INPUTS: ; OPTIONAL INPUT PARAMETERS: ; OUTPUTS: ; OPTIONAL OUTPUT PARAMETERS: ; INCLUDE: @compile_opt.pro ; On error, return to caller ; EXTERNAL: ; CALLS: ; SEE ALSO: ; COMMON BLOCKS: common qView_Gain_Save, boxes, ngains, x , y ; SIDE EFFECTS: ; RESTRICTIONS: ; EXAMPLE: ; PROCEDURE: ; MODIFICATION HISTORY: ; OCT-2002, Paul Hick (UCSD/CASS; pphick@ucsd.edu) ;- event_name = tag_names(event, /structure_name) widget_control, state.wid_gain, get_value=label, get_uvalue=set CASE set OF 0B: BEGIN ; The test for the event name IS necessary. If tracking was interrupted by pressing ; the 'GAIN' button then the user value of state.wid_gain is cleared. However, there ; could still be an QIMAGE_GAIN event on the way. The test on event_name makes sure ; that this event is ignored. IF event_name EQ 'WIDGET_BUTTON' THEN BEGIN tmp = qView_ImageInfo(state, /first, /display) IF tmp[0] NE tmp[1] THEN BEGIN tmp = qView_UpdateActive(state, /first) qView_Image, state ENDIF ok = dialog_message(title=label+' correction', $ 'Select bright area. Then press "'+label+'" button again', $ /cancel, dialog_parent=state.wid_gain) EQ 'OK' IF ok THEN set = set+1B ELSE set = 0B widget_control, state.wid_gain, set_uvalue=set, /no_copy ENDIF END 1B: BEGIN status = qImage_TriggerSend(event, state.wid_view, state.wid_gain, wid_send, send_event) CASE status OF 0B: message, 'oops' ; No qImage widget exists: shouldn't happen 1B: RETURN ; Return to event handler to send 'send_event' to 'wid_send' 2B: BEGIN ; Process QIMAGE_SEND event boxes = event.box ok = dialog_message(title=label+' correction', $ ['Bright area: X:['+strcompress(boxes[0])+'-'+strcompress(boxes[2])+'] '+ $ 'Y:['+strcompress(boxes[1])+'-'+strcompress(boxes[3])+']', $ 'Now select background area. Then press "'+label+'" button again'], $ /cancel, dialog_parent=state.wid_gain) EQ 'OK' IF ok THEN set = set+1B ELSE set = 0B widget_control, state.wid_gain, set_uvalue=set, /no_copy IF NOT ok THEN destroyvar, boxes END ENDCASE END 2B: BEGIN status = qImage_TriggerSend(event, state.wid_view, state.wid_gain, wid_send, send_event) CASE status OF 0B: message, 'oops' ; No qImage widget exists: shouldn't happen 1B: RETURN ; Return to event handler to send 'send_event' to 'wid_send' 2B: BEGIN ; Process QIMAGE_SEND event boxes = [[boxes], [event.box]] ok = dialog_message(title=label+' correction', $ ['Bright area: X:['+strcompress(boxes[0])+'-'+strcompress(boxes[2])+'] '+ $ 'Y:['+strcompress(boxes[1])+'-'+strcompress(boxes[3])+']', $ 'Background: X:['+strcompress(boxes[4])+'-'+strcompress(boxes[6])+'] '+ $ 'Y:['+strcompress(boxes[5])+'-'+strcompress(boxes[7])+']', $ 'Boxes OK?'], $ /cancel, dialog_parent=state.wid_gain) EQ 'OK' IF ok THEN set = set+1B ELSE set = 0B widget_control, state.wid_gain, set_uvalue=set, /no_copy CASE ok OF 0: destroyvar, boxes 1: BEGIN widget_control, state.wid_view, get_uvalue=wid_qimage qImage_SendDestination, wid_qimage, state.wid_gain, foreign=3, boxes=boxes tmp = qView_UpdateActive(state, /first) qView_Image, state ; Generate QIMAGE_GAIN event qView_ApplyGain END ENDCASE END ENDCASE END 3B: BEGIN ; Cancel gaining if button is pressed while gaining is ON CASE event_name OF 'WIDGET_BUTTON': BEGIN widget_control, state.wid_view, get_uvalue=wid_qimage IF widget_info(wid_qimage, /valid) THEN qImage_SendDestination, wid_qimage, foreign=0 widget_control, state.wid_gain, set_uvalue=0B destroyvar, boxes, ngains, x , y END ELSE: BEGIN tmp = qView_UpdateActive(state, step=1, /noloop, new=new, old=old) IF NOT event.gaining THEN new = -1 IF new NE -1 THEN BEGIN qView_Image, state ENDIF ELSE BEGIN widget_control, state.wid_view, get_uvalue=wid_qimage qImage_SendDestination, wid_qimage, foreign=0 widget_control, state.wid_gain, set_uvalue=0B ; Gaining is off ENDELSE qView_ApplyGain, state, event, old, display=new EQ -1, add=event.gaining END ENDCASE END ENDCASE RETURN & END