pro goes_mark, item,  guval, startt=startt, stopt=stopt
; Keyword Parameters:
;   startt - draw a start time
;   stopt  - draw s stop time
;    
; ----------------------------
rmap=get_wuvalue(guval.draw)

gwind=get_wvalue(guval.draw)
wset,gwind

restsys,/aplot

device,get_graphics_function=gftemp
device,set_graphics_function=6		; SOURCE XOR DESTINATION
yrange=[0.156250,0.921875]		; kludge for 3 second (log)

; get old values, if any defined		; erase by re-write
last_mark=get_wuvalue(guval.slidelabel)
last_start=get_wuvalue(guval.startslide)
last_stop=get_wuvalue(guval.stopslide)

case 1 of
   keyword_set(startt) and (fmt_tim(last_start) ne fmt_tim(item)): begin
     if keyword_set(last_start) then $
         evt_grid,last_start,/label,/align,yrange=yrange,labpos=.85,  $
            thick=2,lines=3
     evt_grid, item,/label,/align,thick=2,labpos=.85, yrange=yrange,lines=3
     widget_control, set_uvalue=item, guval.startslide
   endcase

   keyword_set(stopt) and (fmt_tim(last_stop) ne fmt_tim(item)): begin
      if keyword_set(last_stop) then $
         evt_grid,last_stop,/label,align=0,yrange=yrange,labpos=.85,  $
            lines=3, thick=2
      evt_grid,item,/label,align=0,yrange=yrange,thick=2, labpos=.85,lines=3
      widget_control, set_uvalue=item, guval.stopslide
   endcase

   (fmt_tim(last_mark) ne fmt_tim(item)): begin
      if keyword_set(last_mark) then begin
         evt_grid,last_mark, ticklen=.1,/arrow,tickpos=.85
         evt_grid,last_mark,yrange=yrange 
      endif
      evt_grid,item, ticklen=.1,/arrow,tickpos=.85
      evt_grid,item,yrange=yrange
      widget_control,set_uvalue=item, guval.slidelabel
   endcase
   else: 
endcase

widget_control,set_uvalue=guval, guval.base
device,set_graphics_function=gftemp

return
end

pro goes_slider_event,event

top=get_wuvalue(event.top)
puval=get_wuvalue(top.master_base)
rmap=get_wuvalue(top.draw)

curstart=get_wvalue(top.startslide)
curstop =get_wvalue(top.stopslide) 

if curstart le curstop then begin
   goes_mark, rmap(event.value), top, $ 
      startt=(event.id eq top.startslide), stopt=(event.id eq top.stopslide)
   ss=sel_timrange(rmap,rmap(curstart),rmap(curstop),/between)
   xspr_newss,ss
   mapx, puval.dispbuts,/map,/show,sens=[0,1,0]
endif

return
end

pro goes_widget_event,event

top=get_wuvalue(event.top)
val=strupcase(get_wvalue(event.id))
curdata=get_wuvalue(top.draw)
puval=get_wuvalue(top.master_base)

curimg=get_wuvalue(top.slidelabel)
if not keyword_set(curimg) then curimg=curdata(0)

plotit=1
case val of
   'FILL SAA': top.fill_saa=event.select
   'FILL NIGHT':top.fill_night=event.select
   '3 SEC': top.three_sec=event.select
   '1 MIN': top.three_sec=1-event.select
   'LOW':   top.low_energy=event.select
   'HIGH':  top.high_energy=event.select

   'CURRENT -> START': begin
      plotit=0
      goes_mark, curimg, top, /startt               
      widget_control,set_uvalue=curimg,top.startslide
   endcase

   'CURRENT -> STOP': begin
      plotit=0
      goes_mark, curimg, top, /stopt
      widget_control,set_uvalue=curimg,top.stopslide
   endcase
   else:
endcase

curstart=get_wuvalue(top.startslide)
curstop=get_wuvalue(top.stopslide)

ss=sel_timrange(curdata,curstart,curstop,/between)
xspr_newss,ss
mapx, puval.dispbuts,/map,/show,sens=[0,1,0]

widget_control, set_uvalue=top, event.top

; ------------------------ redraw plot -----------------
if plotit then goes_draw,curdata, event.top
; --------------------------------------------------------

return
end

pro goes_draw_event,event

@xstepper.common		;*********

widget_control, get_value=val, event.id

if event.type eq 0 then begin
   top=get_wuvalue(event.top)
   rmap=get_wuvalue(top.draw)
   get_utevent,t0,t1,/ut
   xynn=lonarr(2,n_elements(rmap)) 
   xynn(0,*)= int2secarr(rmap,t0)
   deltax= abs((convert_coord(xynn,/data,/to_device))(0,*) - event.x)
   which = where(deltax eq min(deltax))
   current=which(0)
   dtemp=delta 
   delta=0
   xspr_update_img,top.master_base,/nogoes
   delta=dtemp
   goes_mark,rmap(which), top
endif

return
end

