;+
; Project     : SOHO - LASCO/EIT
;
; Name	      : WLINES
;
; Purpose     : plot scan lines
;
; Category    : Widgets
;
; Explanation : 
;
; Syntax      : wlines
;
; Examples    :
;
; Inputs      : 
;
; Opt. Inputs : 
;
; Outputs     : 
;
; Opt. Outputs:
;
; Keywords    : 
;
; Common      : lasco.com, wload.com, wplot.com
;
; Restrictions: None.
;
; Side effects: None.
;
; History     : 21-feb-1996,Borut Podlipnik, MPAe,Written 
;
; Contact     : BP, borut@lasco1.mpae.gwdg.de
;-
;
 
PRO wlines_event,event 

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

COMMON lines_block,plots
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
                     msg = "Not avaliable yet!"
                     wmessage,title='Image Save',text=msg,xsize=25,ysize=2
                     
                    ; wsave2,image,head,2, plots=plots
                       END

      "Image.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

           PLOT_SCAN,var_arr(0),var_arr(1),plots.ixmin,plots.ixmax, $
                   plots.iymin,plots.iymax,plots.title

           DEVICE,/CLOSE
           set_plot,'X'

                    ;  wprint
                     END

      "Image.Exit": BEGIN

                     WIDGET_CONTROL, event.top, /DESTROY
                     GOTO,eod             

                    END
 

                  'Fonts': BEGIN
                            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

           PLOT_SCAN,var_arr(0),var_arr(1),plots.ixmin,plots.ixmax, $
                   plots.iymin,plots.iymax,plots.title                   

           DEVICE,/CLOSE
           set_plot,'X'

                            wprint
                           END
                  'Help':  BEGIN

                           END

                  'Done':  BEGIN 
                            WIDGET_CONTROL, event.top, /DESTROY
                            GOTO,eod 
                           END
                ENDCASE

               END
   
     "XA": BEGIN
            uvp.xyaf = 1 
            WIDGET_CONTROL,uvp.WLineBase, SET_UVALUE=uvp
           END
     "YA": BEGIN
            uvp.xyaf = 0
            WIDGET_CONTROL,uvp.WLineBase, 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.WLineBase, SET_UVALUE=uvp
           END
   "X": BEGIN
             WIDGET_CONTROL,uvp.rcx, GET_VALUE = src
              var_arr(0) = src
             END
   "Y": BEGIN
             WIDGET_CONTROL,uvp.rcy, GET_VALUE = src
              var_arr(1) = src
            END

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

       "ON_OFF": BEGIN
                  CASE event.value OF
                   0: BEGIN
                       uvp.back = 1
                       WIDGET_CONTROL,uvp.WLineBase, SET_UVALUE=uvp
                       WIDGET_CONTROL,uvp.draw,TIMER=0
                      END
                   1: BEGIN
                       uvp.back = 0
                       WIDGET_CONTROL,uvp.WLineBase, 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

        srcx = string(var_arr(0)) 
        srcy = string(var_arr(1)) 

        WIDGET_CONTROL,uvp.rcx, SET_VALUE = srcx 
        WIDGET_CONTROL,uvp.rcy, SET_VALUE = srcy 

        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.rcx, GET_VALUE = srcx
        WIDGET_CONTROL,uvp.rcy, GET_VALUE = srcy 

	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)
        var_arr(0) = fix(srcx(0))
        var_arr(1) = fix(srcy(0))

        plots.ixmin = ixmin & plots.ixmax = ixmax
        plots.iymin = iymin & plots.iymax = iymax
        plots.title = text

        PLOT_SCAN,var_arr(0),var_arr(1),ixmin,ixmax,iymin,iymax,text

        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)

eod:
END 
 
 
PRO wlines,GROUP=GROUP

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

COMMON lines_block,plots
COMMON wsave_ps_block, scr, def_ps, a4

IF (XRegistered("wlines") 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
if n_elements(ixmax) eq 0 then ixmax=sz(1)
if n_elements(iymin) eq 0 then iymin=0
if n_elements(iymax) eq 0 then iymax=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 ]

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

junk = { CW_PDMENU_P, flags:0, name:'' }

pdm_desc = [{ CW_PDMENU_P, 0, 'Fonts' }, $
              ;{ 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, 0, 'Fonts' }, $
             { 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)

;
; 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 = 'X :') 
rcx = WIDGET_TEXT(w5,XSIZE=12,YSIZE=1,/EDITABLE, VALUE=sl,UVALUE='X') 

w5 = WIDGET_BASE(sliceb, /ROW) 
w15 = WIDGET_LABEL(w5,VALUE = 'Y :') 
rcy = WIDGET_TEXT(w5,XSIZE=12,YSIZE=1,/EDITABLE, VALUE=sl,UVALUE='Y') 
 
on_off = [ " On line  "," Off line " ]
woo = WIDGET_BASE(lcol, /FRAME, /ROW)
;loo = WIDGET_LABEL(woo, VALUE = " On line: ") 
sof = CW_BSELECTOR2(woo, on_off, SET_VALUE=1, UVALUE='ON_OFF')


;
; 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, WLineBase, /REALIZE 

WIDGET_CONTROL, draw,GET_VALUE = win_wplot_id 
WSET,win_wplot_id 
 
src = string(var_arr(1)) 

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

WIDGET_CONTROL,xaxisb,/SET_BUTTON
xya_flag = 1
 
press = 0
;
; Create a structure that will be carried around as the UVALUE of the WLineBase
;

Wpbv = { WLineBase:WLineBase,      $ ; Base WIDGET ID
         draw:draw,                $
         pwin1:win_wplot_id,        $ ; Window ID
         rcx:rcx,                    $
         rcy:rcy,                    $
         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,WLineBase, SET_UVALUE= Wpbv
;WIDGET_CONTROL,WLineBase,TIMER=.1

plots = { 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 }
 
XMANAGER,"wlines",WLineBase, $ 
                EVENT_HANDLER = "wlines_event", $ 
                GROUP_LEADER = GROUP 
 
END 
