;+
; Project     : SOHO - LASCO/EIT
;
; Name	      : WPLOT1
;
; Purpose     : plot
;
; Category    : Widgets
;
; Explanation : 
;
; Syntax      : wplot1
;
; Examples    :
;
; Inputs      : 
;
; Opt. Inputs : 
;
; Outputs     : 
;
; Opt. Outputs:
;
; Keywords    : 
;
; Common      : lasco.com, wload.com, wplot.com
;
; Restrictions: None.
;
; Side effects: None.
;
; History     : 15-jan-1993,Borut Podlipnik, MPAe,Written 
;
; Contact     : BP, borut@lasco1.mpae.gwdg.de
;-
;
 
PRO wplot1_event,event 

@lasco.com
@wload.com
@chandle.com
@wplot.com

COMMON block,ixmin,ixmax,src
COMMON wsave_ps_block, scr, def_ps, a4

 WIDGET_CONTROL,event.id,GET_UVALUE=uval
 WIDGET_CONTROL,event.top, GET_UVALUE=uvp
 
 WSET,uvp.pwin1


IF (event.id EQ event.handler) THEN BEGIN
 WIDGET_CONTROL,event.id,TIMER=.1
ENDIF ELSE BEGIN

 CASE uval OF 
     "PDMENU": BEGIN

                CASE event.value OF
        "Image.Load": BEGIN
                            f=wload()
                           END

      "Image.Save": BEGIN
                     msg = "Not avaliable yet!"
                     wmessage,title='Image Save',text=msg,xsize=25,ysize=2
                    END

      "Image.Save as": BEGIN
                     help,plot1
                     wsave2,image,name,head,2, plot1=plot1
                       END

      "Image.Print": BEGIN


           ps_name = GETENV('HOME') + !delimiter + 'wplot.ps'
