;+
; NAME
;          EIS_EVENT_GUI
;
; PURPOSE
;          This (object) GUI allows the user/planner to edit the EIS Event
;          trigger control parameters.
;
; INPUTS
;          parentClass - object reference of parent object gui
;          ll_id       - linelist ID. User must select one window
;
; WRITTEN
;          John Rainnie, RAL, some time ago now
;
; HISTORY
;          v0.1 JAR 2-Apr-2008
;               Included new input keywords "ll_id" and "eise_flag" to
;               simplify calling from eis_mk_plan.
;          v0.2 JAR 3-Apr-2008
;               Made this GUI modal.
;          v0.3 JAR 7-Apr-2008
;               Check threshold values are in range.
;          v0.4 JAR 9-Jan-2010
;               Big rebuild. Lose "ll_id" and "eise_flag" keywords.
;
;-
;______________________________________________________________________________
FUNCTION eis_event_gui::Init , parentClass , sra , ra_index

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

;PTR_FREE , Self.sra
;Self.sra          = PTR_NEW(sra)
; Get and save LL_ID
;Self.ll_id        = (*Self.sra)[ra_index].ll_id

Self.sra          = sra
Self.ll_id        = sra.ll_id

; OK, get and store
Self.parentClass->getProperty , eis_event_control = eis_event_control
Self.eis_event_control = eis_event_control

;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = 'EIS Bright Point (Event) Trigger Control Parameters' + pt_version
TLB_EVENT                   = {eis_event_gui_Event}
TLB_EVENT.eis_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,                $
                                    xOffset     = 800)

;-------------------create the GUI------------------------------;
Self->create_hunter_study_gui
Self->create_response_study_main_gui

;---------------------------------------------------------------------------
;
; ACCEPT button
;
;---------------------------------------------------------------------------
ACCEPT_EVENT                = {eis_event_gui_Event}
ACCEPT_EVENT.eis_event_gui = Self
ACCEPT_EVENT.Type           = "ACCEPT"
value = 'Check values and Accept'
ACCEPTbutton                = WIDGET_BUTTON(Self.tlbID               ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = ACCEPT_EVENT)

;Self->createGUI
; Update widgets with existing values
;Self->update_widgets

RETURN, 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui::create_hunter_study_gui

HunterStudyBaseID          = WIDGET_BASE(Self.tlbID                  ,     $
                                   COLUMN      = 1                   ,     $
                                   FRAME       = 4)

;______________________________________________________________________________
; Hunter: Line List Selection
;______________________________________________________________________________
LLBaseID                   = WIDGET_BASE(HunterStudyBaseID           ,     $
                                   ROW         = 1)

value = 'Select Hunter Study Line: '
aLabel                     = WIDGET_LABEL(LLBaseID                   ,     $
                                   value       = value               ,     $
                                   xSize       = 160                 ,     $
                                   /ALIGN_LEFT)

LL_EVENT                   = {eis_event_gui_Event}
LL_EVENT.eis_event_gui     = Self
LL_EVENT.Type              = "LL_SELECT"
ll_list = '                                                          '
Self.llDroplistID          = WIDGET_DROPLIST(LLBaseID                ,     $
                                   value       = ll_list      ,              $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = LL_EVENT ,      $
                                   xSize       = 150                 ,     $
                                   sensitive   = 0)
WIDGET_CONTROL , Self.llDroplistID , set_droplist_select = 0
Self->update_hunter_st_linelist
;______________________________________________________________________________
; Hunter Base: Create X & Y Threshold widgets
;______________________________________________________________________________
thresholdBase              = WIDGET_BASE(HunterStudyBaseID           ,     $
                                   ROW         = 1)

aLabel                     = WIDGET_LABEL(thresholdBase              ,     $
                                   value       = 'X/Y Threshold:'    ,     $
                                   /ALIGN_LEFT                       ,     $
                                   xSize       = 160)

