;+
; PROJECT
;           SOLARB EIS
;
; NAME
;           eis_copy_tl_gui__DEFINE
;
; PURPOSE
;           eis_copy_tl_gui class definition
;
; NOTES
;           The
;
; CATEGORY
;           EIS timeline planning
;
; WRITTEN
;           John A Rainne RAL 5-Jun-2008
;
; VERSION
;           v0.0 JAR 5-Apr-2007
;               Blah
;
;
;------------------------------------------------------------------------------;
FUNCTION eis_copy_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 Copy Multiple Timeline Entries" + pt_version
TLB_EVENT                   = {eis_copy_tl_gui_Event}
TLB_EVENT.eis_copy_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_copy_tl_gui::createGUI

; Get tStart and tStop
Self.parentClass->getProperty , tl_graphics = tl_graphics
; 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)

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

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

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

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

STOP_EVENT                  = {eis_copy_tl_gui_Event}
STOP_EVENT.eis_copy_tl_gui  = Self
STOP_EVENT.Type             = "STOP"
value = tStop_string
Self.copyStopTimeLabelID    = WIDGET_TEXT(startBase ,                      $
                                    value       = value    ,   $
                                    Event_Pro   = Event_Pro          ,     $
                                    /ALIGN_LEFT ,                           $
                                    /EDITABLE                  ,            $
                                    xSize       = 22             ,         $
                                    uValue      = STOP_EVENT)
;---------------------------------------------------------------------------
;
; NEW Time START
;
;---------------------------------------------------------------------------
newBase                     = WIDGET_BASE(Self.tlbID ,                        $
                                    ROW         = 1                 ,       $
                                    FRAME       = 1)

aLabel                      = WIDGET_LABEL(newBase ,                      $
                                    value       = 'New  Start Time: '    ,   $
                                    /ALIGN_LEFT ,                           $
                                    /DYNAMIC_RESIZE)

NEW_EVENT                   = {eis_copy_tl_gui_Event}
NEW_EVENT.eis_copy_tl_gui   = Self
NEW_EVENT.Type              = "NEW"
value = tStart_string
Self.newStartTimeLabelID   = WIDGET_TEXT(newBase  ,                      $
                                    value       = value    ,   $
                                    Event_Pro   = Event_Pro          ,     $
                                    /ALIGN_LEFT ,                           $
                                    /EDITABLE                  ,            $
                                    xSize       = 22             ,         $
                                    uValue      = NEW_EVENT)
; ______________________________________________________________________
;
; Bottom base
;
; ______________________________________________________________________
bottomBase                  = WIDGET_BASE(Self.tlbID ,                      $
                                    ROW         = 1  ,                      $
                                    /FRAME           ,                      $
                                    /GRID_LAYOUT)

APPLY_EVENT                 = {eis_copy_tl_gui_Event}
APPLY_EVENT.eis_copy_tl_gui = Self
APPLY_EVENT.Type            = "APPLY"
APPLYbutton                 = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' Apply Copy ',           $
                                    Event_Pro   = Event_Pro          ,     $
                                    uValue      = APPLY_EVENT)

QUIT_EVENT                  = {eis_copy_tl_gui_Event}
QUIT_EVENT.eis_copy_tl_gui      = Self
QUIT_EVENT.Type             = "QUIT"
quitbutton                  = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' Exit '    ,              $
                                    Event_Pro   = 'eis_copy_tl_gui_EV',         $
                                    uValue      = QUIT_EVENT)


END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_copy_tl_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_copy_tl_gui_Event
OBJ_DESTROY    , eis_copy_tl_gui_Event.eis_copy_tl_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_copy_tl_gui::CleanUp


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

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

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_copy_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
WIDGET_CONTROL , Self.newStartTimeLabelID  , get_value = tNew

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

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

RETURN , Self.tlbID

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

WIDGET_CONTROL , Self.tlbID, _Extra=Widget_Control_Keywords

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

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

END
;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_copy_tl_gui::Realize

WIDGET_CONTROL , Self.tlbID, /Realize

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

XMANAGER , "eis_copy_tl_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_copy_tl_gui_EV",                                    $
    cleanup        = "eis_copy_tl_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                    $
    /NO_BLOCK

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_copy_tl_gui_Event__Define

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

;Get event handler structure containing eis_copy_tl_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_copy_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_copy_tl_gui's class member procedure "Handler"
eis_copy_tl_gui_Event.eis_copy_tl_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_copy_tl_gui_Event
CASE eis_copy_tl_gui_Event.Type OF
    "QUIT"  : Self.parentClass->kill_copy_gui
    "APPLY" : Self->apply
    "START" :
    "STOP"  :
    "NEW"   :
    ELSE    : print,eis_copy_tl_gui_Event.Type
ENDCASE
END
;______________________________________________________________________________
; Apply
;______________________________________________________________________________
FUNCTION eis_copy_tl_gui::check_times_are_valid

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

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
IF (valid_time(tNew[0])   NE 1) THEN BEGIN
    valid.valid = 0B
    valid.mText = "New Start 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

; Check difference between start and new start times are < 3 days
delTime = anytim2tai(tStart[0]) - anytim2tai(tNew[0])
IF (ABS(delTime/3600.) GT (7*24.)) THEN BEGIN
    valid.valid = 0B
    valid.mText = "Current and new start times are more than" +             $
                  " 7 days apart. Aborting!"
END


RETURN , valid

END
;______________________________________________________________________________
; Apply
;______________________________________________________________________________
PRO eis_copy_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 = tStart
WIDGET_CONTROL , Self.copyStopTimeLabelID  , get_value = tStop
WIDGET_CONTROL , Self.newStartTimeLabelID  , get_value = tNew

Self.parentClass->apply_copy_tl_entries    , tStart[0]                ,     $
                                             tStop[0]                 ,     $
                                             tNew[0]

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO eis_copy_tl_gui__define

struct  = { eis_copy_tl_gui                                           ,     $
                    tlbID                 : 0L                        ,     $
                    group_leader          : 0L                        ,     $
                    parentClass           : OBJ_NEW()                 ,     $
                    copyStopTimeLabelID   : 0L                        ,     $
                    copyStartTimeLabelID  : 0L                        ,     $
                    newStartTimeLabelID   : 0L                              $
          }


END
