;******************************************************************************
;* File name: ql_sumer.pro                                                    *
;*                                                                            *
;* Content  : 	ql_event                                                      *
;*		ql_sumer                                                      *
;*                                                                            *
;*                                                                            *
;* Date		Author		Comment                                       *
;* -------------------------------------------------------------------------- *
;* 10-01-94	E.PETIT		Creation                                      *
;* 18-01-94	E.PETIT	   	Add display control structure                 *
;* 02-02-94	E.PETIT	   	Add Display banner management                 *
;* 08-02-94	E.PETIT	   	Init lid_xxx_flag                             *
;* 23-02-94	E.PETIT	   	lock menu during init                         *
;*                                                                            *
;******************************************************************************


;***
;##############################################################################
;#Function  name   : ql_event                                                 #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Quick Look Main window event scheduler                   #
;#Creation date    : December 1993                                            #
;#Update date      : 02-02-94	E.PETIT	   Display banner management          #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    : Called by XMANAGER                                       #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      :                                                          #
;#                                                                            #
;#                                                                            #
;#                                                                            #
;##############################################################################
;***  

PRO ql_event, ev
  ;============================================================================
  ;                       Processing 
  ;============================================================================
 
  WIDGET_CONTROL, ev.id, GET_UVALUE = event_val			; Get user id of event

  cmd_string = 'ql_' + STRMID(STRING(event_val),0,5) + '_trt' 	; Prepare cmd
  CALL_PROCEDURE , cmd_string, ev                 		; Call trt procedure
  IF ( (event_val NE 'quit')      AND $				; Exception
       (event_val NE 'iclic')     AND $
       (event_val NE 'pclic')     AND $
       (event_val NE 'scale_min') AND $
       (event_val NE 'scale_max')     $
     ) THEN BEGIN
    ql_update_mnu, err				       		; Update menu state
  ENDIF
END

;***
;##############################################################################
;#Function  name   : ql_sumer                                                 #
;#                                                                            #
;#Author           : Emmanuel PETIT                                           #
;#Language         : IDL                                                      #
;#Purpose          : Main routine of Quick Look software: Resource Creation   #
;#Creation date    : December 1993                                            #
;#Update date      : 18-01-94	E.PETIT		Add display control structure #
;#                 : 02-02-94	E.PETIT	   	Display banner management     #
;#                   08-02-94	E.PETIT	   	Init lid_xxx_flag             #
;#External modules :                                                          #
;#                                                                            #
;#Call sequence    : ql                                                       #
;#                                                                            #
;#Arguments        :                                                          #
;#                                                                            #
;#Description      : Creation of window bases, menu,..., Call the             #
;#                   xwindow event scheduler                                  #
;#                   Event are Processes in'ql_event procedure                #
;#                                                                            #
;##############################################################################
;***  

@ql_compile
PRO ql_sumer
  ;============================================================================
  ;                       Common Block in use
  ;============================================================================
  COMMON base_id_com
  COMMON widget_id_com
  COMMON file_com
  COMMON const_com
  COMMON curr_data_i_com
  COMMON curr_data_p_com
  COMMON color_com
  COMMON rrd_crit_com

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

  ; initialize usefull data
  ; -----------------------
  ql_init 
  ql_init_rrd_crt, err
  
  stack_item         = STRARR (STACK_SZ)
  is_uvalue          = STRARR (STACK_SZ)
  ps_uvalue          = STRARR (STACK_SZ)

  FOR i=0,STACK_SZ-1 DO BEGIN
    stack_item (i) = STRTRIM(STRING(i,/PRINT),2)
    is_uvalue  (i) = 'is'
    ps_uvalue  (i) = 'ps'
  ENDFOR
 

  ;============================================================================
  ;                       Processing 
  ;============================================================================
  
  ;---------------
  ;Base Hierarchie
  ;---------------
