;******************************************************************************
;* File name: ql_iclic_trt.pro                                                *
;*                                                                            *
;* Content  : 	ql_upd_clmli_val                                              *
;*              ql_upd_iext_val                                               *
;*              ql_upd_icut_val                                               *
;*              ql_upd_ilid_val                                               *
;*            	ql_curr_i_info_event                                          *
;*		ql_curr_i_info                                                *
;*		ql_extract_cut                                                *
;*		ql_iclic_trt                                                  *
;*                                                                            *
;*                                                                            *
;* Date		Author		Comment                                       *
;* -------------------------------------------------------------------------- *
;* 10-01-94	E.PETIT		Creation                                      *
;* 18-01-94	E.PETIT	   	Add display control structure & management    *
;* 02-02-94	E.PETIT	   	Display banner management                     *
;* 14-02-94	E.PETIT	   	Add Line Id management                        *
;* 24-02-94	E.PETIT	   	New image /profile format                     *
;* 28-02-94	E.PETIT	   	negative data value remove '-' sign           *
;*                              replace cursor call                           *
;* 01-03-94	E.PETIT	   	Add cut processing                            *
;* 10-03-94	E.PETIT	   	Add extim  processing                         *
;* 10-03-94	E.PETIT	   	BUG                                           *
;* 17-03-94	E.PETIT	   	SPR 29                                        *
;* 24-03-94	E.PETIT	   	log scale                                     *
;* 13-04-94	E.PETIT	   	remove discret format                         *
;* 18-04-94	E.PETIT	   	Add min/max                                   *
;* 10-05-94     J.PETIT         add slit angle                                *
;* 18-05-94  	E.PETIT		Enhance box size                              *
;* 24-05-94  	E.PETIT		Data value display                            *
;* 22-08-94  	E.PETIT		Manual Wavelength calibration                 *
;* 09-01-95  	E.PETIT		info window size                              *
;*                                                                            *
;******************************************************************************

;***
;##############################################################################
;#Function  name   : ql_upd_clmli_val                                         #
;#LEVEL            : 2                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Update coordinate of line id                             #
;#Creation date    : 22-08-94                                                 #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_upd_clmli_val, x, y, xdev, ydev, ev, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON widget_id_com
  COMMON curr_data_i_com
  COMMON line_com
  COMMON const_com
  COMMON clml_com
  COMMON color_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0

  ;============================================================================
  ;                       Processing 
  ;============================================================================

  IF ( ((x GE curr_dctrl_i.x.plot_min ) AND (x LE curr_dctrl_i.x.plot_max) ) AND $
       ((y GE curr_dctrl_i.y.plot_min ) AND (y LE curr_dctrl_i.y.plot_max) )     $
     ) THEN BEGIN     
    ql_refresh, IMAGE  , err

    PLOTS, [x, x], [curr_dctrl_i.y.plot_min,curr_dctrl_i.y.plot_max] , /DATA, COLOR=yellow

    WIDGET_CONTROL, clmli_wl_lbl, SET_VALUE=STRING(x, FORMAT = '(F8.3)')

    IF (EV.PRESS EQ 1) THEN BEGIN
      ql_get_line_ind, x, line_index, err		; Get index in ref tbl
      IF (err EQ 0) THEN BEGIN              		; Founded
        l = line_index
        IF (line_index GE 3) THEN  l = line_index-3
        WIDGET_CONTROL,ref_l_list, SET_LIST_TOP=l, SET_LIST_SELECT=line_index
      
        CASE clmli_state  OF
          1: BEGIN	; Get first line
               clmli_state = 11
               mli_old_l1  = x
               WIDGET_CONTROL, clmli_idw1_txt, SET_VALUE= STRING(line_lst(line_index).lambda,FORMAT='(F8.3)')
               WIDGET_CONTROL, clmli_idw1_lbl, SET_VALUE = ' ( '+STRTRIM(line_lst(line_index).line_name,2) + ' )'
               WIDGET_CONTROL, clmli_cancel, SENSITIVE = 0
               WIDGET_CONTROL, clmli_valid , SENSITIVE = 1
             END
          11: BEGIN	; Get first line
               mli_old_l1  = x
               WIDGET_CONTROL, clmli_idw1_txt, SET_VALUE= STRING(line_lst(line_index).lambda,FORMAT='(F8.3)')
               WIDGET_CONTROL, clmli_idw1_lbl, SET_VALUE = ' ( '+STRTRIM(line_lst(line_index).line_name,2) + ' )'
             END
          2: BEGIN	; Get Second line
               clmli_state = 22
               mli_old_l2  = x
               WIDGET_CONTROL, clmli_idw2_txt, SET_VALUE= STRING(line_lst(line_index).lambda,FORMAT='(F8.3)')
               WIDGET_CONTROL, clmli_idw2_lbl, SET_VALUE = ' ( '+STRTRIM(line_lst(line_index).line_name,2) + ' )'
               WIDGET_CONTROL, clmli_cancel, SENSITIVE = 0
               WIDGET_CONTROL, clmli_valid , SENSITIVE = 1
             END
          22: BEGIN	; Get Second line
               mli_old_l2  = x
               WIDGET_CONTROL, clmli_idw2_txt, SET_VALUE= STRING(line_lst(line_index).lambda,FORMAT='(F8.3)')
               WIDGET_CONTROL, clmli_idw2_lbl, SET_VALUE = ' ( '+STRTRIM(line_lst(line_index).line_name,2) + ' )'
             END
          ELSE:
        ENDCASE
      ENDIF
      WIDGET_CONTROL , clmli_valid, /INPUT_FOCUS 
    ENDIF
  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_upd_iext_val                                          #
