;+
; PROJECT
;           SOLARB EIS
;
; NAME
;          eis_meta_tl_gui__DEFINE
;
; PURPOSE
;          eis_meta_tl_gui class definition
;
; NOTES
;          The
;
; CATEGORY
;          EIS timeline planning
;
; WRITTEN
;          John A Rainne RAL 24-Jun-2008
;
; VERSION
;          v0.1 JAR 4-Aug-2008
;               Update meta_str when quitting, and update ini file.
;
;
;______________________________________________________________________________
FUNCTION eis_meta_tl_gui::Init , parentClass

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


;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = "EIS Metadata for Multiple Timeline Entries" + pt_version
TLB_EVENT                   = {eis_meta_tl_gui_Event}
TLB_EVENT.eis_meta_tl_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_meta_tl_gui::createGUI

Event_Pro   = 'eis_meta_tl_gui_EV'

; Get tStart and tStop
Self.parentClass->getProperty , tl_graphics = tl_graphics            ,     $
                                meta_str    = meta_str
; Ok, get display start time (TAI) in UTC
tStart_tai   = tl_graphics.axes.x_axis_day_tai

startTime    = anytim2utc(tl_graphics.axes.x_axis_day_tai)
; Convert hours (cursor position, event.x) into UTC
tLength      = sec2utc(tl_graphics.axes.x_axis_length * 60. * 60.)

tStop        = startTime
tStop.mjd    = startTime.mjd  + tLength.mjd
tStop.time   = startTime.time + tLength.time
tStop_tai    = utc2tai(tStop)

tStart_string  = ANYTIM2UTC(tStart_tai  , /STIME , /TRUNCATE)
tStop_string   = ANYTIM2UTC(tStop_tai   , /STIME , /TRUNCATE)

;---------------------------------------------------------------------------
;
; Time START
;
;---------------------------------------------------------------------------
startBase                   = WIDGET_BASE(Self.tlbID ,                        $
                                    ROW         = 1                 ,       $
                                    FRAME       = 1)

aLabel                      = WIDGET_LABEL(startBase ,                      $
                                    value       = 'Metadata Start Time: '   ,   $
                                    /ALIGN_LEFT ,                           $
                                    /DYNAMIC_RESIZE)

START_EVENT                 = {eis_meta_tl_gui_Event}
START_EVENT.eis_meta_tl_gui = Self
START_EVENT.Type            = "START"
value = tStart_string
Self.copyStartTimeLabelID   = WIDGET_TEXT(startBase ,                      $
                                    value       = value    ,   $
                                    Event_Pro   = 'eis_meta_tl_gui_EV',         $
                                    /ALIGN_LEFT ,                           $
                                    /EDITABLE                  ,            $
                                    xSize       = 22             ,         $
                                    uValue      = START_EVENT)

aLabel                      = WIDGET_LABEL(startBase ,                      $
                                    value       = '   Stop Time: '    ,   $
                                    /ALIGN_LEFT ,                           $
                                    /DYNAMIC_RESIZE)

STOP_EVENT                  = {eis_meta_tl_gui_Event}
STOP_EVENT.eis_meta_tl_gui  = Self
STOP_EVENT.Type             = "STOP"
value = tStop_string
Self.copyStopTimeLabelID    = WIDGET_TEXT(startBase ,                      $
                                    value       = value    ,   $
                                    Event_Pro   = 'eis_meta_tl_gui_EV',         $
                                    /ALIGN_LEFT ,                           $
                                    /EDITABLE                  ,            $
                                    xSize       = 22             ,         $
                                    uValue      = STOP_EVENT)
;---------------------------------------------------------------------------
;
; Metadata START
;
;---------------------------------------------------------------------------
metaBase                   = WIDGET_BASE(Self.tlbID ,                        $
                                    COLUMN      = 1                 ,       $
                                    FRAME       = 1)

;
; OBSTITLE
;
obstitleBase               = WIDGET_BASE(metaBase  ,                        $
                                    ROW         = 1)

obstitleBaseNonExc         = WIDGET_BASE(obstitleBase ,                      $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)
OBSTITLE_ON_EVENT          = {eis_meta_tl_gui_Event}
OBSTITLE_ON_EVENT.eis_meta_tl_gui = Self
OBSTITLE_ON_EVENT.Type     = "OBSTITLE_BUTTON"
Self.obstitleButtonID      = WIDGET_BUTTON(obstitleBaseNonExc        ,     $
                                   value       = 'OBSTITLE:'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = OBSTITLE_ON_EVENT)
