;+ ; NAME: ; cw_ipmgr ; PURPOSE: (one line) ; Display and edit itool image parameters. ; DESCRIPTION: ; ; CATEGORY: ; Compound Widgets ; CALLING SEQUENCE: ; result = cw_ipmgr( parent ) ; INPUTS: ; ; OPTIONAL INPUT PARAMETERS: ; ; KEYWORD PARAMETERS: ; UVALUE = Optional user value. ; OUTPUTS: ; ; COMMON BLOCKS: ; ; SIDE EFFECTS: ; ; RESTRICTIONS: ; ; PROCEDURE: ; ; MODIFICATION HISTORY: ; Written by Doug Loucks, Lowell Observatory. ; June 17, 1994, DWL, Converted to Compound Widget. ; 99/11/15, Marc W. Buie, Lowell Observatory, minor modifications to ; widget update and feedback routines. ;- ; ------------------------------------------------------------------------------ ; Procedure cw_ipmgr_svl ; Set the value of cw_ipmgr ; ------------------------------------------------------------------------------ PRO cw_ipmgr_svl, id, dummy ;Note: The 'value' is a dummy argument. The image parameters are stored in ;the parent uvalue (the TLB). ;I would like to change this to function more like a real compound widget, ;but there is no time. ;Retrieve the state. stash = WIDGET_INFO( id, /CHILD ) WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY WIDGET_CONTROL, state.topbase, GET_UVALUE=im_parms, /NO_COPY WIDGET_CONTROL, state.topbase, UPDATE=0 ;Refresh the text widgets. f = '(G0.2)' WIDGET_CONTROL, state.imfileid, SET_VALUE=im_parms.imfile WIDGET_CONTROL, state.airmassid, $ SET_VALUE=STRING(im_parms.airmass, FORMAT=f ) WIDGET_CONTROL, state.exptimeid, $ SET_VALUE=STRING(im_parms.exptime, FORMAT=f ) WIDGET_CONTROL, state.expdeltaid, $ SET_VALUE=STRING(im_parms.expdelta,FORMAT=f) WIDGET_CONTROL, state.filterid, SET_VALUE=im_parms.filter WIDGET_CONTROL, state.objectid, SET_VALUE=im_parms.object WIDGET_CONTROL, state.dateid, SET_VALUE=im_parms.date WIDGET_CONTROL, state.utid, SET_VALUE=im_parms.ut julian = STRTRIM( STRING( im_parms.jd, FORMAT='(D15.5)' ), 2 ) WIDGET_CONTROL, state.jdid, SET_VALUE=julian WIDGET_CONTROL, state.topbase, SET_UVALUE=im_parms, /NO_COPY WIDGET_CONTROL, state.topbase, UPDATE=0 WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY END ; ------------------------------------------------------------------------------ ; Function cw_ipeve ; Event handler. ; ------------------------------------------------------------------------------ FUNCTION cw_ipeve, event ;Retrieve the state. stash = WIDGET_INFO( event.handler, /CHILD ) WIDGET_CONTROL, stash, GET_UVALUE=state, /NO_COPY ;Retrieve the parameters. WIDGET_CONTROL, event.top, GET_UVALUE=im_parms, /NO_COPY ;Get the value of the widget that generated the event. WIDGET_CONTROL, event.id, GET_VALUE=value val = value[0] ;Initialize some local variables. name = '' out_event = 0 ;Handle the event. CASE event.id OF state.dismissid : BEGIN ;Put the parameter and state structures away, Unmap the top level base, ;and destroy the rest of the hierarchy. WIDGET_CONTROL, event.top, SET_UVALUE=im_parms, /NO_COPY WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY WIDGET_CONTROL, event.top, MAP=0 WIDGET_CONTROL, event.handler, /DESTROY RETURN, 0 END state.verifyid : BEGIN PRINT, ' ' PRINT, 'Image file name _ _ _' + im_parms.imfile PRINT, 'Airmass _ _ _ _ _ _ _' + STRING( im_parms.airmass ) PRINT, 'Exposure time _ _ _ _' + STRING( im_parms.exptime ) PRINT, 'Exposure delta _ _ __' + STRING( im_parms.expdelta ) PRINT, 'Filter code _ _ _ _ _' + im_parms.filter PRINT, 'Object _ _ _ _ _ _ __' + im_parms.object PRINT, 'Date of observation _' + im_parms.date PRINT, 'Time (UT) _ _ _ _ _ _' + im_parms.ut PRINT, 'Julian Date _ _ _ _ _' + STRING( im_parms.jd, FORMAT='(D15.5)' ) END state.imfileid : BEGIN im_parms.imfile = val name = 'imfile' END state.airmassid : BEGIN im_parms.airmass = val name = 'airmass' END state.exptimeid : BEGIN im_parms.exptime = val name = 'exptime' END state.expdeltaid : BEGIN im_parms.expdelta = val name = 'expdelta' END state.filterid : BEGIN im_parms.filter = val name = 'filter' END state.objectid : BEGIN im_parms.object = val name = 'object' END state.dateid : BEGIN im_parms.date = val name = 'date' END state.utid : BEGIN im_parms.ut = val name = 'ut' END ELSE : BEGIN MESSAGE, 'Unknown event:', /INFO HELP, event, /STRUCTURE END ENDCASE ;Print a message indicating the parameter changed and its new value. if name ne '' then print,name,' set to ',val ;Restore the parameters and state. WIDGET_CONTROL, event.top, SET_UVALUE=im_parms, /NO_COPY WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY RETURN, out_event END ; ------------------------------------------------------------------------------ ; Function cw_ipmgr ; ------------------------------------------------------------------------------ FUNCTION cw_ipmgr, parent, UVALUE=uvalue ;Note: This compound widget assumes that the image parameters structure is ;stored in the user value of the top level base. The idea is to 'hang' this ;widget on its own TLB. ;Define the main base. IF KEYWORD_SET( uvalue ) THEN BEGIN mainbase = WIDGET_BASE( parent, EVENT_FUNC='cw_ipeve', COLUMN=1, $ PRO_SET_VALUE='cw_ipmgr_svl', UVALUE=uvalue ) ENDIF ELSE BEGIN mainbase = WIDGET_BASE( parent, EVENT_FUNC='cw_ipeve', COLUMN=1, $ PRO_SET_VALUE='cw_ipmgr_svl' ) ENDELSE ;Get the parameters. WIDGET_CONTROL, parent, GET_UVALUE=im_parms, /NO_COPY ;Local state structure. state = { $ imfileid:0L, $ airmassid:0L, $ dateid:0L, $ dismissid:0L, $ exptimeid:0L, $ expdeltaid:0L, $ filterid:0L, $ jdid:0L, $ objectid:0L, $ topbase:parent, $ utid:0L, $ verifyid:0L } ; Define the rest of the widgets and their bases. ; wb = WIDGET_BASE( mainbase, /ROW ) state.dismissid = WIDGET_BUTTON( wb, VALUE='Dismiss' ) state.verifyid = WIDGET_BUTTON( wb, VALUE='Verify' ) wb = WIDGET_BASE( mainbase, /ROW ) state.imfileid = WIDGET_TEXT( wb, VALUE=im_parms.imfile, /EDITABLE, XSIZE=15 ) w1 = WIDGET_LABEL( wb, VALUE='Image file name' ) f = '(G0.2)' wb = WIDGET_BASE( mainbase, /ROW ) state.airmassid = WIDGET_TEXT( wb, VALUE=STRING( im_parms.airmass, $ FORMAT=f ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Airmass' ) wb = WIDGET_BASE( mainbase, /ROW ) state.exptimeid = WIDGET_TEXT( wb, VALUE=STRING( im_parms.exptime, $ FORMAT=f ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Exposure time (seconds)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.expdeltaid = WIDGET_TEXT( wb, VALUE=STRING( im_parms.expdelta, $ FORMAT=f ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Exposure delta (seconds)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.filterid = WIDGET_TEXT( wb, VALUE=im_parms.filter, XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Filter code' ) wb = WIDGET_BASE( mainbase, /ROW ) state.objectid = WIDGET_TEXT( wb, VALUE=im_parms.object, XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Object' ) wb = WIDGET_BASE( mainbase, /ROW ) state.dateid = WIDGET_TEXT( wb, VALUE=im_parms.date, /EDITABLE, XSIZE=15 ) w1 = WIDGET_LABEL( wb, VALUE='Date of observation' ) wb = WIDGET_BASE( mainbase, /ROW ) state.utid = WIDGET_TEXT( wb, VALUE=im_parms.ut, /EDITABLE, XSIZE=15 ) w1 = WIDGET_LABEL( wb, VALUE='Start Time (UT)' ) wb = WIDGET_BASE( mainbase, /ROW ) julian = STRTRIM( STRING( im_parms.jd, FORMAT='(D15.5)' ), 2 ) state.jdid = WIDGET_TEXT( wb, VALUE=julian, XSIZE=15 ) w1 = WIDGET_LABEL( wb, VALUE='Julian Date (mid-time)' ) ;Put the parameters back. WIDGET_CONTROL, parent, SET_UVALUE=im_parms, /NO_COPY ;Restore the state. stash = WIDGET_INFO( mainbase, /CHILD ) WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY RETURN, mainbase END