;           xvaredit,ps_name
           set_plot,'PS'
           DEVICE,xsize=20,ysize=15,bits_per_pixel=8,$
                        filename=ps_name,/landscape

           IF plot1.over EQ 1 THEN BEGIN
            ghandle,sel_array(0)
            PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la
            ;oplot, [0.15, .3], [0.90,.90],line=i       
            ;XYOUTS, 0.15, .90, /NORMAL, name, FONT=1, size=.75
             
            FOR i=1,n_elements(sel_array)-1 DO BEGIN                             
             ghandle,sel_array(i)
             PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la,/over                               
             ;oplot, [0.15, 0.3], [.90-.025*i,.90-.025*i],line=i
             ;XYOUTS, 0.15, .90-.025*i, /NORMAL, name, FONT=1, size=.75            
            
            ;PLOT_XY,image,irc,ixmin,ixmax,iymin,iymax,text,slice,scale,/over
            ENDFOR
           ENDIF ELSE BEGIN
             PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la 
            ;PLOT_XY,image,irc,ixmin,ixmax,iymin,iymax,text,slice,scale
           ENDELSE
           
           DEVICE,/CLOSE
           set_plot,'X'

                    ;  wprint
                     END

      "Image.Exit": BEGIN

                     WIDGET_CONTROL, event.top, /DESTROY
                     GOTO,eod             

                    END
 

                  'Options.Profile': BEGIN
                            ; wplot_op
                            ;select = xfont()
                           END
                  'Print': BEGIN
 
                            ps_name = GETENV('HOME') + !delimiter + 'wplot.ps'

                            set_plot,'PS'
                            DEVICE,xsize=20,ysize=15,bits_per_pixel=8,$
                            filename=ps_name,/landscape
                            
                            IF plot1.over EQ 1 THEN BEGIN
                               ghandle,sel_array(0)
                               PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                                       plot1.iymin,plot1.iymax,plot1.title, $
				       plot1.src,plot1.la
			       ;plot,[ 0.15, .90], [0.3,.90],line=i  
                    	       ;XYOUTS, 0.30, .90, /NORMAL, name, FONT=1, size=.75
                                                                                                               
                               for i=1,n_elements(sel_array)-1 DO BEGIN
                                ghandle,sel_array(i)
                                PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                                       plot1.iymin,plot1.iymax,plot1.title, $
                                       plot1.src,plot1.la,/over,line=i
                               ;plot, [0.15, .90-.025*i], [0.3,.90-.025*i],line=i            
                               ;XYOUTS, 0.30, .90-.05*i, /NORMAL, name, FONT=1, size=.75 
                              
                              ENDFOR
                              ENDIF ELSE BEGIN
                               PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                                       plot1.iymin,plot1.iymax,plot1.title, $
                                       plot1.src,plot1.la 
                              ;PLOT_XY,image,irc,ixmin,ixmax,iymin,iymax,text,slice,scale
                              ENDELSE
           
                            DEVICE,/CLOSE
                            set_plot,'X'

                            spawn,'uname -n',uname
                            
                            CASE uname(0) of
                             'lasco1': dp = 1
                             'lasco2': dp = 1
                             'corona': dp = 1
                            ELSE: dp = 0
                            ENDCASE
                            
                            IF dp EQ 0 THEN BEGIN
                              wprint,filename = ps_name 
                            ENDIF ELSE BEGIN
                              spawn,'lp -dlasco ' + ps_name  
                            ENDELSE                        
                            
                           END
                  'Help':  BEGIN

                           END

                  'Done':  BEGIN 
                            ps_name = GETENV('HOME') + !delimiter + 'wplot.ps'
                            cmd = '/usr/bin/rm ' + ps_name
                            spawn,cmd
                            WIDGET_CONTROL, event.top, /DESTROY
                            GOTO,eod 
                           END
                ENDCASE

               END
 
          "LIN": scale = 'L'       ; Linear scale 
          "LOG": scale = 'A'       ; Log scale 
   
	  "LTR": BEGIN 
                  slice = 'ROW'     ; Left to Right  
                  src = string(var_arr(1)) 
                  WIDGET_CONTROL,uvp.rc, SET_VALUE = src 
                  WIDGET_CONTROL,uvp.p_x_max,SET_VALUE = STRCOMPRESS(string(sz(1)),/REMOVE_ALL)
                 END 
	  "BTT": BEGIN 
                  slice = 'COL'     ; Bottom to Top 
                  src = string(var_arr(0)) 
                  WIDGET_CONTROL,uvp.rc, SET_VALUE = src
                  WIDGET_CONTROL,uvp.p_x_max,SET_VALUE = STRCOMPRESS(string(sz(2)),/REMOVE_ALL)
                 END 
     "XA": BEGIN
            uvp.xyaf = 1 
            WIDGET_CONTROL,uvp.WplotBase, SET_UVALUE=uvp
           END
     "YA": BEGIN
            uvp.xyaf = 0
            WIDGET_CONTROL,uvp.WplotBase, SET_UVALUE=uvp
           END
     "RA": BEGIN
            uvp.xyaf = 2
            WIDGET_CONTROL,uvp.p_x_min, SET_VALUE = STRING(0)
            WIDGET_CONTROL,uvp.p_x_max, SET_VALUE = STRING(0)
            WIDGET_CONTROL,uvp.p_y_min, SET_VALUE = STRCOMPRESS(STRING(sz(1)),/REMOVE_ALL)
            WIDGET_CONTROL,uvp.p_y_max, SET_VALUE = STRCOMPRESS(STRING(sz(2)),/REMOVE_ALL)
            WIDGET_CONTROL,uvp.resb,SET_BUTTON=0
            WIDGET_CONTROL,uvp.WplotBase, SET_UVALUE=uvp
           END
   "SLICE": BEGIN
             WIDGET_CONTROL,uvp.rc, GET_VALUE = src
             IF slice EQ 'ROW' THEN var_arr(1) = src
             IF slice EQ 'COL' THEN var_arr(0) = src
            END

           "PS": out_win   = 'PS'      ; write Post Script file 
            "X": out_win   = !d.name       ; output to screen 

    "OVERPLOT":   plot1.over = 1										
      "SIPLOT":	  plot1.over = 0	
			 			
       "ON_OFF": BEGIN
                  CASE event.value OF
                   0: BEGIN
                       uvp.back = 1
                       WIDGET_CONTROL,uvp.WplotBase, SET_UVALUE=uvp
                       WIDGET_CONTROL,uvp.draw,TIMER=0
                      END
                   1: BEGIN
                       uvp.back = 0
                       WIDGET_CONTROL,uvp.WplotBase, SET_UVALUE=uvp
                      END
                  ENDCASE                   
                 END

        "PDRAW": BEGIN
                  WSET,uvp.pwin1
                  tn = Tag_Names( event, /STRUCTURE_NAME )
                  CASE tn OF
                   'WIDGET_TIMER':BEGIN
                                   IF uvp.back THEN BEGIN
                                    WIDGET_CONTROL,event.id,TIMER=.1
                                   ENDIF
                                  END
                   'WIDGET_DRAW': BEGIN
                       IF (event.press NE 0 ) THEN uvp.press = event.press
                       IF (event.release NE 0 ) THEN uvp.press = 0B
                       IF ( uvp.press NE 0 ) THEN BEGIN
                             x = 0 > event.x < 499
                             y = 0 > event.y < 399
                        CASE uvp.press OF
                            1B: BEGIN ; ** Left mouse button **
                                CASE uvp.xyaf OF
                                 1: BEGIN ; x-axis
                                     d=convert_coord([x,x],/DEVICE,/TO_DATA) 
                                     ixmin = d(0,0)
                                     WIDGET_CONTROL,uvp.p_x_min,SET_VALUE=STRING(ixmin)
                                    END
                                 0: BEGIN ; y-axis
                                     d=convert_coord([x,x],[y,y],/DEVICE,/TO_DATA) 
                                     iymin = d(1,0)
                                     WIDGET_CONTROL,uvp.p_y_min,SET_VALUE=STRING(iymin)
                                    END
                                  ELSE: donothing = 0
                                 ENDCASE     
                             END
                         2B: BEGIN ; ** Middle mouse button **
                              x1=0
                              y1=0
                              box_cursor,/INIT,x,y,x1,y1
                              x1 = x + x1
                              y1 = y + Y1
                              d=convert_coord([x,x1],[y,y1],/DEVICE,/TO_DATA)
	                           ixmin = d(0,0) & ixmax = d(0,1)
                              iymin = d(1,0) & iymax = d(1,1)
                              WIDGET_CONTROL,uvp.p_x_min, SET_VALUE = STRING(ixmin)
                              WIDGET_CONTROL,uvp.p_x_max, SET_VALUE = STRING(ixmax)
                              WIDGET_CONTROL,uvp.p_y_min, SET_VALUE = STRING(iymin)
                              WIDGET_CONTROL,uvp.p_y_max, SET_VALUE = STRING(iymax)
                             END
                         4B: BEGIN ; ** Right mouse button
                              CASE uvp.xyaf OF
                               1: BEGIN  ;** x-axsis
                                   d=convert_coord([x,x],/DEVICE,/TO_DATA)
                                   ixmax = d(0,0)
                                   WIDGET_CONTROL,uvp.p_x_max,SET_VALUE=STRING(ixmax)
                                  END
                               0: BEGIN  ;** y-axis
                                   d=convert_coord([x,x],[y,y],/DEVICE,/TO_DATA)
                                   iymax = d(1,1)
                                   WIDGET_CONTROL,uvp.p_y_max,SET_VALUE=STRING(iymax)
                                  END
                               ELSE: donothing = 0
                               ENDCASE 
                             END

                        ENDCASE
                       ENDIF
                      END

                  ENDCASE
                 END
                   
 ELSE:   donothing=0  
 ENDCASE