;  root_base                 = WIDGET_BASE (TITLE=Main_Title,YSIZE=1200,XSIZE=1400,/ROW )
;  root_base                 = WIDGET_BASE (TITLE=Main_Title,Y_SCROLL_SIZE=900,X_SCROLL_SIZE=1200,/SCROLL,/COLUMN )
  root_base                 = WIDGET_BASE (TITLE=Main_Title,YSIZE=970,XSIZE=1250,/COLUMN )
    menu_base               = WIDGET_BASE (root_base, /ROW)
    im_display_stack_base   = WIDGET_BASE (root_base, /ROW,/FRAME)
      im_display_base       = WIDGET_BASE (im_display_stack_base, /COLUMN)
        im_ban_base         = WIDGET_BASE (im_display_base, /COLUMN)
          im_ban_prp_base     = WIDGET_BASE (im_ban_base, /ROW)
            im_ban_p_cur        = WIDGET_BASE (im_ban_prp_base)
            im_ban_p_fix        = WIDGET_BASE (im_ban_prp_base)
          im_ban_data_base    = WIDGET_BASE (im_ban_base, /ROW)
            im_ban_d_cur        = WIDGET_BASE (im_ban_data_base)
            im_ban_d_fix        = WIDGET_BASE (im_ban_data_base)
      im_stack_base         = WIDGET_BASE (im_display_stack_base, /COLUMN)
        dummy = WIDGET_LABEL (im_stack_base,  VALUE='Image Stack     ',FONT=Hd_Font_Bold)
        FOR i=0,STACK_SZ-1 DO BEGIN
          im_stack_ico_base(i)    = WIDGET_BASE (im_stack_base, /ROW)
          im_stack_frm_base(i)    = WIDGET_BASE (im_stack_ico_base(i))
          im_stack_ctrl_base(i)   = WIDGET_BASE (im_stack_ico_base(i),/NONEXCLUSIVE)
        ENDFOR
        dummy = WIDGET_LABEL (im_stack_base, VALUE='Color Management',FONT=Hd_Font_Bold)
        base_color=widget_base(im_stack_base,space=0,/column)
        p2=widget_base(base_color,/row)


    prf_display_stack_base  = WIDGET_BASE (root_base, /ROW,/FRAME)
      prf_display_base      = WIDGET_BASE (prf_display_stack_base, /COLUMN)
        prf_ban_base         = WIDGET_BASE (prf_display_base, /COLUMN)
          prf_ban_prp_base     = WIDGET_BASE (prf_ban_base, /ROW)
            prf_ban_p_cur        = WIDGET_BASE (prf_ban_prp_base)
            prf_ban_p_fix        = WIDGET_BASE (prf_ban_prp_base)
          prf_ban_data_base    = WIDGET_BASE (prf_ban_base, /ROW)
            prf_ban_d_cur        = WIDGET_BASE (prf_ban_data_base)
            prf_ban_d_fix        = WIDGET_BASE (prf_ban_data_base)
      prf_stack_base        = WIDGET_BASE (prf_display_stack_base, /COLUMN)
        dummy = WIDGET_LABEL (prf_stack_base, VALUE='Profile Stack   ',FONT=Hd_Font_Bold)
        FOR i=0,STACK_SZ-1 DO BEGIN
          prf_stack_ico_base(i)    = WIDGET_BASE (prf_stack_base, /ROW)
          prf_stack_frm_base(i)    = WIDGET_BASE (prf_stack_ico_base(i))
          prf_stack_ctrl_base(i)   = WIDGET_BASE (prf_stack_ico_base(i),/NONEXCLUSIVE)
        ENDFOR      
                    
  ; ------------------
  ; Widgets Definition
  ; ------------------
  ql_pdmenu , menu_file, menu_base 	; Main menu. Cf 'ql_menu.mnu'

                    
  ;--------------------------------------------------------------------------
  ;                         Image Widgets
  ;--------------------------------------------------------------------------
  i_ban_p_cur_lbl = WIDGET_LABEL(im_ban_p_cur ,VALUE=i_ban_p_cur_str,FONT=Hd_Font_Bold) 
  i_ban_p_fix_lbl = WIDGET_LABEL(im_ban_p_fix ,VALUE=i_ban_p_fix_str,FONT=Hd_Font_Bold) 


  i_ban_d_cur_lbl = WIDGET_LABEL(im_ban_d_cur ,VALUE=i_ban_d_cur_str,FONT=Hd_Font)  
  i_ban_d_fix_lbl = WIDGET_LABEL(im_ban_d_fix ,VALUE=i_ban_d_fix_str,FONT=Hd_Font) 


  work_draw    =                                    $	; Working area
  WIDGET_DRAW (im_display_base                    , $
               XSIZE          = IMAGE_X_SZ        , $
               X_SCROLL_SIZE  = IMAGE_X_SCROLL_SZ , $
               YSIZE          = IMAGE_Y_SZ        , $  
               Y_SCROLL_SIZE  = IMAGE_Y_SCROLL_SZ , $
               /BUTTON_EVENT                      , $
               /MOTION_EVENT                      , $
               /SCROLL                            , $
               UVALUE = 'iclic'                   , $
               RETAIN = 2)          

  WINDOW, /FREE                                   , $	; 2nd Working layer
          /PIXMAP                                 , $ 
          XS= IMAGE_X_SZ                          , $
          YS= IMAGE_Y_SZ	
  work_draw_back = !D.WINDOW


  FOR i=0,STACK_SZ-1 DO BEGIN				; Image stack
    image_stack_icon(i) =              $
    WIDGET_DRAW (im_stack_frm_base(i), $
                 XSIZE=ICON_X        , $
                 YSIZE=ICON_Y        , $
                 /BUTTON_EVENT       , $
                 UVALUE = 'ii'       , $
                 RETAIN=2 )
    ret = $
    WIDGET_BUTTON (im_stack_ctrl_base(i) , $
                   VALUE  = stack_item(i), $
                   UVALUE = is_uvalue(i) )
  ENDFOR
  
  ; ------------------------ 
  ; Color management widgets
  ; ------------------------ 
  m1=WIDGET_DRAW  (p2                       , $
                   XOFFSET = 0              , $
                   YOFFSET = 0              , $
                   XSIZE   = COLOR_BANNER_X , $
                   YSIZE   = COLOR_BANNER_Y , $
                   RETAIN  = 2)
  m2=WIDGET_SLIDER(p2,$
                   MINIMUM = color_min      , $
                   MAXIMUM = max_nb_color   , $
                   UVALUE  = 'scale_min'    , $
                   VALUE   = color_min      , $
                   XOFFSET = 0              , $
                   YSIZE   = COLOR_BANNER_Y , $
                   FONT    = Hd_Font_Bold   , $
                   /DRAG                    , $
                   /VERTICAL)
  m3=WIDGET_SLIDER(p2,$
                   MINIMUM = color_min      , $
                   MAXIMUM = max_nb_color   , $
                   UVALUE  = 'scale_max'    , $
                   VALUE   = color_max      , $
                   XOFFSET = 0              , $
                   YSIZE   = COLOR_BANNER_Y , $
                   FONT    = Hd_Font_Bold   , $
                   /DRAG                    , $
                   /VERTICAL)


  ;--------------------------------------------------------------------------
  ;                           Profile Widgets
  ;--------------------------------------------------------------------------
  p_ban_p_cur_lbl = WIDGET_LABEL(prf_ban_p_cur ,VALUE=p_ban_p_cur_str,FONT=Hd_Font_Bold) 
  p_ban_p_fix_lbl = WIDGET_LABEL(prf_ban_p_fix ,VALUE=p_ban_p_fix_str,FONT=Hd_Font_Bold) 

  p_ban_d_cur_lbl = WIDGET_LABEL(prf_ban_d_cur ,VALUE=p_ban_d_cur_str,FONT=Hd_Font)  
  p_ban_d_fix_lbl = WIDGET_LABEL(prf_ban_d_fix ,VALUE=p_ban_d_fix_str,FONT=Hd_Font) 
                                 
  profile_draw =                                       $
  WIDGET_DRAW (prf_display_base                      , $         ; Profile area
               XSIZE = PROFILE_X_SZ                  , $
               YSIZE = PROFILE_Y_SZ                  , $  
               X_SCROLL_SIZE  = PROFILE_X_SCROLL_SZ  , $
               Y_SCROLL_SIZE  = PROFILE_Y_SCROLL_SZ  , $
               /BUTTON_EVENT                         , $
               /MOTION_EVENT                         , $
               /SCROLL                               , $
               UVALUE = 'pclic'                      , $
               RETAIN = 2 )
  WINDOW, /FREE                                      , $	; 2nd Working layer
          /PIXMAP                                    , $ 
          XS= PROFILE_X_SZ                           , $
          YS= PROFILE_Y_SZ	
  profile_draw_back = !D.WINDOW

  FOR i=0,STACK_SZ-1 DO BEGIN         		; Profile stack
    profile_stack_icon(i) =             $
    WIDGET_DRAW (prf_stack_frm_base(i), $
                 XSIZE=ICON_X         , $
                 YSIZE=ICON_Y         , $
                 /BUTTON_EVENT        , $
                 UVALUE = 'pi'        , $
                 RETAIN=2)
    ret = $
    WIDGET_BUTTON (prf_stack_ctrl_base(i) , $
                   VALUE  = stack_item(i), $
                   UVALUE = ps_uvalue(i) )
  ENDFOR

  ; ----------------
  ; Read config_file
  ; ----------------
  ql_read_cfg, err

  ; ---------------------
  ; Load Reference Tables
  ; ---------------------
  ql_load_ref_tbl, err
  IF (err NE 0) THEN ql_err_msg, err
  
  ; ----------------
  ; Widgets Creation
  ; ----------------
  WIDGET_CONTROL, menu_base, SENSITIVE=0	; Lock menu during init
  WIDGET_CONTROL, root_base, /REALIZE

  ; -------------------------------  
  ; initialize the  scale color bar  
  ; -------------------------------  
  color_banner=bytarr(COLOR_BANNER_X,COLOR_BANNER_Y)

  colors     = bindgen(max_nb_color)
  colors_100 = BYTE(INTERPOL(colors,COLOR_BANNER_Y)) 
  for j=0,COLOR_BANNER_Y-1 do color_banner(*,j)=colors_100(j)

  WIDGET_CONTROL,m1,GET_VALUE=colwin_index
  WSET,colwin_index
  TV,color_banner

  ; ---------------
  ; Update menu and
  ; Load stack file 
  ; ---------------
  ql_load_stk_hd, err
  ql_update_mnu , err

  ; ------------------
  ; Call Event manager
  ; ------------------
  WIDGET_CONTROL, menu_base, SENSITIVE=1	; Delock menu
  XMANAGER, 'QL', root_base

END