WIDGET_CONTROL , Self.obstitleButtonID , set_button = 1

OBSTITLE_EVENT             = {eis_meta_tl_gui_Event}
OBSTITLE_EVENT.eis_meta_tl_gui = Self
OBSTITLE_EVENT.Type        = "OBSTITLE"
Self.obstitleID            = WIDGET_TEXT(obstitleBase                ,     $
                                   value       = meta_str.obstitle   ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = OBSTITLE_EVENT      ,     $
                                   /EDITABLE                         ,     $
                                   xSize       = 80                   ,     $
                                   /ALL_EVENTS)

;
; OBS_DEC
;
obs_decBase                = WIDGET_BASE(metaBase                    ,     $
                                    ROW         = 1)

obs_decBaseNonExc          = WIDGET_BASE(obs_decBase                 ,     $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)

OBS_DEC_ON_EVENT           = {eis_meta_tl_gui_Event}
OBS_DEC_ON_EVENT.eis_meta_tl_gui = Self
OBS_DEC_ON_EVENT.Type      = "OBS_DEC_BUTTON"
Self.obs_decButtonID       = WIDGET_BUTTON(obs_decBaseNonExc         ,     $
                                   value       = 'OBS_DEC :'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = OBS_DEC_ON_EVENT)
WIDGET_CONTROL , Self.obs_decButtonID , set_button = 1

OBS_DEC_EVENT              = {eis_meta_tl_gui_Event}
OBS_DEC_EVENT.eis_meta_tl_gui = Self
OBS_DEC_EVENT.Type         = "OBS_DEC"
Self.obs_decID             = WIDGET_TEXT(obs_decBase                 ,     $
                                   value       = meta_str.obs_dec    ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = OBS_DEC_EVENT       ,     $
                                   /EDITABLE                         ,     $
                                   xSize       = 80                  ,     $
                                   /ALL_EVENTS)

;
; JOIN_SB
;
join_sbBase                = WIDGET_BASE(metaBase  ,                        $
                                    ROW         = 1)

join_sbBaseNonExc          = WIDGET_BASE(join_sbBase  ,                        $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)
JOIN_SB_ON_EVENT              = {eis_meta_tl_gui_Event}
JOIN_SB_ON_EVENT.eis_meta_tl_gui = Self
JOIN_SB_ON_EVENT.Type      = "JOIN_SB_BUTTON"
Self.join_sbButtonID       = WIDGET_BUTTON(join_sbBaseNonExc          ,     $
                                   value       = 'JOIN_SB :'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = JOIN_SB_ON_EVENT)
WIDGET_CONTROL , Self.join_sbButtonID , set_button = 1

JOIN_SB_EVENT              = {eis_meta_tl_gui_Event}
JOIN_SB_EVENT.eis_meta_tl_gui = Self
JOIN_SB_EVENT.Type         = "JOIN_SB"
value = ['E','E,S','E,X','E,S,X']
Self.join_sbID             = WIDGET_DROPLIST(join_sbBase            ,     $
                                   value       = value               ,     $
                                   ;title       = 'JOIN_SB:'          ,     $
                                   /ALIGN_LEFT ,                           $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = JOIN_SB_EVENT)
index = WHERE(meta_str.join_sb EQ value , count)
CASE count OF
   0    : select = 0
   ELSE : select = index[0]
ENDCASE
WIDGET_CONTROL , Self.join_sbID , set_droplist_select = select



;
; HOP_ID
;
hop_idBase                 = WIDGET_BASE(metaBase                    ,     $
                                    ROW         = 1)

hop_idBaseNonExc           = WIDGET_BASE(hop_idBase                  ,     $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)
HOP_ID_ON_EVENT              = {eis_meta_tl_gui_Event}
HOP_ID_ON_EVENT.eis_meta_tl_gui = Self
HOP_ID_ON_EVENT.Type      = "HOP_ID_BUTTON"
Self.hop_idButtonID       = WIDGET_BUTTON(hop_idBaseNonExc           ,     $
                                   value       = 'HOP_ID  :'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = HOP_ID_ON_EVENT)
WIDGET_CONTROL , Self.hop_idButtonID , set_button = 1