ENDELSE
        WSET,uvp.pwin1
        out_back = !d.name
        sz = size(image)

        if sz(0) eq 0 then goto,eod

        IF slice EQ 'ROW' THEN src = string(var_arr(1)) 
        IF slice EQ 'COL' THEN src = string(var_arr(0)) 

        WIDGET_CONTROL,uvp.rc, SET_VALUE = src 
        WIDGET_CONTROL,uvp.p_title, GET_VALUE = text
        text = text(0)
        WIDGET_CONTROL,uvp.p_x_min, GET_VALUE = ixmin
        WIDGET_CONTROL,uvp.p_x_max, GET_VALUE = ixmax
        WIDGET_CONTROL,uvp.p_y_min, GET_VALUE = iymin
        WIDGET_CONTROL,uvp.p_y_max, GET_VALUE = iymax
        WIDGET_CONTROL,uvp.rc, GET_VALUE = src
	ixmin=FLOAT(STRING(ixmin(0)))
	ixmax=FLOAT(STRING(ixmax(0)))
	iymin=FLOAT(STRING(iymin(0)))
	iymax=FLOAT(STRING(iymax(0)))

        if max(image) lt 1.0 then iymax = max(image)
        irc = fix(src(0))
        if irc lt 0 then irc = 0
        if slice eq 'ROW' and irc gt sz(1)-1+h.r1col-1 then $
           irc = sz(1)-1+h.r1col-1
        if slice eq 'COL' and irc gt sz(2)-1+h.r1row-1 then $
           irc = sz(2)-1+h.r1row-1

        plot1.ixmin = ixmin & plot1.ixmax = ixmax
        plot1.iymin = iymin & plot1.iymax = iymax
        plot1.irc = irc
        plot1.src = slice
        plot1.la  = scale
        plot1.title = text

        IF plot1.over EQ 1 THEN BEGIN
             i=0
             ghandle,sel_array(i)
             PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la

             ;oplot, [0.15,0.30], [.90-.025*i,.90-.025*i],line=i
                         
             ;XYOUTS, 0.30, .90-.025*i, /NORMAL, name, FONT=1, size=.75
            for i=1,n_elements(sel_array)-1 DO BEGIN
             ghandle,sel_array(i)
             PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la,/over,line=i
    
             ;oplot, [0.15, .3], [.90-.025*i,.90-.025*i],line=i
             ;oplot,[0.,1.0],[0.5,.5] 
             ;XYOUTS, 0.30, .90-.025*i, /NORMAL, name, FONT=1, size=.75

            ENDFOR
       ENDIF ELSE BEGIN
             PLOT_XY,image,plot1.irc,plot1.ixmin,plot1.ixmax, $
                   plot1.iymin,plot1.iymax,plot1.title, $
                   plot1.src,plot1.la 
       ENDELSE
           
           xrange = !X.CRANGE &  yrange = !Y.CRANGE
           ixmin = xrange(0) & ixmax = xrange(1)
           iymin = yrange(0) & iymax = yrange(1) 

           IF !Y.TYPE EQ 1 THEN BEGIN
             iymin = 10^iymin & iymax = 10^iymax
           ENDIF
  
           WIDGET_CONTROL,uvp.p_x_min, SET_VALUE = STRCOMPRESS(STRING(ixmin),/REMOVE_ALL)
           WIDGET_CONTROL,uvp.p_x_max, SET_VALUE = STRCOMPRESS(STRING(ixmax),/REMOVE_ALL)
           WIDGET_CONTROL,uvp.p_y_min, SET_VALUE = STRCOMPRESS(STRING(iymin),/REMOVE_ALL)
           WIDGET_CONTROL,uvp.p_y_max, SET_VALUE = STRCOMPRESS(STRING(iymax),/REMOVE_ALL)