pro goes_draw, rmap, goesbase, fillsaa=fillsaa, fillnight=fillnight, three=three
 
guval=get_wuvalue(goesbase)
gwind=get_wvalue(guval.draw)
puval=get_wuvalue(guval.master_base)

wset,gwind

rmap=sort_index(rmap)
nmap=n_elements(rmap)

; goes plot window
fmt_timer,rmap,t0,t1
strt=timegrid(t0,min= -30)
stp =timegrid(t1,min= 30)

device,set_graphics=3
; -------------- plot the goes data -----------------
plot_goes, strt, stp, three=guval.three_sec, status=status, $
   lo=guval.low_energy, hi=guval.high_energy, timerange=[strt,stp]
savesys,/aplot

if not status then begin
   message,/info,"No GOES data corresponding to these SPR times, using WBS/SXS1
   get_utevent,fmt_tim(strt),fmt_tim(stp), wbs,/wbs
   utplot,  wbs, wbs.wbs_sxs1, timerange=[strt,stp], $
      title="WBS SXS1 (No GOES for Period)", /nodata
   outplot, wbs, wbs.wbs_sxs1
   savesys,/aplot
endif

fem_grid, fillsaa=guval.fill_saa, fillnight=guval.fill_night, $
   scolor=guval.saa_col, ncolor=guval.night_col

evt_grid,rmap,tickpos=.75,ticklen=.02,color=200
; --------------------------------------------

; now set widget values
widget_control,set_uvalue=rmap,guval.draw
widget_control,set_slider_max=nmap-1,set_value=0,guval.startslide
widget_control,set_slider_max=nmap-1,guval.stopslide
widget_control,set_value=nmap-1, guval.stopslide

widget_control, set_uvalue='', guval.startslide
widget_control, set_uvalue='', guval.stopslide
widget_control, set_uvalue='', guval.slidelabel

widget_control, set_uvalue=guval, guval.base

goes_mark, rmap(0), guval, /startt

goes_mark, rmap(nmap-1), guval, /stopt

return
end

function goes_widget, xsize, ysize
;
;+
;
;   Name: goes_widget
;
;   Purpose: allow GOES data display and time definitions for dbase access
;
;   History:
;      10-apr-1995 (SLF)
;      23-may-1995 (SLF) - allow 'interupts' which change window (like xloadct)
;
;-

;
if n_elements(xsize) eq 0 then xsize=512
if n_elements(ysize) eq 0 then ysize=256

base=widget_base(/column,title='GOES LIGHT CURVE')
b1=widget_base(/row,base)

xmenu2,['3 SEC','1 MIN'],b1,buttons=goes_type,/ex,/row,/frame
xmenu2,['Low','High'], b1,buttons=goes_energy,/nonex,/row,/frame
xmenu2,['Fill Night','Fill SAA'],b1, buttons=goes_menu,/nonex,/row,/frame

goes_draw=widget_draw(base,/button_events,xsize=xsize,ysize=ysize, $
     event_pro='goes_draw_event')

sbase=widget_base(base,/column,/frame)
slabel=widget_label(sbase,value='Image Range Selection')
xmenu2,['Current -> Start','Current -> Stop'],sbase, buttons=range,/frame,/row
start_slide=widget_slider(sbase,/drag,title='Start Image')
stop_slide =widget_slider(sbase,/drag,title='Stop Image')

goes_top={base:base,		  $
	  base1:b1,		  $
          type:goes_type,	  $ 
          menu:goes_menu,	  $
          energy:goes_energy,	  $
          startslide:start_slide, $ 
          slidebase:sbase,	  $
          slidelabel:slabel,	  $
          stopslide:stop_slide,	  $
	  draw:goes_draw,	  $
          range:range,		  $
	  low_energy:1l,	  $
          high_energy:0l,	  $
          three_sec:1l,		  $
          fill_saa:0l,		  $
          fill_night:1l,	  $
          saa_col:160,	          $
          night_col:160,	  $
          master_base:0L	  }	; base wid of 'parent' application

; ------------- set button to match plot defaults ------------------
;xmenu2,['3 SEC','1 MIN'],b1,buttons=goes_type,/ex,/row,/frame
;xmenu2,['Low','High'], b1,buttons=goes_energy,/nonex,/row,/frame
;xmenu2,['Fill Night','Fill SAA'],b1, buttons=goes_menu,/nonex,/row,/frame
widget_control,goes_type(0),set_button=1
widget_control,goes_type(1),sensitive=0	; inhibit 1 minute for now
widget_control,goes_energy(0),set_button=1
widget_control,goes_menu(0), set_button=1
; --------------------------------------------------------------

; -------------------------------------------------
; intialize some uvalues
widget_control, set_uvalue='', goes_top.startslide	; start range
widget_control, set_uvalue='', goes_top.stopslide	; stop range
widget_control, set_uvalue='', goes_top.slidelabel	; current item
widget_control, set_uvalue=goes_top, base
; --------------------------------------------------

return, base

end         		

