;+
; NAME:
;	qImage_cw_Ephem
; PURPOSE:
;	Handles ephemeris access qImage_cw widget
; CATEGORY:
;	sat/idl/widget/qimage_cw
; CALLING SEQUENCE:
	FUNCTION qImage_cw_Ephem, state, event, update=update
; INPUTS:
; OPTIONAL INPUT PARAMETERS:
; OUTPUTS:
; OPTIONAL OUTPUT PARAMETERS:
; INCLUDE:
	@compile_opt.pro		; On error, return to caller
; CALLS:
;	IsType
; PROCEDURE:
; MODIFICATION HISTORY:
;	JUL-2005, Paul Hick (UCSD/CASS)
;	JUL-2008, Paul Hick (UCSD/CASS; pphick@ucsd.edu)
;		Added pnt_raded to ephem_state structure
;-

InitVar, update, /key

CASE update OF

0: BEGIN

	event_name = tag_names(event, /structure_name)

	CASE event_name EQ 'QEPHEMERIS_SEND' OF

	0: BEGIN					; Event from state.wid_ephem button

		widget_control, state.wid_ephem, get_uvalue=ephem_state, /no_copy

		CASE event.select OF

		0: qEphem, group=event.handler, state=ephem_state, /destroy

		1: BEGIN
			time = qimage_cw_property(state,/image_time)

			CASE time[0] EQ '' OF

			0: BEGIN

				; ephem_state.on (0/1) decides whether ephemeris display is off/on
				; ephem_state.wid_base is filled by qEphem with the widget ID of the base qEphem widget
				; ephem_state.wid_send contains the widget ID to which qEphem will return events
				; ephem_state.send will store the event received from qEphem

				IF IsType(ephem_state,/undefined) THEN	$
					ephem_state = {qImage_cw_Ephem_state, $
						wid_base : 0L				  , $
						wid_send : state.wid_ephem	  , $
						on		 : 0				  , $
						update	 : 0				  , $
						pnt_nbody: 0				  , $
						pnt_name : ptr_new(/allocate) , $
						pnt_rr	 : ptr_new(/allocate) , $
						pnt_radec: ptr_new(/allocate) , $
						send	 : qEphem_State()	  , $
						sendold  : qEphem_State()	  }

				ephem_state.send.time = TimeSet(time[0])
				qEphem, group=event.handler, state=ephem_state

			END

			1: destroyvar, ephem_state

			ENDCASE
		END

		ENDCASE

		IF IsType(ephem_state,/defined) THEN BEGIN
			ephem_state.on = event.select
			widget_control, state.wid_ephem, set_uvalue=ephem_state, /no_copy
		ENDIF

	END

	1: BEGIN						; Event from qEphem widget

		widget_control, state.wid_ephem, get_uvalue=ephem_state, /no_copy
		ephem_state.sendold = ephem_state.send
		ephem_state.send	= event
		ephem_state.update	= event.on
		widget_control, state.wid_ephem, set_uvalue=ephem_state, /no_copy

		IF event.on EQ 0 THEN widget_control, state.wid_ephem, set_button=0

	END

	ENDCASE 

END

1: BEGIN

	widget_control, state.wid_ephem, get_uvalue=ephem_state, /no_copy
	qEphem, state=ephem_state, /update
	widget_control, state.wid_ephem, set_uvalue=ephem_state, /no_copy

END

ENDCASE

set_image_value = 1

RETURN, set_image_value  &  END
