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

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

CASE OBJ_CLASS(parentClass) OF
    "EIS_EVENT_GUI"     : Self.parentClass->getProperty ,                   $
                              eis_event_control = control_struct
    "EIS_FLARE_GUI"     : Self.parentClass->getProperty ,                   $
                              eis_flare_control = control_struct
    "EIS_XRT_FLARE_GUI" : Self.parentClass->getProperty ,                   $
                              eis_xrt_flare_control = control_struct
    ELSE                : stop
ENDCASE

; Get response_study ID
Self.st_id = control_struct.response_identifier

;-------------------create the main base---------------------------------------;
TLB_EVENT                   = {eis_response_study_gui_Event}
TLB_EVENT.eis_response_study_gui       = Self
TLB_EVENT.Type              = "TLB"
Self.tlbID                  = WIDGET_BASE( Self.group_leader     ,          $
                                    COLUMN      = 1)

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

RETURN, 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_response_study_gui::createGUI , control_struct

Event_Pro = 'eis_response_study_gui_EV'


;
; Response Study Base
;
xrtResponseBase             = WIDGET_BASE(Self.tlbID ,                         $
                                    ROW         = 1)

XRT_RESPONSE_EVENT          = {eis_response_study_gui_Event}
XRT_RESPONSE_EVENT.eis_response_study_gui = Self
XRT_RESPONSE_EVENT.Type     = "RESPONSE_STUDY"
value = ' Select Response study '
xrt_exp_idID                = WIDGET_BUTTON(xrtResponseBase  ,              $
                                    value       = value      ,              $
                                    Event_Pro   = Event_Pro           ,     $
                                    uValue      = XRT_RESPONSE_EVENT ,      $
                                    xSize       = 150,                      $
                                    ySize       = 30)

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



idValue = STRING(format='(I06)' , Self.st_id )
IF (Self.st_id EQ 0) THEN BEGIN
    eis_study = {eis_study}
    acronym = 'No study selected'
ENDIF ELSE BEGIN
    eis_study = db_read_study_entry(Self.st_id)
    acronym   = eis_study.acronym
ENDELSE


Self.idID                   = WIDGET_LABEL(xrtResponseBase ,                $
                                    value       = idValue ,                $
                                    xSize       = 50 ,                      $
                                    /ALIGN_LEFT)

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

Self.acronymID              = WIDGET_LABEL(xrtResponseBase ,                $
                                    value       = acronym ,                   $
                                    xSize       = 220 ,                     $
                                    /ALIGN_LEFT)


;
;
;
; ;
; ; Repointing Raster Index
; ;
; xrt_ra_indexBase            = WIDGET_BASE(Self.tlbID ,                         $
;                                     ROW         = 1)
;
; XRT_RA_INDEX_EVENT          = {eis_response_study_gui_Event}
; XRT_RA_INDEX_EVENT.eis_response_study_gui = Self
; XRT_RA_INDEX_EVENT.Type     = "RA_INDEX"
; value = ' Repointing Raster '
; xrt_exp_idID                = WIDGET_BUTTON(xrt_ra_indexBase  ,              $
;                                     value       = value      ,              $
;                                     Event_Pro   = Event_Pro           ,     $
;                                     uValue      = XRT_RA_INDEX_EVENT ,      $
;                                     xSize       = 150,                      $
;                                     ySize       = 30)
;
; aLabel                      = WIDGET_LABEL(xrt_ra_indexBase ,                $
;                                     value       = '  ID:  ' ,               $
;                                     xSize       = 50 ,                      $
;                                     /ALIGN_LEFT)
;
;
; ; Get saved raster_index
; value = STRCOMPRESS(control_struct.raster_identifier,/REMOVE_ALL)
; Self.ra_indexID             = WIDGET_LABEL(xrt_ra_indexBase ,                $
;                                     value       = value ,                $
;                                     xSize       = 50 ,                      $
;                                     /ALIGN_LEFT)
;
; ;______________________________________________________________________________
; ; Line List Selection  - NOT for XRT Flare though
; ;______________________________________________________________________________
; IF (OBJ_CLASS(Self.parentClass) EQ 'EIS_XRT_FLARE_GUI') THEN RETURN
;
; LLBaseID                   = WIDGET_BASE(Self.tlbID                  ,     $
;                                    ROW         = 1)
;
; value = ' Select a Line: '
; aLabel                      = WIDGET_LABEL(LLBaseID ,                $
;                                     value       = value ,               $
;                                     /DYNAMIC_RESIZE ,                      $
;                                     /ALIGN_LEFT)
;
; LL_EVENT                   = {eis_response_study_gui_Event}
; LL_EVENT.eis_response_study_gui = Self
; LL_EVENT.Type              = "LL"
; value = ['1','2','3']
; ;ra_id = eis_study.studyRasters[0].ra_id
; ll_id = eis_study.studyRasters[0].ll_id
; IF (ll_id EQ 0) THEN BEGIN
;    ll_list   = ['None']
;    sensitive = 0
; ENDIF ELSE BEGIN
;    ll_list   = Self->get_ll_droplist(ll_id)
;    sensitive = 1
; ENDELSE
;
; Self.llDroplistID          = WIDGET_DROPLIST(LLBaseID                ,     $
;                                    value       = ll_list      ,              $
;                                    Event_Pro   = Event_Pro           ,     $
;                                    uValue      = LL_EVENT ,      $
;                                    xSize       = 150                 ,     $
;                                    sensitive   = sensitive)
; WIDGET_CONTROL , Self.llDroplistID , set_droplist_select = 0

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_response_study_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_response_study_gui_Event
OBJ_DESTROY    , eis_response_study_gui_Event.eis_response_study_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_response_study_gui::CleanUp


