Viewing contents of file '../idllib/contrib/buie/cw_ipmgr.pro'
;+
; 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.
;-
; ------------------------------------------------------------------------------
; 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

;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, 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 MESSAGE, name + ' set to ' + val, /INFO

;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