;------------------------------------------------------------------------------;
;+
; NAME:
;		     eis_aec_event_gui
; PURPOSE:
;		     This object
; INPUTS:
;		     GROUP -
;-
;------------------------------------------------------------------------------;
FUNCTION eis_aec_event_gui::Init , parentClass

Self.parentClass  = parentClass
Self.group_leader = parentClass->tlbID()

; OK, get and store "aec_response_props"
Self.parentClass->getProperty , eis_aec_control = eis_aec_control
Self.eis_aec_control = eis_aec_control

;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = 'AEC Event Response Properties' + pt_version
TLB_EVENT                   = {eis_aec_event_gui_Event}
TLB_EVENT.eis_aec_event_gui = Self
TLB_EVENT.Type              = "TLB"
Self.tlbID                  = WIDGET_BASE(                                  $
                                    TITLE       = widTitle,                 $
                                    COLUMN      = 1,                        $
                                    /FLOATING      ,                        $
                                    ;/MODAL         ,                        $
                                    GROUP_LEADER = Self.group_leader ,      $
                                    UValue      = TLB_EVENT)

;-------------------create the GUI------------------------------;
Self->createGUI

RETURN, 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_aec_event_gui::createGUI

; Get eis_fonts
fonts = eis_fonts()
Event_Pro = 'eis_aec_event_gui_EV'
;
; Title Base
;
aecTitleBase                = WIDGET_BASE(Self.tlbID ,                    $
                                    ROW         = 1,/frame)

value = 'AEC Event Response Properties'
aecLabel                    = WIDGET_LABEL(aecTitleBase ,                 $
                                    value       = value ,                 $
                                    ySize       = 60)


;---------------------------------------------------------------------------
;
; Create AEC Line List Selection widgets
;
;---------------------------------------------------------------------------
;
; Need to input Line List ID
Self.parentClass->getProperty , eis_study=eis_study
index = eis_study.raster_index
CASE OBJ_CLASS(Self.parentClass) OF
    'EIS_MK_STUDY_GUI' : BEGIN
                            ll_id = eis_study.studyRasters[index].ll_id
                            aec_flag = eis_study.studyRasters[index].aec_props.aec_flag
                         END
    ELSE               : stop
ENDCASE

Self.eis_event_ll_gui = OBJ_NEW("eis_event_ll_gui", Self)

; Get index of currently selected line
aece_index = WHERE(aec_flag EQ 1 , count)
IF (count NE 1) THEN stop

Self.eis_event_ll_gui->update_selected_line , ll_id , aece_index


;---------------------------------------------------------------------------
;
; Create AEC Event widgets
;
;---------------------------------------------------------------------------
;
Self.eis_aec_widgets = OBJ_NEW("eis_aec_widgets", Self)

;
;---------------------------------------------------------------------------
;
; ACCEPT button
;
;---------------------------------------------------------------------------
ACCEPT_EVENT                = {eis_aec_event_gui_Event}
ACCEPT_EVENT.eis_aec_event_gui = Self
ACCEPT_EVENT.Type           = "ACCEPT"
ACCEPTbutton                = WIDGET_BUTTON(Self.tlbID ,                    $
                                    value       = ' Accept ' ,              $
                                    Event_Pro   = Event_Pro   ,             $
                                    uValue      = ACCEPT_EVENT)

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_aec_event_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_aec_event_gui_Event
OBJ_DESTROY    , eis_aec_event_gui_Event.eis_aec_event_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_aec_event_gui::CleanUp

OBJ_DESTROY , Self.eis_aec_widgets

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_aec_event_gui::setProperty                                        , $
            upper_threshold               = upper_threshold               , $
            lower_threshold               = lower_threshold               , $
            high_energy_pixel_count_limit = high_energy_pixel_count_limit , $
            low_energy_pixel_count_limit  = low_energy_pixel_count_limit  , $
            run_time                      = run_time                      , $
            exposure_id                   = exposure_id                   , $
            line_index                    = line_index


IF (N_ELEMENTS(upper_threshold) GT 0) THEN BEGIN
    Self.eis_aec_control.upper_threshold = upper_threshold
ENDIF

IF (N_ELEMENTS(lower_threshold) GT 0) THEN BEGIN
    Self.eis_aec_control.lower_threshold = lower_threshold