;        endelse

eod:
END 
 
 
PRO wplot1,GROUP=GROUP

@lasco.com
@wload.com
@chandle.com
@wplot.com

COMMON block,ixmin,ixmax,src
COMMON wsave_ps_block, scr, def_ps, a4

;IF (XRegistered("wplot1") NE 0) THEN RETURN 
 
if n_elements(image) eq 0 then f=wload()
sz = size(image) 
if n_elements(var_arr) eq 0 then var_arr = intarr(20) 
if n_elements(ixmin) eq 0 then ixmin=0.0
if n_elements(ixmax) eq 0 then ixmax=FLOAT(sz(1))
if n_elements(iymin) eq 0 then iymin=0.0
if n_elements(iymax) eq 0 then iymax=FLOAT(sz(2))

if n_elements(press) eq 0 then press=0

IF N_ELEMENTS ( def_ps ) EQ 0 THEN def_ps = [ 1,0,0,8,20,15,3.5,21.5]
                                  ;def_ps = [ 0.0  ; portrait (pl), $
                                  ;           0.0  ; non-encapsulated (ec), $
                                  ;           1.0  ; color on (co), $
                                  ;           8.0  ; bits_per_pixel (bpp), $
                                  ;          15.0  ; xcm , $
                                  ;          15.0  ; ycm, $
                                  ;           3.5  ; x offset, $
                                  ;           7.5  ; y offset ]

 
WPlotBase = WIDGET_BASE(TITLE = "LASCO Plots",/ROW) 
lcol     = WIDGET_BASE(WPlotBase, /FRAME, /COLUMN) 
rcol     = WIDGET_BASE(WPlotBase, /FRAME, /COLUMN) 

junk = { CW_PDMENU_P, flags:0, name:'' }
over = 0 ; Set overplot status to false.