THR_X_EVENT                = {eis_event_gui_Event}
THR_X_EVENT.eis_event_gui  = Self
THR_X_EVENT.Type           = "X_THRESHOLD"
Self.x_thresholdID         = WIDGET_TEXT(thresholdBase               ,     $
                                   value       = '0'                 ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   xSize       = 11                  ,     $
                                   /EDITABLE                         ,     $
                                   /ALL_EVENTS                       ,     $
                                   uValue      = THR_X_EVENT)

THR_Y_EVENT                = {eis_event_gui_Event}
THR_Y_EVENT.eis_event_gui  = Self
THR_Y_EVENT.Type           = "Y_THRESHOLD"
Self.y_thresholdID         = WIDGET_TEXT(thresholdBase               ,     $
                                   value       = '0'                 ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   xSize       = 11                  ,     $
                                   /EDITABLE                         ,     $
                                   /ALL_EVENTS                       ,     $
                                   uValue      = THR_Y_EVENT)

value = ' 32-bit number (1-4294967295)'
aLabel                     = WIDGET_LABEL(thresholdBase              ,     $
                                   value       = value               ,     $
                                   /ALIGN_LEFT)

; Make sure threshold values are greater than zero
Self.eis_event_control.x_threshold = Self.eis_event_control.x_threshold > 1
Self.eis_event_control.y_threshold = Self.eis_event_control.y_threshold > 1
x_threshold       = Self.eis_event_control.x_threshold
y_threshold       = Self.eis_event_control.y_threshold
x_threshold_value = STRCOMPRESS(x_threshold,/REMOVE_ALL)
y_threshold_value = STRCOMPRESS(y_threshold,/REMOVE_ALL)
WIDGET_CONTROL , Self.x_thresholdID , set_value = x_threshold_value
WIDGET_CONTROL , Self.y_thresholdID , set_value = y_threshold_value

;______________________________________________________________________________
; Hunter Base: Create X & Y Min_limit widgets
;______________________________________________________________________________
minLimitBase               = WIDGET_BASE(HunterStudyBaseID           ,     $
                                   ROW         = 1)

aLabel                     = WIDGET_LABEL(minLimitBase               ,     $
                                   value       = 'X/Y Min Limit:'    ,     $
                                   /ALIGN_LEFT                       ,     $
                                   xSize       = 160)

MINLIM_X_EVENT             = {eis_event_gui_Event}
MINLIM_X_EVENT.eis_event_gui = Self
MINLIM_X_EVENT.Type       = "X_MIN_LIMT"
value = [' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ']
Self.x_min_limitID        = WIDGET_DROPLIST(minLimitBase             ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = MINLIM_X_EVENT)

MINLIM_Y_EVENT             = {eis_event_gui_Event}
MINLIM_Y_EVENT.eis_event_gui = Self
MINLIM_Y_EVENT.Type       = "Y_MIN_LIMT"
Self.y_min_limitID        = WIDGET_DROPLIST(minLimitBase             ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = MINLIM_Y_EVENT)


; Make sure Min Limit values are greater than zero
Self.eis_event_control.x_min_limit = Self.eis_event_control.x_min_limit > 1
Self.eis_event_control.y_min_limit = Self.eis_event_control.y_min_limit > 1
x_min_limit_index = Self.eis_event_control.x_min_limit - 1
y_min_limit_index = Self.eis_event_control.y_min_limit - 1
WIDGET_CONTROL , Self.x_min_limitID , set_droplist_select = x_min_limit_index
WIDGET_CONTROL , Self.y_min_limitID , set_droplist_select = y_min_limit_index

;______________________________________________________________________________
; Hunter Base: Create NoData widgets
;______________________________________________________________________________
noDataBase                 = WIDGET_BASE(HunterStudyBaseID           ,     $
                                   ROW         = 1)

noDataExcBaseID            = WIDGET_BASE(noDataBase                  ,     $
                                   ROW         = 1                   ,     $
                                   /NONEXCLUSIVE)

NODATA_EVENT               = {eis_event_gui_Event}
NODATA_EVENT.eis_event_gui = Self
NODATA_EVENT.Type          = "NODATA"
value = 'Blah'
Self.noDataID              = WIDGET_BUTTON(noDataExcBaseID           ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = NODATA_EVENT        ,     $
                                   SENSITIVE   = 0)