;#LEVEL            : 2                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : manage cut area                                          #
;#Creation date    : 14-02-94                                                 #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_upd_iext_val, x, y, xdev, ydev, ev, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON widget_id_com
  COMMON curr_data_i_com
  COMMON load_flg_com
  COMMON format_com
  COMMON const_com
  COMMON extim_com
  COMMON color_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0
  ;============================================================================
  ;                       Processing 
  ;============================================================================

  ql_refresh, IMAGE, err

  ; --------
  ; Clipping
  ; --------
  IF ((xdev+x_e_inf) LT curr_dctrl_i.x.offset-1) THEN $
    xdev=curr_dctrl_i.x.offset-1-x_e_inf
  IF ((xdev+x_e_sup) GT curr_dctrl_i.x.offset-1+curr_dctrl_i.x.nb_dot) THEN $
    xdev=curr_dctrl_i.x.offset-1+curr_dctrl_i.x.nb_dot-x_e_sup-1
  IF ((ydev+y_e_inf) LT curr_dctrl_i.y.offset-1) THEN $
    ydev=curr_dctrl_i.y.offset-1-y_e_inf
  IF ((ydev+y_e_sup) GT curr_dctrl_i.y.offset-1+curr_dctrl_i.y.nb_dot) THEN $
    ydev=curr_dctrl_i.y.offset-1+curr_dctrl_i.y.nb_dot-y_e_sup-1

  ; -------
  ; Drawing
  ; -------
  PLOTS, ROUND(xdev+ext_box_x), ROUND(ydev+ext_box_y), /DEVICE, COLOR=blue

  XYOUTS,xdev+ext_box_x(0)-6 , ydev+ext_box_y(0)+6 , 'T', /DEVICE, COLOR=blue 
  XYOUTS,xdev+ext_box_x(2)-10, ydev+ext_box_y(2)-10, 'c', COLOR=blue, /DEVICE
  XYOUTS,xdev+ext_box_x(3)+6 , ydev+ext_box_y(3)-10, 'd', COLOR=blue, /DEVICE
  XYOUTS,xdev+ext_box_x(0)+6 , ydev+ext_box_y(0)+10, 'a', COLOR=blue, /DEVICE
  XYOUTS,xdev+ext_box_x(1)-10, ydev+ext_box_y(1)+10, 'b', COLOR=blue, /DEVICE


  ; Update Area coord
  ; -----------------
  box_x  = xdev + ext_box_x - (curr_dctrl_i.x.offset-1)
  box_y  = ydev + ext_box_y - (curr_dctrl_i.y.offset-1)

  xa = curr_dctrl_i.x.det_min + ROUND(box_x(0)) 
  ya = curr_dctrl_i.y.det_min + ROUND(box_y(0))
  xb = curr_dctrl_i.x.det_min + ROUND(box_x(1)) 
  yb = curr_dctrl_i.y.det_min + ROUND(box_y(1))
  xc = curr_dctrl_i.x.det_min + ROUND(box_x(2)) 
  yc = curr_dctrl_i.y.det_min + ROUND(box_y(2))
  xd = curr_dctrl_i.x.det_min + ROUND(box_x(3)) 
  yd = curr_dctrl_i.y.det_min + ROUND(box_y(3))

  area_lbl_1 = 'a:('+STRING(xa,FORMAT='(I4.4)')+','+STRING(ya,FORMAT='(I4.4)')+')	' + $
               'b:('+STRING(xb,FORMAT='(I4.4)')+','+STRING(yb,FORMAT='(I4.4)')+')'
  area_lbl_2 = 'd:('+STRING(xd,FORMAT='(I4.4)')+','+STRING(yd,FORMAT='(I4.4)')+')	' + $
               'c:('+STRING(xc,FORMAT='(I4.4)')+','+STRING(yc,FORMAT='(I4.4)')+')'
               
  center = [FLOAT(box_x(0))+FLOAT(box_x(2)),FLOAT(box_y(3))+FLOAT(box_y(1))]*0.5
 
  WIDGET_CONTROL, im_ext_z_lbl_1, SET_VALUE=area_lbl_1
  WIDGET_CONTROL, im_ext_z_lbl_2, SET_VALUE=area_lbl_2

  

  ; ------------------------------
  ; Extract image from selected area
  ; ------------------------------
  IF (EV.PRESS EQ 1) THEN BEGIN       
    x_ext_dev = xdev
    y_ext_dev = ydev

    x_ext = x
    y_ext = y
     ; compute values
    ; --------------
    ql_get_subi, box_x, box_y, err

    WSET, ext_im_wnum 
    WIDGET_CONTROL, ext_im_draw ,SET_DRAW_VIEW=[0,0]
    ERASE
    tmp = BYTSCL(Subi, top=max_nb_color)
    tmp = BYTSCL(tmp, MIN=color_min, MAX=color_max, TOP=max_nb_color)
    TV, tmp 	
    WIDGET_CONTROL, im_ext_valid, SENSITIVE=1
    WIDGET_CONTROL, im_ext_valid, /INPUT_FOCUS
  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_upd_icut_val                                          #