pdm_desc = [ { CW_PDMENU_P, 1, 'Image' }, $
                { CW_PDMENU_P, 0, 'Load' },  $
                { CW_PDMENU_P, 0, 'Save' },  $
                { CW_PDMENU_P, 0, 'Save as' },  $
                { CW_PDMENU_P, 0, 'Print' },  $
                { CW_PDMENU_P, 2, 'Exit' },  $
;             { CW_PDMENU_S, 0, 'Info' },  	$
             { CW_PDMENU_P, 1, 'Options' }, $
             { CW_PDMENU_P, 2, 'Profile' }, $             
             { CW_PDMENU_P, 0, 'Print'}, $
             { CW_PDMENU_P, 0, 'Help' }, $
             { CW_PDMENU_P, 0, 'Done' } ]

menu = CW_PDMENU(lcol, pdm_desc, UVALUE='PDMENU', /RETURN_FULL_NAME)
 
;Two-button toggle switch for Scaling 
lcol2      = WIDGET_BASE(lcol,/FRAME, /COLUMN)  
scale_base = WIDGET_BASE(lcol2,/ROW, /EXCLUSIVE) 
scale_lin  = WIDGET_BUTTON(scale_base ,VALUE='Linear', $ 
                           UVALUE='LIN', /NO_RELEASE) 
scale_log  = WIDGET_BUTTON(scale_base ,VALUE='Logarithmic', $ 
                           UVALUE='LOG', /NO_RELEASE) 
 
;Two-button toggle switch for Slice 
slice_base = WIDGET_BASE(lcol2,/ROW, /EXCLUSIVE) 
slice_lr   = WIDGET_BUTTON(slice_base ,VALUE='Left to Right', $ 
                           UVALUE='LTR', /NO_RELEASE) 
slice_bt   = WIDGET_BUTTON(slice_base ,VALUE='Bottom to Top', $ 
                           UVALUE='BTT', /NO_RELEASE) 
;
; Create 4 editable WIDGET_TEXT for scale input
; 
lcols      = WIDGET_BASE(lcol,/FRAME, /COLUMN) 
 
minvalue = '0'
maxvalue = sz(1) 
 
sxmin  = STRCOMPRESS(string(minvalue),/REMOVE_ALL)
sxmax  = STRCOMPRESS(string(maxvalue),/REMOVE_ALL)

b_x_min    = WIDGET_BASE(lcols,/ROW)
p_x_lab    = WIDGET_LABEL(b_x_min,VALUE='X min range :')
p_x_min    = WIDGET_TEXT(b_x_min,XSIZE=12,/EDITABLE,VALUE=sxmin, $
                         UVALUE='XMIN')

b_x_max    = WIDGET_BASE(lcols,/ROW)
p_x_lab    = WIDGET_LABEL(b_x_max,VALUE='X max range :')
p_x_max    = WIDGET_TEXT(b_x_max,XSIZE=12,/EDITABLE,VALUE=sxmax, $
                         UVALUE='XMAX')

minvalue = min(image)
maxvalue = max(image)
symin  = STRCOMPRESS(STRING(FLOAT(minvalue)),/REMOVE_ALL)
symax  = STRCOMPRESS(STRING(FLOAT(maxvalue)),/REMOVE_ALL)

b_y_min    = WIDGET_BASE(lcols,/ROW)
p_y_lab    = WIDGET_LABEL(b_y_min,VALUE='Y min range :')
p_y_min    = WIDGET_TEXT(b_y_min,XSIZE=12,/EDITABLE,VALUE=symin, $
                         UVALUE='YMIN')

b_y_max    = WIDGET_BASE(lcols,/ROW)
p_y_lab    = WIDGET_LABEL(b_y_max,VALUE='Y max range :')
p_y_max    = WIDGET_TEXT(b_y_max,XSIZE=12,/EDITABLE,VALUE=symax, $
                         UVALUE='YMAX')
;
; Two-button toggle switch for axis selection
;
s_base = WIDGET_BASE(lcols,/ROW, /EXCLUSIVE) 
xaxisb = WIDGET_BUTTON(s_base ,VALUE='X-axis', $ 
                           UVALUE='XA', /NO_RELEASE) 
yaxisb = WIDGET_BUTTON(s_base ,VALUE='Y-axis', $ 
                           UVALUE='YA', /NO_RELEASE) 
resetb = WIDGET_BUTTON(s_base ,VALUE='Reset axis', $ 
                           UVALUE='RA') 
;
; Create one  WIDGET_TEXT for slice input 
;
if var_arr(0) eq 0 then var_arr(0) = sz(1)/2 
if var_arr(1) eq 0 then var_arr(1) = sz(2)/2

sl =string( var_arr(1) ) 
 