no_hunt_data = Self.eis_event_control.no_hunt_data
WIDGET_CONTROL , Self.noDataID , set_button = no_hunt_data




END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui::create_response_study_main_gui

Self.R_STBaseID            = WIDGET_BASE(Self.tlbID                  ,     $
                                   COLUMN      = 1                   ,     $
                                   FRAME       = 4)

R_ST_SELECTBase            = WIDGET_BASE(Self.R_STBaseID             ,     $
                                   ROW         = 1)

R_ST_EVENT                 = {eis_event_gui_Event}
R_ST_EVENT.eis_event_gui   = Self
R_ST_EVENT.Type            = "RESPONSE_STUDY"
value = ' Select Response study... '
response_st_button         = WIDGET_BUTTON(R_ST_SELECTBase                ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = R_ST_EVENT          ,     $
                                   ;xSize       = 150                 ,     $
                                   ySize       = 30)

aLabel                     = WIDGET_LABEL(R_ST_SELECTBase                 ,      $
                                    value       = '  ID: '          ,      $
                                    xSize       = 50 ,                      $
                                    /ALIGN_LEFT)

Self.rst_idID              = WIDGET_LABEL(R_ST_SELECTBase ,                $
                                    value       = idValue ,                $
                                    xSize       = 50 ,                      $
                                    /ALIGN_LEFT)

aLabel                     = WIDGET_LABEL(R_ST_SELECTBase ,                $
                                    value       = ' Acronym:  ' ,      $
                                    /ALIGN_LEFT)

Self.rst_acronymID         = WIDGET_LABEL(R_ST_SELECTBase ,                $
                                    value       = '-' ,                   $
                                    xSize       = 220 ,                     $
                                    /ALIGN_LEFT)

response_st_id = Self.eis_event_control.response_identifier
IF (response_st_id LE 0) THEN RETURN

stop



END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui::createGUI

; Get eis_fonts
fonts = eis_fonts()
Event_Pro = 'eis_event_gui_EV'
;______________________________________________________________________________
;
; Title Base
;
;______________________________________________________________________________
;TitleBase                  = WIDGET_BASE(Self.tlbID                  ,     $
;                                   COLUMN      = 1                   ,     $
;                                   FRAME       = 4)
;
;value = '  EIS Bright Point (Event) Trigger Control Parameters'
;aLabel                     = WIDGET_LABEL(TitleBase                  ,     $
;                                   value       = value               ,     $
;                                   ySize       = 60                  ,     $
;                                   /ALIGN_CENTER                     ,     $
;                                   font        = fonts.bold)

;______________________________________________________________________________
; Response Study Selection
;______________________________________________________________________________


;______________________________________________________________________________
; Repoint Raster 1: Selection
;______________________________________________________________________________
RA1BaseID                  = WIDGET_BASE(R_STBaseID                  ,     $
                                   COLUMN      = 1                   ,     $
                                   FRAME       = 1)

RA1SelectBaseID            = WIDGET_BASE(RA1BaseID                   ,     $
                                   ROW         = 1)

value = ' Repoint Raster 1: '
aLabel                     = WIDGET_LABEL(RA1SelectBaseID            ,     $
                                   value       = value               ,     $
                                   /DYNAMIC_RESIZE                   ,     $
                                   /ALIGN_LEFT)

RA_EVENT                   = {eis_event_gui_Event}
RA_EVENT.eis_event_gui     = Self
RA_EVENT.Type              = "RA_SELECT"
ra_list = ''
Self.ra_1_DroplistID       = WIDGET_DROPLIST(RA1SelectBaseID         ,     $
                                   value       = ra_list             ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = RA_EVENT            ,     $
                                   xSize       = 600                 ,     $
                                   sensitive   = 0)
WIDGET_CONTROL , Self.ra_1_DroplistID , set_droplist_select = 0


;______________________________________________________________________________
; Repoint Raster 1: Pointing
;______________________________________________________________________________
RA1PointingBaseID          = WIDGET_BASE(RA1BaseID                   ,     $
                                   ROW         = 1)