ENDIF

IF (N_ELEMENTS(high_energy_pixel_count_limit) GT 0) THEN BEGIN
    Self.eis_aec_control.high_energy_pixel_count_limit = high_energy_pixel_count_limit
ENDIF

IF (N_ELEMENTS(low_energy_pixel_count_limit) GT 0) THEN BEGIN
    Self.eis_aec_control.low_energy_pixel_count_limit = low_energy_pixel_count_limit
ENDIF

IF (N_ELEMENTS(run_time) GT 0) THEN BEGIN
    Self.eis_aec_control.run_time = run_time
ENDIF

IF (N_ELEMENTS(exposure_id) GT 0) THEN BEGIN
    Self.eis_aec_control.exposure_id = exposure_id
    print,exposure_id
ENDIF
IF (N_ELEMENTS(line_index) GT 0) THEN BEGIN
    Self.parentClass->aece_line_select , line_index
ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_aec_event_gui::GetProperty, eis_aec_control = eis_aec_control

eis_aec_control = Self.eis_aec_control

End
;______________________________________________________________________________
; Return widget id
;______________________________________________________________________________
Function eis_aec_event_gui::tlbID

    Return, Self.tlbID
End

;______________________________________________________________________________
; Widget_Control wrapper
;______________________________________________________________________________
PRO eis_aec_event_gui::Control, _Ref_Extra=Widget_Control_Keywords

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

;______________________________________________________________________________
; Widget_Info wrapper
;______________________________________________________________________________
Function eis_aec_event_gui::Info, _Ref_Extra=Widget_Info_Keywords

Return, Widget_Info(Self.tlbID, _Extra=Widget_Info_Keywords)

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_aec_event_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_aec_event_gui::XManager

XMANAGER , "eis_aec_event_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_aec_event_gui_EV",                                    $
    cleanup        = "eis_aec_event_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                   $
    /NO_BLOCK

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_aec_event_gui_Event__Define

    struct = {  eis_aec_event_gui_Event,                                         $
                Type                 : "",         $ ;Unique identifier for event
                eis_aec_event_gui   : OBJ_NEW(),  $ ;Reference to object passed
                extra                : 0           $ ;to - often object associated
             }
END
;______________________________________________________________________________
; Event Handler wrapper
;______________________________________________________________________________
PRO eis_aec_event_gui_EV , Event

;Get event handler structure containing eis_aec_event_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_aec_event_gui_Event
;If a WIDGET_TAB event , just quit
IF (TAG_NAMES(event, /STRUCTURE_NAME) EQ 'WIDGET_TAB') THEN BEGIN
    ;print,'tab event'
    RETURN
ENDIF

;Call eis_aec_event_gui's class member procedure "Handler"
eis_aec_event_gui_Event.eis_aec_event_gui->Handler,Event

END
;______________________________________________________________________________
;
; * THIS is the routine for putting in event handling NOT eis_aec_event_gui_Ev above.
;
; Event Handler - handle events.  Derived classes must
; contain their own implementation in order to handle events or else pass in an
; procedure name/function name using the Event_Pro/Event_Func keywords to
; CWidget::Init()
;______________________________________________________________________________
PRO eis_aec_event_gui::Handler, Event

WIDGET_CONTROL, Event.ID, Get_UValue = eis_aec_event_gui_Event
CASE eis_aec_event_gui_Event.Type OF
    "ACCEPT"        : Self->accept
    ELSE            : print,eis_aec_event_gui_Event.Type
ENDCASE

END
;______________________________________________________________________________
; Accept properties and quit
;______________________________________________________________________________
PRO eis_aec_event_gui::accept

Self.parentClass->setProperty , eis_aec_control = Self.eis_aec_control
Self->Control, /Destroy

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO eis_aec_event_gui__Define

    struct = { eis_aec_event_gui                                       ,     $
                    tlbID                 : 0L                         ,     $
                    group_leader          : 0L                         ,     $
                    listID                : 0L                         ,     $
                    parentClass           : OBJ_NEW()                  ,     $
                    eis_aec_widgets       : OBJ_NEW()                  ,     $
                    eis_event_ll_gui      : OBJ_NEW()                  ,     $
                    eis_aec_control       : {eis_aec_control}                $
             }

END