HOP_ID_EVENT               = {eis_meta_tl_gui_Event}
HOP_ID_EVENT.eis_meta_tl_gui = Self
HOP_ID_EVENT.Type          = "HOP_ID"
Self.hop_idID              = WIDGET_TEXT(hop_idBase                  ,     $
                                   value       = meta_str.hop_id     ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = HOP_ID_EVENT        ,     $
                                   /EDITABLE                         ,     $
                                   xSize       = 8                   ,     $
                                   /ALL_EVENTS)


;
; NOAA_NUM
;
noaa_numBase               = WIDGET_BASE(metaBase                    ,     $
                                    ROW         = 1)

noaa_numBaseNonExc         = WIDGET_BASE(noaa_numBase                ,     $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)
NOAA_NUM_ON_EVENT              = {eis_meta_tl_gui_Event}
NOAA_NUM_ON_EVENT.eis_meta_tl_gui = Self
NOAA_NUM_ON_EVENT.Type      = "NOAA_NUM_BUTTON"
Self.noaa_numButtonID       = WIDGET_BUTTON(noaa_numBaseNonExc       ,     $
                                   value       = 'NOAA_NUM:'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = NOAA_NUM_ON_EVENT)
WIDGET_CONTROL , Self.noaa_numButtonID , set_button = 1

NOAA_NUM_EVENT             = {eis_meta_tl_gui_Event}
NOAA_NUM_EVENT.eis_meta_tl_gui = Self
NOAA_NUM_EVENT.Type        = "NOAA_NUM"
Self.noaa_numID            = WIDGET_TEXT(noaa_numBase                ,     $
                                   value       = meta_str.noaa_num   ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = NOAA_NUM_EVENT      ,     $
                                   /EDITABLE                         ,     $
                                   xSize       = 8                   ,     $
                                   /ALL_EVENTS)


;
; SCI_OBJ
;
sci_objBase                = WIDGET_BASE(metaBase                    ,     $
                                    ROW         = 1)
sci_objBaseNonExc          = WIDGET_BASE(sci_objBase                 ,     $
                                    ROW         = 1                  ,     $
                                    /NONEXCLUSIVE)
SCI_OBJ_ON_EVENT              = {eis_meta_tl_gui_Event}
SCI_OBJ_ON_EVENT.eis_meta_tl_gui = Self
SCI_OBJ_ON_EVENT.Type      = "SCI_OBJ_BUTTON"
Self.sci_objButtonID       = WIDGET_BUTTON(sci_objBaseNonExc         ,     $
                                   value       = 'SCI_OBJ :'         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = SCI_OBJ_ON_EVENT)
WIDGET_CONTROL , Self.sci_objButtonID , set_button = 1

Self.sci_objID             = WIDGET_TEXT(sci_objBase                 ,     $
                                   value       = meta_str.sci_obj    ,     $
                                   xSize       = 20                  ,     $
                                   /ALIGN_LEFT)

SCI_OBJ_EVENT              = {eis_meta_tl_gui_Event}
SCI_OBJ_EVENT.eis_meta_tl_gui = Self
SCI_OBJ_EVENT.Type         = "SCI_OBJ"
Self.sci_objEditID         = WIDGET_BUTTON(sci_objBase               ,     $
                                   value       = ' Edit... '         ,     $
                                   Event_Pro   = Event_Pro           ,     $
                                   uValue      = SCI_OBJ_EVENT)

value = "Warning: "
aLabel                     = WIDGET_LABEL(metaBase                   ,     $
                                   value       = value               ,     $
                                   /ALIGN_LEFT)
; ______________________________________________________________________
;
; Bottom base
;
; ______________________________________________________________________
bottomBase                  = WIDGET_BASE(Self.tlbID ,                      $
                                    ROW         = 1  ,                      $
                                    /GRID_LAYOUT)

APPLY_EVENT                 = {eis_meta_tl_gui_Event}
APPLY_EVENT.eis_meta_tl_gui = Self
APPLY_EVENT.Type            = "APPLY"
APPLYbutton                 = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' Apply Metadata ',           $
                                    Event_Pro   = 'eis_meta_tl_gui_EV',         $
                                    uValue      = APPLY_EVENT)

QUIT_EVENT                  = {eis_meta_tl_gui_Event}
QUIT_EVENT.eis_meta_tl_gui      = Self
QUIT_EVENT.Type             = "QUIT"
quitbutton                  = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' Exit '    ,              $
                                    Event_Pro   = 'eis_meta_tl_gui_EV',         $
                                    uValue      = QUIT_EVENT)