RA1PointingBaseExcID       = WIDGET_BASE(RA1PointingBaseID           ,     $
                                   ROW         = 1                   ,     $
                                   /NONEXCLUSIVE)

REPOINT_X_EVENT            = {eis_event_gui_Event}
REPOINT_X_EVENT.eis_event_gui = Self
REPOINT_X_EVENT.Type       = "X_REPOINT"
value = 'Repoint X'
Self.x_repointID            = WIDGET_BUTTON(RA1PointingBaseExcID     ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = REPOINT_X_EVENT)

REPOINT_Y_EVENT            = {eis_event_gui_Event}
REPOINT_Y_EVENT.eis_event_gui = Self
REPOINT_Y_EVENT.Type       = "Y_REPOINT"
value = 'Repoint Y'
Self.y_repointID           = WIDGET_BUTTON(RA1PointingBaseExcID      ,     $
                                   value       = value               ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = REPOINT_Y_EVENT)

adjust_x = Self.eis_event_control.adjust_x
adjust_y = Self.eis_event_control.adjust_y
WIDGET_CONTROL , Self.x_repointID , set_button = adjust_x
WIDGET_CONTROL , Self.y_repointID , set_button = adjust_y

; Manual Repointing
RA1_X_EVENT                = {eis_event_gui_Event}
RA1_X_EVENT.eis_event_gui  = Self
RA1_X_EVENT.Type           = "RA1_X"
Self.ra1_xID               = WIDGET_TEXT(RA1PointingBaseID           ,     $
                                   value       = '0'                 ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   xSize       = 11                  ,     $
                                   /EDITABLE                         ,     $
                                   ;/ALL_EVENTS                       ,     $
                                   uValue      = RA1_X_EVENT         ,     $
                                   SENSITIVE   = 0)

RA1_Y_EVENT                = {eis_event_gui_Event}
RA1_Y_EVENT.eis_event_gui  = Self
RA1_Y_EVENT.Type           = "RA1_Y"
Self.ra1_yID               = WIDGET_TEXT(RA1PointingBaseID           ,     $
                                   value       = '0'                 ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   xSize       = 11                  ,     $
                                   /EDITABLE                         ,     $
                                   ;/ALL_EVENTS                       ,     $
                                   uValue      = RA1_Y_EVENT         ,     $
                                   SENSITIVE   = 0)

; Sensitive?
IF (adjust_x EQ 0) THEN WIDGET_CONTROL , Self.ra1_xID , sensitive = 1
IF (adjust_y EQ 0) THEN WIDGET_CONTROL , Self.ra1_yID , sensitive = 1
; Set default values - as x_point and y_point
; How many rasters are there in the response study

x_point_string = STRTRIM(STRING(format='(F-10.2)',Self.sra.x_point),2)
y_point_string = STRTRIM(STRING(format='(F-10.2)',Self.sra.y_point),2)
WIDGET_CONTROL , Self.ra1_xID , set_value = x_point_string
WIDGET_CONTROL , Self.ra1_yID , set_value = y_point_string





END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_event_gui_Event
OBJ_DESTROY    , eis_event_gui_Event.eis_event_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_event_gui::CleanUp


END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui::setProperty                                   ,          $
                repoint_raster_index = repoint_raster_index      ,          $
                response_study_id    = response_study_id         ,          $
                x_repoint            = x_repoint                 ,          $
                y_repoint            = y_repoint                 ,          $
                x_threshold          = x_threshold               ,          $
                y_threshold          = y_threshold               ,          $
                x_min_limit          = x_min_limit               ,          $
                y_min_limit          = y_min_limit               ,          $
                line_index           = line_index

IF (N_ELEMENTS(repoint_raster_index) GT 0) THEN BEGIN
      stop
;     Self.eis_event_control.raster_identifier = repoint_raster_index
;     Self->update_raster_index
ENDIF

IF (N_ELEMENTS(response_study_id) GT 0) THEN BEGIN
    Self.eis_event_control.response_identifier = response_study_id
    Self->update_response_study
ENDIF

IF (N_ELEMENTS(x_repoint)   GT 0) THEN BEGIN
    Self.eis_event_control.adjust_x = x_repoint