;#LEVEL            : 2                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : manage ext area                                          #
;#Creation date    : 14-02-94                                                 #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_upd_icut_val, x, y, xdev, ydev, ev, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON widget_id_com
  COMMON curr_data_i_com
  COMMON curr_data_p_com
  COMMON load_flg_com
  COMMON format_com
  COMMON const_com
  COMMON cutim_com
  COMMON color_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0
  ;============================================================================
  ;                       Processing 
  ;============================================================================

  ql_refresh, IMAGE, err

  ; --------
  ; Clipping
  ; --------
  IF ((xdev+x_c_inf) LT curr_dctrl_i.x.offset-1) THEN $
    xdev=curr_dctrl_i.x.offset-1-x_c_inf
  IF ((xdev+x_c_sup) GT curr_dctrl_i.x.offset-1+curr_dctrl_i.x.nb_dot) THEN $
    xdev=curr_dctrl_i.x.offset-1+curr_dctrl_i.x.nb_dot-x_c_sup-1
  IF ((ydev+y_c_inf) LT curr_dctrl_i.y.offset-1) THEN $
    ydev=curr_dctrl_i.y.offset-1-y_c_inf
  IF ((ydev+y_c_sup) GT curr_dctrl_i.y.offset-1+curr_dctrl_i.y.nb_dot) THEN $
    ydev=curr_dctrl_i.y.offset-1+curr_dctrl_i.y.nb_dot-y_c_sup-1

  ; -------
  ; Drawing
  ; -------
  PLOTS, ROUND(xdev+cut_box_x), ROUND(ydev+cut_box_y), /DEVICE, COLOR=green

  XYOUTS,xdev+cut_box_x(0)-6 , ydev+cut_box_y(0)+6 , 'T', /DEVICE, COLOR=green 
  XYOUTS,xdev+cut_box_x(2)-10, ydev+cut_box_y(2)-10, 'c', COLOR=green, /DEVICE
  XYOUTS,xdev+cut_box_x(3)+6 , ydev+cut_box_y(3)-10, 'd', COLOR=green, /DEVICE
  XYOUTS,xdev+cut_box_x(0)+6 , ydev+cut_box_y(0)+10, 'a', COLOR=green, /DEVICE
  XYOUTS,xdev+cut_box_x(1)-10, ydev+cut_box_y(1)+10, 'b', COLOR=green, /DEVICE

  ; Update Area coord
  ; -----------------
  box_x  = xdev + cut_box_x - (curr_dctrl_i.x.offset-1)
  box_y  = ydev + cut_box_y - (curr_dctrl_i.y.offset-1)
 
  xa = curr_dctrl_i.x.det_min + ROUND(box_x(0)) 
  ya = curr_dctrl_i.y.det_min + ROUND(box_y(0))
  xb = curr_dctrl_i.x.det_min + ROUND(box_x(1)) 
  yb = curr_dctrl_i.y.det_min + ROUND(box_y(1))
  xc = curr_dctrl_i.x.det_min + ROUND(box_x(2)) 
  yc = curr_dctrl_i.y.det_min + ROUND(box_y(2))
  xd = curr_dctrl_i.x.det_min + ROUND(box_x(3)) 
  yd = curr_dctrl_i.y.det_min + ROUND(box_y(3))

  area_lbl_1 = 'a:('+STRING(xa,FORMAT='(I4.4)')+','+STRING(ya,FORMAT='(I4.4)')+')	' + $
               'b:('+STRING(xb,FORMAT='(I4.4)')+','+STRING(yb,FORMAT='(I4.4)')+')'
  area_lbl_2 = 'd:('+STRING(xd,FORMAT='(I4.4)')+','+STRING(yd,FORMAT='(I4.4)')+')	' + $
               'c:('+STRING(xc,FORMAT='(I4.4)')+','+STRING(yc,FORMAT='(I4.4)')+')'
               
  center = [FLOAT(box_x(0))+FLOAT(box_x(2)),FLOAT(box_y(3))+FLOAT(box_y(1))]*0.5
 
  WIDGET_CONTROL, im_cut_z_lbl_1, SET_VALUE=area_lbl_1
  WIDGET_CONTROL, im_cut_z_lbl_2, SET_VALUE=area_lbl_2

  ; ------------------------------
  ; Extract cut from selected area
  ; ------------------------------
  IF (EV.PRESS EQ 1) THEN BEGIN       
    curr_data_p   = FLTARR (1, FIX(cut_l))	; Reset curr_data_p
    curr_header_p = curr_header_i  		; Heritage header
    curr_banner_p = curr_banner_i  		; Heritage banner

    ; Update profile header
    ; ---------------------
    curr_header_p.SSTYPIMG = -1
    c = ABS (cut_a)
    CASE curr_header_i.DATATYPE OF
      1:BEGIN			; cut spectral x spatial Y
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 8
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 9
          proc_id = 8
        END
      21:BEGIN			; cut spectral x spatial X
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 8
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 29
          proc_id = 8
        END
      2:BEGIN			; cut spatial X x spatial Y
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 29
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 9
          proc_id = 10
        END
      22:BEGIN			; cut spatial Y x spatial X
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 9
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 29
          proc_id = 10
        END
      3:BEGIN			; cut spectral x temporal
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 8
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 10
          proc_id = 11
        END
      4:BEGIN			; cut spatial Y x temporal
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 9
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 10
          proc_id = 13
        END
      24:BEGIN			; cut spatial X x temporal
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 29
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 10
          proc_id = 13
        END
      5:BEGIN			; cut spatial Y x spectral
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 9
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 8
          proc_id = 9
        END
      25:BEGIN			; cut spatial X x spectral
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 29
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 8
          proc_id = 13
        END
      6:BEGIN			; cut  temporal x spectral
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 10
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 8
          proc_id = 12
        END
      7:BEGIN			; cut temporal x spatial Y
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 10
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 9
          proc_id = 14
        END
      27:BEGIN			; cut temporal x spatial X
          IF (c LE 45  ) THEN curr_header_p.DATATYPE = 10
          IF (c GT 45  ) THEN curr_header_p.DATATYPE = 29
          proc_id = 14
        END
      ELSE : curr_header_p.DATATYPE = 11
    ENDCASE

    ; compute values
    ; --------------
    ql_get_cut , ROUND(box_x), ROUND(box_y), curr_data_p , err

    ; Update control display , display
    ; --------------------------------
    ql_init_dctrl,PROFILE, err

    curr_dctrl_p.title     = STRING(STRTRIM(curr_dctrl_i.title,2) +' (cut)', FORMAT=Title_Format)
    curr_dctrl_p.color     =  green
    curr_dctrl_p.x.offset  =  (xdev-(cut_plz/2))>(IMAGE_X_OFFSET)
    IF ((curr_dctrl_p.x.offset+cut_plz) GT 1024+IMAGE_X_OFFSET) THEN $
      curr_dctrl_p.x.offset = 1024+IMAGE_X_OFFSET-1-cut_plz
    curr_dctrl_p.x.nb_dot  = cut_l
    curr_dctrl_p.x.plot_sz = cut_plz

    xplotmin = curr_dctrl_i.x.plot_min
    xplotmax = curr_dctrl_i.x.plot_max
    xplotsz  = curr_dctrl_i.x.plot_sz
    xnb_dot  = curr_dctrl_i.x.nb_dot
                     
    x0dev1   = xdev + cut_box_x(0) - (curr_dctrl_i.x.offset-1)
    x0dev2   = xdev + cut_box_x(3) - (curr_dctrl_i.x.offset-1)
    x0dev    = ROUND ((x0dev1+x0dev2)*0.5)
    x1dev    = x0dev + cut_l-1

    x0       = xplotmin + ( (FLOAT(x0dev)/FLOAT(xplotsz-1) ) * (xplotmax-xplotmin))
    x1       = xplotmin + ( (FLOAT(x1dev)/FLOAT(xplotsz-1) ) * (xplotmax-xplotmin))

    curr_dctrl_p.x.min       = x0        
    curr_dctrl_p.x.max       = x1
    curr_dctrl_p.x.plot_min  = curr_dctrl_p.x.min
    curr_dctrl_p.x.plot_max  = curr_dctrl_p.x.max
    curr_dctrl_p.x.index_min = 0
    curr_dctrl_p.x.index_max = cut_l-1
    str = STRTRIM(STRING(FIX(cut_h)),2)+ ' sample(s), ' + $
          STRING(cut_a,FORMAT='(F7.2)')+ ' deg, ' + $
          ' (' + STRING(center(0), FORMAT='(F7.2)') + ',' + STRING(center(1), FORMAT='(F7.2)') + ')'
    curr_dctrl_p.x.comment  = STRING(str, FORMAT=Comment_Format) 


    ql_init_banner,curr_data_p(0,*), PROFILE , err         

    curr_header_p.SSBPADDY = maxpix MOD cut_l
    curr_header_p.SSBPADDZ = maxpix/cut_l
    curr_header_p.SSBPCNTS = FIX(curr_banner_p.max)
    curr_header_p.SSIMGTOT = LONG(TOTAL(curr_data_p))

    curr_dctrl_p.process_id(*)=curr_dctrl_i.process_id(*)
    res = ql_manage_proc  (curr_dctrl_p, PUSH, proc_id)	; update process table

    ; Init curr_x_p
    ; -------------
    s = SIZE (curr_data_p)  
    curr_header_p.DATAFMT = s(3)

    curr_x_p = FINDGEN (s(2))
    curr_x_p = curr_dctrl_p.x.min + curr_x_p*(curr_dctrl_p.x.max-curr_dctrl_p.x.min)/(s(2)-1)
    
    ret = ql_display_data (curr_data_p, 100, curr_dctrl_p, err)
    load_flag_p = 1
    ql_update_mnu, err

  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_upd_ilid_val                                          #