END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_meta_tl_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_meta_tl_gui_Event
OBJ_DESTROY    , eis_meta_tl_gui_Event.eis_meta_tl_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_meta_tl_gui::CleanUp


END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_meta_tl_gui::setProperty, tStartID      = tStartID            ,     $
                                  tStopID       = tStopID             ,     $
                                  tNewID        = tNewID              ,     $
                                  sci_obj       = sci_obj

IF (N_ELEMENTS(tStartID) GT 0) THEN BEGIN

   new_value = anytim2utc(tStartID , /STIME , /TRUNCATE)
   WIDGET_CONTROL , Self.copyStartTimeLabelID , set_value = new_value

ENDIF
IF (N_ELEMENTS(tStopID) GT 0) THEN BEGIN

   new_value = anytim2utc(tStopID , /STIME , /TRUNCATE)
   WIDGET_CONTROL , Self.copyStopTimeLabelID , set_value = new_value

ENDIF

IF (N_ELEMENTS(tNewID) GT 0) THEN BEGIN

   new_value = anytim2utc(tNewID , /STIME , /TRUNCATE)
   WIDGET_CONTROL , Self.newStartTimeLabelID , set_value = new_value

ENDIF

IF (N_ELEMENTS(sci_obj) GT 0) THEN BEGIN

   WIDGET_CONTROL , Self.sci_objID , set_value = sci_obj

ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_meta_tl_gui::GetProperty, tlbID      = tlbID ,          $
                                  start_time = start_time    ,    $
                                  stop_time  = stop_time

WIDGET_CONTROL , Self.copyStartTimeLabelID , get_value = tStart
WIDGET_CONTROL , Self.copyStopTimeLabelID  , get_value = tStop

tlbID      = Self.tlbID
start_time = anytim2tai(tStart)
stop_time  = anytim2tai(tStop)

END
;______________________________________________________________________________
; Return widget id
;______________________________________________________________________________
FUNCTION eis_meta_tl_gui::tlbID

RETURN , Self.tlbID

END
;______________________________________________________________________________
; Widget_Control wrapper
;______________________________________________________________________________
PRO eis_meta_tl_gui::Control, _Ref_Extra=Widget_Control_Keywords

WIDGET_CONTROL , Self.tlbID, _Extra=Widget_Control_Keywords

END
;______________________________________________________________________________
; Widget_Info wrapper
;______________________________________________________________________________
FUNCTION eis_meta_tl_gui::Info, _Ref_Extra=Widget_Info_Keywords

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

END
;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_meta_tl_gui::Realize

WIDGET_CONTROL , Self.tlbID, /Realize

END
;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_meta_tl_gui::XManager;,group=group

XMANAGER , "eis_meta_tl_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_meta_tl_gui_EV",                                    $
    cleanup        = "eis_meta_tl_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                    $
    /NO_BLOCK

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_meta_tl_gui_Event__Define

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

;Get event handler structure containing eis_meta_tl_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_meta_tl_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_meta_tl_gui's class member procedure "Handler"
eis_meta_tl_gui_Event.eis_meta_tl_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_meta_tl_gui_Event
CASE eis_meta_tl_gui_Event.Type OF
    "QUIT"            : Self->quit
    "APPLY"           : Self->apply
    "JOIN_SB"         :
    "JOIN_SB_BUTTON"  : Self->sensitize_join_sb
    "HOP_ID"          :
    "HOP_ID_BUTTON"   : Self->sensitize_hop_id
    "NOAA_NUM"        :
    "NOAA_NUM_BUTTON" : Self->sensitize_noaa_num
    "SCI_OBJ"         : Self->sci_obj
    "SCI_OBJ_BUTTON"  : Self->sensitize_sci_obj
    "OBSTITLE"        :
    "OBSTITLE_BUTTON" : Self->sensitize_obstitle
    "OBS_DEC"         :
    "OBS_DEC_BUTTON"  : Self->sensitize_obs_dec
    "START"           :
    "STOP"            :
    ELSE              : print,eis_meta_tl_gui_Event.Type
ENDCASE
END
;______________________________________________________________________________
; OBS_DEC
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_obs_dec