ENDIF

IF (N_ELEMENTS(y_repoint)   GT 0) THEN BEGIN
    Self.eis_event_control.adjust_y = y_repoint
ENDIF

IF (N_ELEMENTS(x_threshold) GT 0) THEN BEGIN
    Self.eis_event_control.x_threshold = x_threshold
ENDIF

IF (N_ELEMENTS(y_threshold) GT 0) THEN BEGIN
    Self.eis_event_control.y_threshold = y_threshold
ENDIF

IF (N_ELEMENTS(x_min_limit) GT 0) THEN BEGIN
    Self.eis_event_control.x_min_limit = x_min_limit
ENDIF

IF (N_ELEMENTS(y_min_limit) GT 0) THEN BEGIN
    Self.eis_event_control.y_min_limit = y_min_limit
ENDIF
IF (N_ELEMENTS(line_index) GT 0) THEN BEGIN
    Self.parentClass->eise_line_select , line_index
ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui::GetProperty, eis_event_control = eis_event_control

eis_event_control = Self.eis_event_control

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

    Return, Self.tlbID
End

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

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

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

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

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_event_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_event_gui::XManager

XMANAGER , "eis_event_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_event_gui_EV",                                    $
    cleanup        = "eis_event_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                   $
    /NO_BLOCK

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_event_gui_Event__Define

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

;Get event handler structure containing eis_event_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_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_event_gui's class member procedure "Handler"
eis_event_gui_Event.eis_event_gui->Handler,Event

END
;______________________________________________________________________________
;
; * THIS is the routine for putting in event handling NOT eis_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_event_gui::Handler, Event

WIDGET_CONTROL, Event.ID, Get_UValue = eis_event_gui_Event
CASE eis_event_gui_Event.Type OF
    "ACCEPT"          : Self->accept
    "RESPONSE_STUDY"  : eis_xstudy , parentClass = Self , /MODAL
    "RA_SELECT"       : Self->select_raster , Event
    "LL_SELECT"       : Self->select_line , Event
    "X_THRESHOLD"     : ;Self->update_x_threshold
    "Y_THRESHOLD"     : ;Self->update_y_threshold
    "X_MIN_LIMT"      : Self->update_x_min_limit , event
    "Y_MIN_LIMT"      : Self->update_y_min_limit , event
    "X_REPOINT"       : Self->update_adjust_x , event
    "Y_REPOINT"       : Self->update_adjust_y , event
    "RA1_X"           : Self->update_ra1_x
    "RA1_Y"           : Self->update_ra1_y
    "NODATA"          : Self.eis_event_control.no_hunt_data = event.select
    ELSE              : print,eis_event_gui_Event.Type
ENDCASE

END
;______________________________________________________________________________
; OK, get raster X position
;______________________________________________________________________________
PRO eis_event_gui::update_ra1_x

WIDGET_CONTROL , Self.ra1_xID , get_value = newValue
; arguments-> name , newValue , oldValue , minValue , maxValue , multiple
valid  = eis_validate_input('X_POINT' , newValue[0] ,                     $
                           Self.eis_event_control.ra1_xcen , -2000. , 2000.)
CASE valid.valid OF
    0:  BEGIN
            stop
            newValue = Self.eis_event_control.ra1_xcen
            BEEP
            complain = DIALOG_MESSAGE( valid.mText ,                        $
                                 DIALOG_PARENT = Self.tlbID,                $
                                 /ERROR )
        END
    1:  newValue = FLOAT(newValue[0])
ENDCASE

Self.eis_event_control.ra1_xcen = newValue
; Update widget value
x_point = STRTRIM(STRING(format='(F-10.2)',newValue),2)
WIDGET_CONTROL , Self.ra1_xID , set_value = x_point

END
;______________________________________________________________________________
; OK, get raster Y position
;______________________________________________________________________________
PRO eis_event_gui::update_ra1_y

WIDGET_CONTROL , Self.ra1_yID , get_value = newValue
; arguments-> name , newValue , oldValue , minValue , maxValue , multiple
valid  = eis_validate_input('Y_POINT' , newValue[0] ,                     $
                           Self.eis_event_control.ra1_ycen , -2000. , 2000.)