;#LEVEL            : 2                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Update coordinate of line id application                 #
;#Creation date    : 14-02-94                                                 #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_upd_ilid_val, x, y, xdev, ydev, ev, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON widget_id_com
  COMMON curr_data_i_com
  COMMON line_id_com
  COMMON line_com
  COMMON const_com
  COMMON color_com


  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0

  ;============================================================================
  ;                       Processing 
  ;============================================================================

  IF ( ((x GE curr_dctrl_i.x.plot_min ) AND (x LE curr_dctrl_i.x.plot_max) ) AND $
       ((y GE curr_dctrl_i.y.plot_min ) AND (y LE curr_dctrl_i.y.plot_max) )     $
     ) THEN BEGIN     
    ql_refresh, IMAGE, err					

    PLOTS, [x, x], [curr_dctrl_i.y.plot_min,curr_dctrl_i.y.plot_max] , /DATA, COLOR=yellow   ; Curr xy
    PLOTS, [curr_dctrl_i.x.plot_min,curr_dctrl_i.x.plot_max], [y,y]  , /DATA, COLOR=yellow

    WIDGET_CONTROL,i_lid_wl_lbl , SET_VALUE=STRING(x, FORMAT='(F8.3)')	; Update box
    WIDGET_CONTROL,i_lid_remove , SENSITIVE=0
    WIDGET_CONTROL,i_lid_insert , SENSITIVE=1

    IF (EV.PRESS EQ 1) THEN BEGIN                      			; line Id 
       WIDGET_CONTROL, /CLEAR_EVENT
       ql_get_line_ind, x, line_index, err	; Get index in ref tbl
       IF (err EQ 0) THEN BEGIN             	; Founded
         l = line_index
         IF (line_index GE 3) THEN  l = line_index-3
         WIDGET_CONTROL,i_ref_l_list, SET_LIST_TOP=l, SET_LIST_SELECT=line_index
         WIDGET_CONTROL,i_lid_nl_lbl, SET_VALUE = $
                                      STRTRIM(line_lst(line_index).line_name,2) + ': ' + $
                                      STRING(line_lst(line_index).lambda, FORMAT='(F8.3)')+ $
                                      ' A'
         WIDGET_CONTROL,i_lid_id_txt, SET_VALUE = line_lst(line_index).line_name  
       ENDIF
       lbl_x = xdev
       lbl_y = ydev
       WIDGET_CONTROL,i_lid_insert  , /INPUT_FOCUS 
    ENDIF
  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_curr_i_info_event                                     #