button_set = WIDGET_INFO(Self.obs_decButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.obs_decID , sensitive = button_set < 1

END
;______________________________________________________________________________
; OBSTITLE
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_obstitle

button_set = WIDGET_INFO(Self.obstitleButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.obstitleID , sensitive = button_set < 1

END
;______________________________________________________________________________
; SCI_OBJ
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_sci_obj

button_set = WIDGET_INFO(Self.sci_objButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.sci_objID     , sensitive = button_set < 1
WIDGET_CONTROL , Self.sci_objEditID , sensitive = button_set < 1

END
;______________________________________________________________________________
; NOAA_NUM
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_noaa_num

button_set = WIDGET_INFO(Self.noaa_numButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.noaa_numID , sensitive = button_set < 1

END
;______________________________________________________________________________
; HOP_ID
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_hop_id

button_set = WIDGET_INFO(Self.hop_idButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.hop_idID , sensitive = button_set < 1

END
;______________________________________________________________________________
; JOIN_SB
;______________________________________________________________________________
PRO eis_meta_tl_gui::sensitize_join_sb

button_set = WIDGET_INFO(Self.join_sbButtonID , /BUTTON_SET)
WIDGET_CONTROL , Self.join_sbID , sensitive = button_set < 1

END
;______________________________________________________________________________
; SCI_OBJ
;______________________________________________________________________________
PRO eis_meta_tl_gui::sci_obj

; Invoke SCI_OBJ Tool
s = OBJ_NEW("eis_sci_obj_gui" , Self)
s->Realize
s->XMANAGER

END
;______________________________________________________________________________
; Apply
;______________________________________________________________________________
FUNCTION eis_meta_tl_gui::check_times_are_valid

valid = {valid:1B , mText:""}
WIDGET_CONTROL , Self.copyStartTimeLabelID , get_value = tStart
WIDGET_CONTROL , Self.copyStopTimeLabelID  , get_value = tStop

IF (valid_time(tStart[0]) NE 1) THEN BEGIN
    valid.valid = 0B
    valid.mText = "Start Time is invalid. Aborting!"
END
IF (valid_time(tStop[0])  NE 1) THEN BEGIN
    valid.valid = 0B
    valid.mText = "Stop Time is invalid. Aborting!"
END

; Check stop_time > start_time
IF (anytim2tai(tStop[0]) LE anytim2tai(tStart[0])) THEN BEGIN
    valid.valid = 0B
    valid.mText = "Invalid time range. Aborting!"
END

RETURN , valid

END
;______________________________________________________________________________
; Quit
;______________________________________________________________________________
PRO eis_meta_tl_gui::quit

; Update parentClass's cpt_str structure
Self.parentClass->getProperty , meta_str = meta_str

WIDGET_CONTROL , Self.obstitleID , get_value =  obstitle
WIDGET_CONTROL , Self.obs_decID  , get_value =  obs_dec
WIDGET_CONTROL , Self.join_sbID  , get_value =  join_sb_list
join_sb_index = WIDGET_INFO(Self.join_sbID , /DROPLIST_SELECT)
WIDGET_CONTROL , Self.hop_idID   , get_value =  hop_id
WIDGET_CONTROL , Self.noaa_numID , get_value =  noaa_num
WIDGET_CONTROL , Self.sci_objID  , get_value =  sci_obj

meta_str.obstitle = obstitle
meta_str.obs_dec  = obs_dec
meta_str.join_sb  = join_sb_list[join_sb_index]
meta_str.hop_id   = hop_id
meta_str.noaa_num = noaa_num
meta_str.sci_obj  = sci_obj

Self.parentClass->setProperty , meta_str = meta_str
Self.parentClass->getProperty , eis_mk_plan_ini = eis_mk_plan_ini
eis_mk_plan_ini->update_ini_file

Self.parentClass->kill_meta_gui

END
;______________________________________________________________________________
; Apply
;______________________________________________________________________________
PRO eis_meta_tl_gui::apply

valid = Self->check_times_are_valid()
IF (valid.valid NE 1) THEN BEGIN
    BEEP
    complain = DIALOG_MESSAGE( valid.mText                          ,       $
                     DIALOG_PARENT = Self.tlbID,                            $
                     /ERROR )
    RETURN
ENDIF

WIDGET_CONTROL , Self.copyStartTimeLabelID , get_value = start_time
WIDGET_CONTROL , Self.copyStopTimeLabelID  , get_value = stop_time
; Get button states
go_obstitle = WIDGET_INFO(Self.obstitleButtonID , /BUTTON_SET)
go_obs_dec  = WIDGET_INFO(Self.obs_decButtonID  , /BUTTON_SET)
go_join_sb  = WIDGET_INFO(Self.join_sbButtonID  , /BUTTON_SET)
go_hop_id   = WIDGET_INFO(Self.hop_idButtonID   , /BUTTON_SET)
go_noaa_num = WIDGET_INFO(Self.noaa_numButtonID , /BUTTON_SET)
go_sci_obj  = WIDGET_INFO(Self.sci_objButtonID  , /BUTTON_SET)
;
; Get widget values
;
WIDGET_CONTROL , Self.obstitleID , get_value = obstitle
WIDGET_CONTROL , Self.obs_decID  , get_value = obs_dec
WIDGET_CONTROL , Self.hop_idID   , get_value = hop_id
WIDGET_CONTROL , Self.noaa_numID , get_value = noaa_num
WIDGET_CONTROL , Self.sci_objID  , get_value = sci_obj
WIDGET_CONTROL , Self.join_sbID  , get_value = join_sb_list
join_sb_index  = WIDGET_INFO(Self.join_sbID  , /DROPLIST_SELECT)
join_sb        = join_sb_list[join_sb_index]


; Get list of indicies of selected entries
Self.parentClass->getProperty , eis_timeline_container = tlc
i_list = tlc->count_tl_entries_in_time_range(anytim2tai(start_time)  ,     $
                                             anytim2tai(stop_time))
IF (i_list.counter EQ 0) THEN BEGIN
    BEEP
    mText = "There are no entries in this time range. Aborting!"
    d = DIALOG_MESSAGE(mText , /ERROR , DIALOG_PARENT = Self.tlbID)
    RETURN
ENDIF


FOR i = 0 , i_list.counter - 1 DO BEGIN

   tlc_index = (*i_list.tl_list)[i]
   temp      = tlc->get( position = tlc_index)
   tl        = temp->get()
    IF (tl.time_component.read_all NE 1) THEN BEGIN
        temp->get_all_info
        tl = temp->get()
    ENDIF

   IF (go_obstitle EQ 1) THEN temp->update_study_tag , obstitle = obstitle
   IF (go_obs_dec  EQ 1) THEN temp->update_study_tag , obs_dec  = obs_dec
   IF (go_join_sb  EQ 1) THEN temp->update_study_tag , join_sb  = join_sb
   IF (go_hop_id   EQ 1) THEN temp->update_study_tag , jop_id   = hop_id
   IF (go_noaa_num EQ 1) THEN temp->update_study_tag , noaa_num = noaa_num
   IF (go_sci_obj  EQ 1) THEN temp->update_study_tag , sci_obj  = sci_obj

ENDFOR

Self.parentClass->getProperty , meta_str = meta_str
; Update main metadata structure
meta_str.obstitle = obstitle
meta_str.obs_dec  = obs_dec
meta_str.join_sb  = join_sb
meta_str.hop_id   = hop_id
meta_str.noaa_num = noaa_num
meta_str.sci_obj  = sci_obj
Self.parentClass->setProperty , meta_str = meta_str

Self->quit

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO eis_meta_tl_gui__define

struct  = { eis_meta_tl_gui                                          ,     $
                    tlbID                 : 0L                       ,     $
                    group_leader          : 0L                       ,     $
                    parentClass           : OBJ_NEW()                ,     $
                    copyStopTimeLabelID   : 0L                       ,     $
                    copyStartTimeLabelID  : 0L                       ,     $
                    hop_idID              : 0L                       ,     $
                    hop_idButtonID        : 0L                       ,     $
                    sci_objID             : 0L                       ,     $
                    sci_objButtonID       : 0L                       ,     $
                    sci_objEditID         : 0L                       ,     $
                    noaa_numID            : 0L                       ,     $
                    noaa_numButtonID      : 0L                       ,     $
                    obstitleID            : 0L                       ,     $
                    obstitleButtonID      : 0L                       ,     $
                    obs_decID             : 0L                       ,     $
                    obs_decButtonID       : 0L                       ,     $
                    join_sbID             : 0L                       ,     $
                    join_sbButtonID       : 0L                             $
          }


END