CASE valid.valid OF
    0:  BEGIN
            stop
            newValue = Self.eis_event_control.ra1_ycen
            BEEP
            complain = DIALOG_MESSAGE( valid.mText ,                        $
                                 DIALOG_PARENT = Self.tlbID,                $
                                 /ERROR )
        END
    1:  newValue = FLOAT(newValue[0])
ENDCASE

Self.eis_event_control.ra1_ycen = newValue
; Update widget value
y_point = STRTRIM(STRING(format='(F-10.2)',newValue),2)
WIDGET_CONTROL , Self.ra1_yID , set_value = y_point

END
;______________________________________________________________________________
; Update adjust_x
;______________________________________________________________________________
PRO eis_event_gui::update_adjust_x , event

Self.eis_event_control.adjust_x = event.select
CASE event.select OF
   0    : WIDGET_CONTROL , Self.ra1_xID , sensitive = 1
   ELSE : WIDGET_CONTROL , Self.ra1_xID , sensitive = 0
ENDCASE

END
;______________________________________________________________________________
; Update adjust_y
;______________________________________________________________________________
PRO eis_event_gui::update_adjust_y , event

Self.eis_event_control.adjust_y = event.select
CASE event.select OF
   0    : WIDGET_CONTROL , Self.ra1_yID , sensitive = 1
   ELSE : WIDGET_CONTROL , Self.ra1_yID , sensitive = 0
ENDCASE

END
;______________________________________________________________________________
; Select x_min_limit
;______________________________________________________________________________
PRO eis_event_gui::update_x_min_limit , event

index = WIDGET_INFO(Self.x_min_limitID , /DROPLIST_SELECT)
Self.eis_event_control.x_min_limit = event.index + 1

END
;______________________________________________________________________________
; Select y_min_limit
;______________________________________________________________________________
PRO eis_event_gui::update_y_min_limit , event

index = WIDGET_INFO(Self.y_min_limitID , /DROPLIST_SELECT)
Self.eis_event_control.y_min_limit = event.index + 1

END
;______________________________________________________________________________
; Select Repoint Raster
;______________________________________________________________________________
PRO eis_event_gui::select_line , event

Self.eis_event_control.line_index = event.index

END
;______________________________________________________________________________
; Select Repoint Raster
;______________________________________________________________________________
PRO eis_event_gui::select_raster , event

; Get ra_id
WIDGET_CONTROL , Self.ra_1_DroplistID , get_value = list
item  = list[event.index]
ra_id = FIX(STRMID(item , 0 , 6))
; Update raster selection
Self.eis_event_control.raster_identifier = ra_id

END
;______________________________________________________________________________
; OK, load the study
;______________________________________________________________________________
PRO eis_event_gui::loadStudy , st_id , filler = filler

; Update structure with new response study ID
Self.eis_event_control.response_identifier = st_id
; By default, reset raster ID and Line List index to zero
Self.eis_event_control.raster_identifier   = 0
; Now update widgets
Self->update_response_study

END
;______________________________________________________________________________
; Kill eis_xStudy
;______________________________________________________________________________
PRO eis_event_gui::kill_xstudy , xstudy_obj

xstudy_obj->Control, /Destroy

END
;______________________________________________________________________________
; Load study
;______________________________________________________________________________
PRO eis_event_gui::reset_widgets

; Update response study values
WIDGET_CONTROL , Self.rst_idID      , set_value = '-'
WIDGET_CONTROL , Self.rst_acronymID , set_value = '-'
WIDGET_CONTROL , Self.ra_1_DroplistID  , sensitive = 0 , set_value = 'None'

END
;______________________________________________________________________________
; Load study
;______________________________________________________________________________
PRO eis_event_gui::update_widgets

; Update Hunter Study Line List
Self->update_hunter_st_linelist
; Update Response Study parameters
Self->update_response_study

END
;______________________________________________________________________________
; Load study
;______________________________________________________________________________
PRO eis_event_gui::update_response_study