;#LEVEL            :                                                          #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : manage header visualization of current image data        #
;#Creation date    : December 1993                                            #
;#Update date      : 24-01-94	E.PETIT	 Add management of display control str#
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_curr_i_info_event, ev

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON info_display_com
  COMMON get_rrd_item_com
  COMMON curr_data_i_com
  COMMON color_com
                                     
  ;============================================================================
  ;                       Initialization
  ;============================================================================
  ret = 0

  ;============================================================================
  ;                       Processing 
  ;============================================================================
  WIDGET_CONTROL, ev.id, GET_UVALUE = value

  CASE  value OF
    'DONE': BEGIN
       WIDGET_CONTROL, info_display_base, /DESTROY
     END

    'FULL': BEGIN
       WIDGET_CONTROL, info_cancel_full, SENSITIVE=1
       WIDGET_CONTROL, info_full, SENSITIVE=0
       ql_fmt_full_hd, info_display_ctrl, curr_header_i
     END

    'CANCEL FULL': BEGIN
       full_hd_flg = 0
       WIDGET_CONTROL, fhd_text, /DESTROY
       WIDGET_CONTROL, info_cancel_full, SENSITIVE=0
       WIDGET_CONTROL, info_full, SENSITIVE=1
     END
  ENDCASE                                                   