lcol3  = WIDGET_BASE(lcol, /FRAME,/ROW) 
sliceb = WIDGET_BASE(lcol3, /ROW) 
w5 = WIDGET_BASE(sliceb, /ROW) 
w15 = WIDGET_LABEL(w5,VALUE = 'Slice       :') 
rc = WIDGET_TEXT(w5,XSIZE=12,YSIZE=1,/EDITABLE, VALUE=sl,UVALUE='SLICE') 
 
;Two-button toggle switch for Output 
 
;lcol4    = WIDGET_BASE(lcol, /FRAME, /COLUMN) 
 
;out_base = WIDGET_BASE(lcol4,/ROW, /EXCLUSIVE) 
;out_X    = WIDGET_BUTTON(out_base ,VALUE='Win', $ 
;                           UVALUE='X', /NO_RELEASE) 
;out_PS   = WIDGET_BUTTON(out_base ,VALUE='PostScript', $ 
;                           UVALUE='PS', /NO_RELEASE) 

;
; Create ON, OFF button
;
on_off = [ " ON  "," OFF " ]
woo = WIDGET_BASE(lcol, /FRAME, /ROW)
loo = WIDGET_LABEL(woo, VALUE = " Profiles: ") 
sof = CW_BSELECTOR2(woo, on_off, SET_VALUE=1, UVALUE='ON_OFF')

;Add an Overplot Button
opbase = WIDGET_BASE(lcol, /ROW, /FRAME, /EXCLUSIVE)
opbutton = WIDGET_BUTTON(opbase, VALUE = 'Over Plot', UVALUE = 'OVERPLOT', /NO_RELEASE)
sibutton = WIDGET_BUTTON(opbase, VALUE = 'Single Plot', UVALUE = 'SIPLOT', /NO_RELEASE)

;
; Create DRAW , LABEL, TEXT WIDGET
;
 
drawbase = WIDGET_BASE(rcol,/COLUMN) 
draw = WIDGET_DRAW(drawbase,Xsize=500,Ysize=400, UVALUE="PDRAW", /BUTTON) 
 
winbase = WIDGET_BASE(rcol, /ROW) 
w5 = WIDGET_BASE(winbase, /ROW) 
w15 = WIDGET_LABEL(w5,VALUE = 'Title : ') 
p_title = WIDGET_TEXT(w5,XSIZE=45,YSIZE=1,/EDITABLE, $
                      VALUE=name,UVALUE='setrc') 

;*-------------------- Done Creating Widgets --------------------*
 
WIDGET_CONTROL, WPlotBase, /REALIZE 

WIDGET_CONTROL, draw,GET_VALUE = win_wplot_id 
WSET,win_wplot_id 

WIDGET_CONTROL, slice_lr, /SET_BUTTON 
slice = 'ROW' 
 
WIDGET_CONTROL, scale_lin, /SET_BUTTON 
scale = 'L' 
 
src = string(var_arr(1)) 

;WIDGET_CONTROL, out_X, /SET_BUTTON 
out_win = !d.name 

WIDGET_CONTROL,xaxisb,/SET_BUTTON
xya_flag = 1

WIDGET_CONTROL, sibutton, /SET_BUTTON 

press = 0
;
; Create a structure that will be carried around as the UVALUE of the WplotBase
;

Wpbv = { WplotBase:WplotBase,      $ ; Base WIDGET ID
         draw:draw,                $
         pwin1:win_wplot_id,        $ ; Window ID
         rc:rc,                    $
         p_title:p_title,          $
         p_x_min:p_x_min,          $
         p_x_max:p_x_max,          $
         p_y_min:p_y_min,          $
         p_y_max:p_y_max,          $
         press:press,              $
         back:0,                   $
         xyaf:xya_flag,            $
         resb:resetb               $
       }         

WIDGET_CONTROL,WplotBase, SET_UVALUE= Wpbv
;WIDGET_CONTROL,WplotBase,TIMER=.1

plot1 = { ixmin:ixmin, $ ; xrange min
          ixmax:ixmax, $ ; xrange max
          iymin:iymin, $ ; yrange min
          iymax:iymax, $ ; yrange max
          irc:sl,      $ ; row or col from cursor position or from input
          src:slice,   $ ; string 'ROW' or 'COL'
          la:scale,    $   ; string 'L' for log scale 
          title:name,  $
          over:over }
 
XMANAGER,"wplot1",WPlotBase, $ 
                EVENT_HANDLER = "wplot1_event", $ 
                GROUP_LEADER = GROUP 
 
END 