st_id = Self.eis_event_control.response_identifier
; Check study exists and is valid
IF (st_id EQ 0) THEN BEGIN
   Self->reset_widgets
   RETURN
ENDIF

eis_study = db_read_study_entry(st_id)
id        = STRING(format='(I06)' , st_id)
acronym   = STRTRIM(eis_study.acronym , 2)

; Update response study values
WIDGET_CONTROL , Self.rst_idID      , set_value = id
WIDGET_CONTROL , Self.rst_acronymID , set_value = STRTRIM(acronym,2)

ra_id = Self.eis_event_control.raster_identifier
IF (ra_id EQ 0) THEN BEGIN
   ra_id    = eis_study.studyRasters[0].ra_id
   ra_index = 0
ENDIF ELSE BEGIN
   ; Get list of raster IDs - and hence its index
   ra_id_list = eis_study.studyRasters[0:eis_study.nRasters-1].ra_id
   ra_index   = WHERE(ra_id_list EQ ra_id , ra_count)
ENDELSE

; Update repoint raster ID
Self.eis_event_control.raster_identifier = ra_id

; OK, populate raster droplist
ra_list = Self->get_ra_droplist(eis_study)

; OK, populate raster droplist
WIDGET_CONTROL , Self.ra_1_DroplistID , set_value = ra_list
WIDGET_CONTROL , Self.ra_1_DroplistID , set_droplist_select = ra_index[0]
WIDGET_CONTROL , Self.ra_1_DroplistID , sensitive = 1

END
;______________________________________________________________________________
; OK, get the line list
;______________________________________________________________________________
PRO eis_event_gui::update_hunter_st_linelist

IF (Self.ll_id LT 1) THEN BEGIN
   WIDGET_CONTROL , Self.llDroplistID , set_value = '' , sensitive = 0
   RETURN
ENDIF

ll_list = Self->get_ll_droplist()
index = Self.eis_event_control.line_index
WIDGET_CONTROL , Self.llDroplistID , set_value           = ll_list   , $
                                     sensitive           = 1         , $
                                     set_droplist_select = index

END
;______________________________________________________________________________
; OK, get the line list
;______________________________________________________________________________
FUNCTION eis_event_gui::get_ll_droplist

; Ca XVII 192.82
; O VI    184.12
ll      = db_read_linelist_entry(Self.ll_id)
ll_list = STRARR(ll.nLines)

windHeight = Self.sra.windHeight
ra         = db_read_raster_entry(Self.sra.ra_id)
windWidth  = ra.dataWindows

FOR i = 0 , ll.nLines - 1 DO BEGIN

   dims = STRING(format='(A-5,I-3,A-1,I-3,A-1)' ,  $
                     '(HxW: ',windHeight,'x',windWidth[i],')')
   ll_list[i] = STRING(format='(A-20,F-6.2,A-4,A-16)' ,     $
                 ll.lines[i].name,ll.lines[i].wavelength/100.,''     ,     $
                 STRCOMPRESS(dims,/REMOVE_ALL))

ENDFOR

RETURN , ll_list

END
;______________________________________________________________________________
; OK, get the raster list
;______________________________________________________________________________
FUNCTION eis_event_gui::get_ra_droplist , eis_study

; 000001  Test_raster_3 [RA:000002][SNS:]
; O VI   184.12

ra_list = STRARR(eis_study.nRasters)
FOR i = 0 , eis_study.nRasters - 1 DO BEGIN

   sra        = eis_study.studyRasters[i]
   idValue    = STRING(format='(I06)',sra.ra_id)
   ra_list[i] = STRING(format='(A-8,A-20,A-60)'                         ,     $
                 idValue,sra.ra_acronym,sra.ra_title)

ENDFOR

RETURN , ra_list

END
;______________________________________________________________________________
; Accept properties and quit
;______________________________________________________________________________
FUNCTION eis_event_gui::update_xy_threshold

WIDGET_CONTROL , Self.x_thresholdID , get_value = x_threshold
WIDGET_CONTROL , Self.y_thresholdID , get_value = y_threshold