END

;***
;##############################################################################
;#Function  name   : ql_curr_i_info                                           #
;#LEVEL            : 1                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : header visualization of current image data               #
;#Creation date    : December 1993                                            #
;#Update date      : 24-01-94	E.PETIT	 Add management of display control str#
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_curr_i_info, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON info_display_com
  COMMON curr_data_i_com
  COMMON get_rrd_item_com
  COMMON const_com
  COMMON color_com
 
  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0
  full_hd_flg = 0
  ;============================================================================
  ;                       Processing 
  ;============================================================================

  ; --------------
  ; Format display 
  ; --------------
  title = 'Current Image Information'
  ql_format_hd, curr_header_i, text_value, err
  IF (err NE 0) THEN RETURN
 
  ;---------------
  ;Base Hierarchie
  ;---------------
   info_display_base = WIDGET_BASE (TITLE  = title   , $
                                    XOFFSET = 200    , $
                                    YOFFSET = 200    , $
                                    /COLUMN, /MODAL)
     info_display_ctrl = WIDGET_BASE (info_display_base , /ROW)
     info_display_cmd = WIDGET_BASE  (info_display_base , /ROW)
  ; ------------------
  ; Widgets Definition
  ; ------------------
  info_text        = WIDGET_TEXT   (info_display_ctrl    , $
                                    XSIZE = 60           , $
                                    YSIZE = 22           , $
                                    VALUE = text_value   , $
                                    FONT = Hd_Font_Bold)

  info_done        = WIDGET_BUTTON  (info_display_cmd    , $
                                     VALUE  = "DONE"     , $
                                     UVALUE = "DONE")   

  info_full        = WIDGET_BUTTON  (info_display_cmd       , $
                                     VALUE  = "FULL HEADER" , $
                                     UVALUE = "FULL")

  info_cancel_full = WIDGET_BUTTON  (info_display_cmd       , $
                                     VALUE  = "CANCEL FULL HEADER" , $
                                     UVALUE = "CANCEL FULL")

  ; ----------------
  ; Widgets Creation
  ; ----------------   
  WIDGET_CONTROL, info_display_base , /REALIZE
  WIDGET_CONTROL, info_cancel_full, SENSITIVE=0
  WIDGET_CONTROL, info_done         , /INPUT_FOCUS

  ; ------------------
  ; Call Event manager
  ; ------------------
   XMANAGER, "ql_curr_i_info"    , $
             info_display_base   , $
             GROUP_LEADER = GROUP

END
;***
;##############################################################################
;#Function  name   : ql_islit_ang                                             #
;#LEVEL            : 2                                                        #
;#                                                                            #
;#Author           : J. PLATZER                                               #
;#Language         : IDL                                                      #
;#Purpose          : manage slit angle                                        #
;#Creation date    : 14-05-94                                                 #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    :                                                          #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_islit_ang, x, y, xdev, ydev, ev, err

  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON widget_id_com
  COMMON curr_data_i_com
  COMMON load_flg_com
  COMMON format_com
  COMMON const_com
  COMMON slitan_com
  COMMON color_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  err = 0
  ;============================================================================
  ;                       Processing 
  ;============================================================================

  ql_refresh, IMAGE, err

  ; --------
  ; Clipping
  ; --------

  IF (xdev + x_s_inf LT curr_dctrl_i.x.offset) THEN $ 
    xdev = curr_dctrl_i.x.offset - x_s_inf
  IF (xdev + x_s_sup GT curr_dctrl_i.x.offset + curr_dctrl_i.x.nb_dot-1) THEN $
    xdev = curr_dctrl_i.x.offset + curr_dctrl_i.x.nb_dot - x_s_sup -1
  
  IF (ydev + y_s_inf LT curr_dctrl_i.y.offset) THEN $
    ydev = curr_dctrl_i.y.offset - y_s_inf
  IF (ydev + y_s_sup GT curr_dctrl_i.y.offset + curr_dctrl_i.y.nb_dot-1) THEN $
    ydev = curr_dctrl_i.y.offset + curr_dctrl_i.y.nb_dot - y_s_sup -1

  ; -------
  ; Drawing
  ; -------
  PLOTS, xdev+sli_box_x, ydev+sli_box_y, /DEVICE, COLOR=green
  XYOUTS,xdev+sli_box_x(0)-6, ydev+sli_box_y(0)+6, 'T', /DEVICE, COLOR=green 
  
  ; ------------------------------
  ; Extract cut from selected area
  ; ------------------------------
  IF (EV.PRESS EQ 1) THEN BEGIN       
    x_sli_dev = xdev
    y_sli_dev = ydev

    x_sli = x
    y_sli = y
 
    ; compute values
    ; --------------
    x1 = xdev + sli_box_x(0) - curr_dctrl_i.x.offset
    x2 = xdev + sli_box_x(1) - curr_dctrl_i.x.offset
    x3 = ydev + sli_box_y(2) - curr_dctrl_i.y.offset
    x4 = ydev + sli_box_y(1) - curr_dctrl_i.y.offset

    subi_sli = curr_data_i(x1:x2, x3:x4)

    WSET, sli_im_wnum 
    WIDGET_CONTROL, sli_im_draw ,SET_DRAW_VIEW=[0,0]
    ERASE
    tmp = BYTSCL(subi_sli, top=max_nb_color)
    tmp = BYTSCL(tmp, MIN=color_min, MAX=color_max, TOP=max_nb_color)
    TV, tmp 	
 
    WIDGET_CONTROL, sli_valid, SENSITIVE=1

  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_iclic_trt                                             #