END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_response_study_gui::setProperty , raster_index = raster_index

IF (N_ELEMENTS(raster_index) GT 0) THEN BEGIN
    ;Self.parentClass->setProperty , raster_index = raster_index
    stop
ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_response_study_gui::GetProperty, acronymID = acronymID ,            $
                                         idID      = idID      ,            $
                                         ra_indexID = ra_indexID

acronymID  = Self.acronymID
idID       = Self.idID
ra_indexID = Self.ra_indexID

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

    Return, Self.tlbID
End

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

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

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

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

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_response_study_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_response_study_gui::XManager;,group=group

XMANAGER , "eis_response_study_gui" ,   Self.tlbID ,                        $
    Event_Handler  = "eis_response_study_gui_EV",                           $
    cleanup        = "eis_response_study_gui_Cleanup",                      $
    GROUP_LEADER   = Self.group_leader ,                                    $
    /NO_BLOCK

end

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_response_study_gui_Event__Define

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

;Get event handler structure containing eis_response_study_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_response_study_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_response_study_gui's class member procedure "Handler"
eis_response_study_gui_Event.eis_response_study_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_response_study_gui_Event
CASE eis_response_study_gui_Event.Type OF
    "RESPONSE_STUDY"  :  eis_xstudy , parentClass = Self , /MODAL
    "RA_INDEX"        :  Self->select_raster_index
    ELSE:       print,eis_response_study_gui_Event.Type
ENDCASE
END
;______________________________________________________________________________
; OK, a new study has been selected. Now refresh Line List dropbox
;______________________________________________________________________________
PRO eis_response_study_gui::update_ll_droplist , st_id

Self.st_id = st_id
eis_study = db_read_study_entry(Self.st_id)

stop

END
;______________________________________________________________________________
; OK, load the study
;______________________________________________________________________________
FUNCTION eis_response_study_gui::get_ll_droplist , ll_id

; Fe X   174.53
; O VI   184.12

; Read Line List
ll      = db_read_linelist_entry(ll_id)
ll_list = STRARR(ll.nLines)

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

   ll_list[i] = STRING(format='(A-15,F-6.2)'                         ,     $
                 ll.lines[i].name,ll.lines[i].wavelength/100.)

ENDFOR

RETURN , ll_list

END
;______________________________________________________________________________
; OK, load the study
;______________________________________________________________________________
PRO	eis_response_study_gui::select_raster_index

IF (Self.st_id EQ 0) THEN BEGIN
    BEEP
    mText = "Select a Response Study first! Aborting."
    complain = DIALOG_MESSAGE( mText ,                                      $
                     DIALOG_PARENT = Self.tlbID,                            $
                     /ERROR )
    RETURN
ENDIF


st  = db_read_study_entry(Self.st_id)

IF (st.nRasters EQ 1) THEN BEGIN
    BEEP
    mText = "There is only one raster in this study."
    complain = DIALOG_MESSAGE( mText ,                                      $
                     DIALOG_PARENT = Self.tlbID,                            $
                     /INFORMATION )

    ra_id = st.studyRasters[0].ra_id
    Self.parentClass->setProperty , repoint_raster_index = ra_id
    RETURN
ENDIF

; Invoke GUI to select raster
obj = OBJ_NEW("eis_raster_index_gui" , Self , st)
obj->Realize
obj->XManager
obj->readStudyRasters

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

xstudy_obj->Control, /Destroy

END
;______________________________________________________________________________
; OK, load the study
;______________________________________________________________________________
PRO eis_response_study_gui::update_raster_index , repoint_raster_index

; Read study
st  = db_read_study_entry(Self.st_id)
ra_id = st.studyRasters[repoint_raster_index].ra_id
Self.parentClass->setProperty , repoint_raster_index = ra_id

END
;______________________________________________________________________________
; OK, load the study
;______________________________________________________________________________
PRO	eis_response_study_gui::loadStudy , st_id

Self.st_id = st_id
Self.parentClass->setProperty, response_study_id = st_id
;Self->update_ll_droplist , st_id

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO	eis_response_study_gui__Define

    struct          =	{ eis_response_study_gui                        ,     $
                                    tlbID           : 0L              ,     $
                                    group_leader    : 0L              ,     $
                                    parentClass     : OBJ_NEW()       ,     $
                                    idID            : 0L              ,     $
                                    acronymID       : 0L              ,     $
                                    llDroplistID    : 0L              ,     $
                                    ra_indexID      : 0L              ,     $
                                    st_id           : 0L                    $
                      }


END