IF (is_number(x_threshold) NE 1) THEN BEGIN
   old_value = STRCOMPRESS(Self.eis_event_control.x_threshold,/REMOVE_ALL)
   WIDGET_CONTROL , Self.x_thresholdID , set_value = old_value
   RETURN , 0
ENDIF ELSE BEGIN
   Self.eis_event_control.x_threshold = ULONG(x_threshold)
ENDELSE

IF (is_number(y_threshold) NE 1) THEN BEGIN
   old_value = STRCOMPRESS(Self.eis_event_control.y_threshold,/REMOVE_ALL)
   WIDGET_CONTROL , Self.y_thresholdID , set_value = old_value
   RETURN , 0
ENDIF ELSE BEGIN
   Self.eis_event_control.y_threshold = ULONG(y_threshold)
ENDELSE

RETURN , 1

END
;______________________________________________________________________________
; Accept properties and quit
;______________________________________________________________________________
FUNCTION eis_event_gui::check_values

valid = {valid:1B , mText:['','','','','']}
valid.mText[0] = 'This Event Trigger is NOT valid!'
valid.mText[4] = 'Do you want to quit anyway?'

x_threshold = Self.eis_event_control.x_threshold
y_threshold = Self.eis_event_control.y_threshold
; X/T Threshold
lower_limit = 1
upper_limit = ULONG(2.^32)-1
IF (x_threshold LT lower_limit) OR                                         $
   (y_threshold LT lower_limit) OR                                         $
   (x_threshold GT upper_limit) OR                                         $
   (y_threshold GT upper_limit) THEN BEGIN
       valid.mText[2] = "(Error: Threshold values are out of range)"
       valid.valid    = 0
       RETURN , valid
ENDIF

; Check Response Study and Repointing Raster IDs are valid
IF (Self.eis_event_control.response_identifier LT 1) THEN BEGIN
   valid.mText[2] = '(Error: Response Study is NOT selected)'
   valid.valid    = 0
   RETURN , valid
ENDIF
IF (Self.eis_event_control.raster_identifier LT 1) THEN BEGIN
   valid.mText[2] = '(Error: : Repointing Raster is NOT selected)'
   valid.valid    = 0
   RETURN , valid
ENDIF


; X/T Min Limit - no checking required

RETURN , valid

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

; Update x/y_threshold values into structure
valid = Self->update_xy_threshold()
IF (valid NE 1) THEN BEGIN
   stop
ENDIF
; Do some checks
valid = Self->check_values()
IF (valid.valid NE 1) THEN BEGIN
    BEEP
    question = DIALOG_MESSAGE( valid.mText                           ,     $
                     DIALOG_PARENT = Self.tlbID                      ,     $
                     /QUESTION                                       ,     $
                     /DEFAULT_NO)
    IF (question EQ 'No') THEN RETURN
ENDIF

help,Self.eis_event_control,/str
Self.parentClass->setProperty , eis_event_control = Self.eis_event_control
; Quit GUI
Self->Control, /Destroy

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO eis_event_gui__Define

    struct = { eis_event_gui                                           ,     $
                    tlbID                 : 0L                         ,     $
                    group_leader          : 0L                         ,     $
                    parentClass           : OBJ_NEW()                  ,     $
                    sra                   : {eis_study_raster}         ,     $
                    ra_index              : 0                          ,     $
                    ll_id                 : 0L                         ,     $
                    R_STBaseID            : 0L                         ,     $
                    ra_1_DroplistID       : 0L                         ,     $
                    llDroplistID          : 0L                         ,     $
                    rst_idID              : 0L                         ,     $
                    rst_acronymID         : 0L                         ,     $
                    x_thresholdID         : 0L                         ,     $
                    y_thresholdID         : 0L                         ,     $
                    x_min_limitID         : 0L                         ,     $
                    y_min_limitID         : 0L                         ,     $
                    x_repointID           : 0L                         ,     $
                    y_repointID           : 0L                         ,     $
                    noDataID              : 0L                         ,     $
                    ra1_xID               : 0L                         ,     $
                    ra1_yID               : 0L                         ,     $
                    eis_event_control     : {eis_event_control}              $
             }

END