;#LEVEL            : 1                                                        #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Manage mouse clic event in image data area               #
;#Creation date    : December 1993                                            #
;#Update date      :03-02-94	E.PETIT	   Display banner management(coord)   #
;#                  08-02-94	E.PETIT	   	Add Line Id management        #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    : Called by Event Handler                                  #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;##############################################################################
;*** 

PRO ql_iclic_trt, ev
  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON const_com
  COMMON curr_data_i_com
  COMMON curr_data_p_com
  COMMON dispcal_com
  COMMON flag_com
  COMMON load_flg_com
  COMMON widget_id_com
  COMMON slitan_com
  COMMON color_com

  ;============================================================================
  ;                       Initialization
  ;============================================================================
  state = 0  
  err   = 0
  ;============================================================================
  ;                       Processing 
  ;============================================================================

  ; -------------
  ; Compute state 
  ; -------------
  ; a5: clmli_flag
  ; a4: clsli_flag
  ; a3: cldisp_flag
  ; a2: extim_flag
  ; a1: cutim_flag
  ; a0: lidim_flag
  ;
  ; +=======================================+=====+=================================+
  ; |                      input            |state|               Comment           |
  ; +====+====+===+=========================+=====+=================================+
  ; |a5  |a4  |a3  | a2 | a1| a0            |     |                                 |
  ; +----+----+----+---+--------------------+-----+---------------------------------+
  ; | 0  | 0  | 0  | 0  | 0 | 0             |  0  | Image info is displayed         |
  ; | 0  | 0  | 0  | 0  | 0 | 1             |  1  | Line Id processing              |
  ; | 0  | 0  | 0  | 0  | 1 | 0             |  2  | cut of image processing         |
  ; | 0  | 0  | 0  | 0  | 1 | 1             |  3  | *** Not allowed ****            |
  ; | 0  | 0  | 0  | 1  | 0 | 0             |  4  | Image extraction processing     |
  ; | 0  | 0  | 0  | 1  | 0 | 1             |  5  | *** Not Allowed ****            |
  ; | 0  | 0  | 0  | 1  | 1 | 0             |  6  | *** Not Allowed ****            |
  ; | 0  | 0  | 0  | 1  | 1 | 1             |  7  | *** Not allowed ****            |
  ; | 0  | 0  | 1  | 0  | 0 | 0             |  8  | dispersion calibration          |
  ; | 0  | 0  | 1  | 0  | 0 | 1             |  9  | *** Not allowed ****            |
  ; | 0  | 0  | 1  | 0  | 1 | 0             | 10  | *** Not allowed ****            |
  ; | 0  | 0  | 1  | 0  | 1 | 1             | 11  | *** Not allowed ****            |
  ; | 0  | 0  | 1  | 1  | 0 | 0             | 12  | *** Not allowed ****            |
  ; | 0  | 0  | 1  | 1  | 0 | 1             | 13  | *** Not Allowed ****            |
  ; | 0  | 0  | 1  | 1  | 1 | 0             | 14  | *** Not Allowed ****            |
  ; | 0  | 0  | 1  | 1  | 1 | 1             | 15  | *** Not allowed ****            |
  ; | 0  | 1  | 0  | 0  | 0 | 0             | 16  | slit angle                      |
  ; | 1  | 0  | 0  | 0  | 0 | 0             | 32  | Manual Wavelength calibration   |
  ; +----+----+----+---+--------------------+-----+---------------------------------+


  ; ----------------------
  ; Compute state variable 
  ; ----------------------
  state = lidim_flag + 2*cutim_flag + 4*extim_flag + 8*cldisp_flag + clsli_flag*16 + clmli_flag*32

  IF(load_flag_i EQ 1) THEN BEGIN
    WIDGET_CONTROL, work_draw, GET_VALUE=win_num
    WSET, win_num

    ; ------------
    ; Get Position
    ; ------------
    xdev = ev.x
    ydev = ev.y

    x1   = xdev-(curr_dctrl_i.x.offset-1)
    y1   = ydev-(curr_dctrl_i.y.offset-1)


    x    = curr_dctrl_i.x.plot_min + $
           (x1*(curr_dctrl_i.x.plot_max-curr_dctrl_i.x.plot_min))/(curr_dctrl_i.x.plot_sz-1)
    y    = curr_dctrl_i.y.plot_min + $
           (y1*(curr_dctrl_i.y.plot_max-curr_dctrl_i.y.plot_min))/(curr_dctrl_i.y.plot_sz-1)

    ; -------------------------------------
    ; Update Coord And Curr value in banner
    ; -------------------------------------
    IF (x1 GE 0) AND (x1 LT curr_dctrl_i.x.nb_dot) THEN $
      str=STRTRIM(STRING(x1+curr_dctrl_i.x.det_min,FORMAT='(I4.4)'), 2) $
    ELSE str=STRING ('',FORMAT='(A4)')
    STRPUT, i_ban_d_cur_str, str, 00

    IF (y1 GE 0) AND (y1 LT curr_dctrl_i.y.nb_dot) THEN $
      str=STRTRIM(STRING(y1+curr_dctrl_i.y.det_min,FORMAT='(I4.4)'), 2) $
    ELSE str=STRING ('',FORMAT='(A4)')
    STRPUT, i_ban_d_cur_str, str, 14

    IF (x GE curr_dctrl_i.x.min AND x LE curr_dctrl_i.x.max) THEN $
      str=STRTRIM(STRING(x,FORMAT='(F10.3)'), 2) $
    ELSE str=STRING ('',FORMAT='(A10)')
    STRPUT, i_ban_d_cur_str, str, 28 

    IF (y GE curr_dctrl_i.y.min AND y LE curr_dctrl_i.y.max) THEN $
      str=STRTRIM(STRING(y,FORMAT='(F10.3)'),2) $
    ELSE str=STRING('',FORMAT='(A10)')
    STRPUT, i_ban_d_cur_str, str, 42 

    IF (x1 GE 0 AND x1 LT curr_dctrl_i.x.nb_dot)  AND (y1 GE 0 AND y1 LT curr_dctrl_i.y.nb_dot) THEN  $
      str=STRTRIM(STRING(curr_data_i(x1, y1), FORMAT='(F10.3)'),2)  $
    ELSE  str=STRING('', FORMAT='(A10)')  
    STRPUT, i_ban_d_cur_str, str, 56 

    WIDGET_CONTROL, i_ban_d_cur_lbl, SET_VALUE=i_ban_d_cur_str

    ; -------------------
    ; Specific processing 
    ; -------------------
    CASE STATE OF
     0: BEGIN 		; Info 
          IF (EV.PRESS EQ 1) THEN ql_curr_i_info, err 
          ql_refresh, PROFILE, err					
          ql_refresh, IMAGE, err					
          IF (x1 GE 0) AND (x1 LE curr_dctrl_i.x.nb_dot-1 ) THEN $
            PLOTS, [xdev, xdev], curr_dctrl_i.y.offset-1+[0,curr_dctrl_i.y.nb_dot-1] , /DEVICE
          IF (y1 GE 0) AND (y1 LE curr_dctrl_i.y.nb_dot-1 ) THEN $
            PLOTS, curr_dctrl_i.x.offset-1+[0,curr_dctrl_i.x.nb_dot-1] ,[ydev, ydev],  /DEVICE
        END
     1: BEGIN 		; Line Indentification
          ql_upd_ilid_val , x, y, xdev, ydev, ev, err
        END
     2: BEGIN 		; Cut 
          ql_upd_icut_val , x, y, xdev, ydev, ev, err
        END
     4: BEGIN 		; Cut 
         ql_upd_iext_val , x, y, xdev, ydev, ev, err
        END
     8: BEGIN 		; Dispersion Angle 
          ql_mng_dispst, x, y, xdev, ydev, ev
        END
    16: BEGIN           ; slit angle
          ql_islit_ang , x ,y ,xdev ,ydev, ev, err
        END
    32:BEGIN ; Manual Wavelength calibration
         ql_upd_clmli_val, x, y, x1, y1, ev
       END
    ENDCASE
  ENDIF 
END
