;+ ; NAME: ; cw_ppmgr ; PURPOSE: (one line) ; Display and edit itool photometry parameters. ; DESCRIPTION: ; ; CATEGORY: ; Compound Widgets ; CALLING SEQUENCE: ; result = cw_ppmgr( 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 cosmetic changes to ; the widget control and user feedback. ;- ; ------------------------------------------------------------------------------ ; Function cw_ppeve ; Event Handler ; ------------------------------------------------------------------------------ FUNCTION cw_ppeve, 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=ph_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=ph_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.logfileid : BEGIN ph_parms.logfile = val name = 'logfile' ph_parms.edtflg = 1 END state.pfileid : BEGIN ph_parms.parmfile = STRTRIM( val, 2 ) name = 'Photometry parameters file' END state.radiusid : BEGIN ph_parms.radius = val name = 'radius' ph_parms.edtflg = 1 END state.sky1id : BEGIN ph_parms.sky1 = val name = 'sky1' ph_parms.edtflg = 1 END state.sky2id : BEGIN ph_parms.sky2 = val name = 'sky2' ph_parms.edtflg = 1 END state.boxmradid : BEGIN ph_parms.boxmrad = val name = 'boxmrad' ph_parms.edtflg = 1 END state.gainid : BEGIN ph_parms.gain = val name = 'gain' ph_parms.edtflg = 1 END state.pscaleid : BEGIN ph_parms.pscale = val name = 'pscale' ph_parms.edtflg = 1 END state.toggleid : BEGIN ph_parms.exact = event.value END state.loadid : BEGIN fmt = '(G0.2)' ;Call the procedure that loads the parameters from a file. it_pplod, ph_parms ;Refresh the text widgets. WIDGET_CONTROL, event.top, UPDATE=0 WIDGET_CONTROL, state.logfileid, SET_VALUE=ph_parms.logfile WIDGET_CONTROL, state.radiusid, SET_VALUE=STRING(ph_parms.radius, $ FORMAT=fmt) WIDGET_CONTROL, state.sky1id, SET_VALUE=STRING(ph_parms.sky1, $ FORMAT=fmt) WIDGET_CONTROL, state.sky2id, SET_VALUE=STRING(ph_parms.sky2, $ FORMAT=fmt) WIDGET_CONTROL, state.boxmradid, SET_VALUE=STRING(ph_parms.boxmrad, $ FORMAT=fmt) WIDGET_CONTROL, state.gainid, SET_VALUE=STRING(ph_parms.gain, $ FORMAT=fmt) WIDGET_CONTROL, state.pscaleid, SET_VALUE=STRING(ph_parms.pscale, $ FORMAT=fmt) WIDGET_CONTROL, state.nomextid, SET_VALUE=STRING(ph_parms.nomext, $ FORMAT=fmt) WIDGET_CONTROL, state.zpointid, SET_VALUE=STRING(ph_parms.zpoint, $ FORMAT=fmt) WIDGET_CONTROL, event.top, UPDATE=1 END state.saveid : BEGIN it_ppsav, ph_parms print,ph_parms.parmfile,' saved.' END state.nomextid : BEGIN ph_parms.nomext = val name = 'nomext' ph_parms.edtflg = 1 END state.zpointid : BEGIN ph_parms.zpoint = val name = 'zpoint' ph_parms.edtflg = 1 END ELSE : BEGIN print, 'Unknown event:' 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=ph_parms, /NO_COPY WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY RETURN, out_event END ; ------------------------------------------------------------------------------ ; Procedure cw_ppmgr ; ------------------------------------------------------------------------------ FUNCTION cw_ppmgr, parent, UVALUE=in_uvalue ;Note: This compound widget assumes that the photometry 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( in_uvalue ) THEN BEGIN mainbase = WIDGET_BASE( parent, EVENT_FUNC='cw_ppeve', COLUMN=1, $ UVALUE=in_uvalue ) ENDIF ELSE BEGIN mainbase = WIDGET_BASE( parent, EVENT_FUNC='cw_ppeve', COLUMN=1 ) ENDELSE ;Get the parameters. WIDGET_CONTROL, parent, GET_UVALUE=ph_parms, /NO_COPY ;Local state structure. state = { boxmradid:0L, dismissid:0L, $ gainid:0L, $ loadid:0L, logfileid:0L, nomextid:0L, $ pfileid:0L, pscaleid:0L, radiusid:0L, $ saveid:0L, sky1id:0L, sky2id:0L, $ toggleid:0L, zpointid:0L } ; Define the rest of the widgets and their bases. ; aa_base = WIDGET_BASE( mainbase, COLUMN=1, FRAME=1 ) mi_base = WIDGET_BASE( aa_base, ROW=1 ) WIDGET_CONTROL, mainbase, UPDATE=0 state.dismissid = WIDGET_BUTTON( mi_base, VALUE='Dismiss' ) state.loadid = WIDGET_BUTTON( mi_base, VALUE='Load' ) state.saveid = WIDGET_BUTTON( mi_base, VALUE='Save' ) pf_base = WIDGET_BASE( aa_base, /ROW ) state.pfileid = WIDGET_TEXT( pf_base, VALUE=ph_parms.parmfile, $ XSIZE=15, /EDITABLE) w1 = WIDGET_LABEL( pf_base, VALUE='Photometry parameters file name' ) wb = WIDGET_BASE( mainbase, /ROW ) state.logfileid = WIDGET_TEXT(wb,VALUE=ph_parms.logfile, XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Photometry log file name' ) wb = WIDGET_BASE( mainbase, /ROW ) state.radiusid = WIDGET_TEXT( wb, VALUE=STRING( ph_parms.radius, $ FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Aperture radius (pixels)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.sky1id = WIDGET_TEXT( wb, VALUE= $ STRING( ph_parms.sky1, FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Inner radius of sky annulus (pixels)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.sky2id = WIDGET_TEXT( wb, VALUE= $ STRING( ph_parms.sky2, FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Outer radius of sky annulus (pixels)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.boxmradid = WIDGET_TEXT( wb, VALUE=STRING( ph_parms.boxmrad, $ FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Local maximum box radius (pixels) ' ) wb = WIDGET_BASE( mainbase, /ROW ) state.gainid = WIDGET_TEXT( wb, VALUE= $ STRING( ph_parms.gain, FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Gain of CCD (e-/DN)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.pscaleid = WIDGET_TEXT( wb, $ VALUE=STRING(ph_parms.pscale,FORMAT='(G0.2)'), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb, VALUE='Plate scale (arcseconds/pixel)' ) wb = WIDGET_BASE( mainbase, /ROW ) state.toggleid = CW_BGROUP( wb, ['Search for local maximum', $ 'Use exact position'], /EXCLUSIVE, /NO_RELEASE, /ROW, $ SET_VALUE=ph_parms.exact ) wb = WIDGET_BASE( mainbase, /COLUMN, /FRAME ) wb1 = WIDGET_BASE( wb, /ROW ) state.nomextid = WIDGET_TEXT( wb1, VALUE=STRING( ph_parms.nomext, $ FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb1, VALUE='Nominal extinction (mags/airmass)' ) wb1 = WIDGET_BASE( wb, /ROW ) state.zpointid = WIDGET_TEXT( wb1, VALUE=STRING( ph_parms.zpoint, $ FORMAT='(G0.2)' ), XSIZE=15, /EDITABLE ) w1 = WIDGET_LABEL( wb1, VALUE='Zero point' ) WIDGET_CONTROL, mainbase, UPDATE=1 ;Put the parameters back. WIDGET_CONTROL, parent, SET_UVALUE=ph_parms, /NO_COPY ;Restore the state. stash = WIDGET_INFO( mainbase, /CHILD ) WIDGET_CONTROL, stash, SET_UVALUE=state, /NO_COPY RETURN, mainbase END