;------------------------------------------------------------------------------;
;+
; NAME:
;                    eis_datetime_gui
; PURPOSE:
;                    This object
; INPUTS:
;                    GROUP -
;
; HISTORY
;          v0.1 13-Jun-2008 JAR
;               Added xSize keyword
;
;-
;------------------------------------------------------------------------------;
FUNCTION eis_datetime_gui::Init , parentClass , tlb , datetime , $
                                  type = type , xSize = xSize

IF (N_ELEMENTS(xSize) EQ 0) THEN xSize = 22
Self.parentClass = parentClass
Self.datetime    = datetime
IF KEYWORD_SET(type) THEN Self.type = type

; Get eis_fonts
fonts = eis_fonts()
;-------------------create the main base---------------------------------------;
TSTART_EVENT = {eis_datetime_gui_Event ,                                    $
                    type               : "",                                $
                    eis_datetime_gui   : OBJ_NEW(),                         $
                    extra              : 0 }
TSTART_EVENT.eis_datetime_gui = Self
TSTART_EVENT.Type           = "DATETIME"
value = anytim2utc(datetime , /STIME , /TRUNCATE)
Self.datetimeID             = WIDGET_TEXT(tlb        ,                      $
                                    value       = value                ,    $
                                    Event_Pro   = 'eis_datetime_gui_EV'  ,  $
                                    /EDITABLE                          ,    $
                                    xSize       = xSize                ,     $
                                    uValue      = TSTART_EVENT ,            $
                                    font        = fonts.mono)

RETURN, 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_datetime_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_datetime_gui_Event
OBJ_DESTROY    , eis_datetime_gui_Event.eis_datetime_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_datetime_gui::CleanUp


END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_datetime_gui::setProperty , datetime = datetime

IF (N_ELEMENTS(datetime) GT 0) THEN BEGIN
    Self.datetime = datetime
    datetime_string = anytim2utc(datetime , /STIME)
    WIDGET_CONTROL , Self.datetimeID , set_value = datetime_string
ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_datetime_gui::GetProperty, datetime = datetime

datetime  = Self.datetime

End
;______________________________________________________________________________
; Event Handler wrapper
;______________________________________________________________________________
PRO eis_datetime_gui_EV , Event

;Get event handler structure containing eis_datetime_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_datetime_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_datetime_gui's class member procedure "Handler"
eis_datetime_gui_Event.eis_datetime_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_datetime_gui_Event
CASE eis_datetime_gui_Event.Type OF
    "DATETIME"   :  Self->datetime
    ELSE:       print,eis_datetime_gui_Event.Type
ENDCASE
END
;______________________________________________________________________________
; Edit time
;______________________________________________________________________________
PRO eis_datetime_gui::datetime , truncate = truncate

WIDGET_CONTROL , Self.datetimeID , get_value = widValue

; Check input is a valid date-time
valid  = valid_time(widValue[0])

IF (valid EQ 1) THEN BEGIN
    Self.datetime = anytim2tai(widValue[0])
ENDIF ELSE BEGIN
    BEEP
    mText = 'Time is not valid. Resetting!'
    d     = DIALOG_MESSAGE(mText , /ERROR , DIALOG_PARENT = Self.tlbID)
ENDELSE

datetime_string = anytim2utc(Self.datetime , /STIME , $
                               truncate = KEYWORD_SET(truncate))
WIDGET_CONTROL , Self.datetimeID , set_value = datetime_string


CASE OBJ_CLASS(Self.parentClass) OF
    'EIS_TIMELINE_PLOT_GUI' : Self.parentClass->updateTimelineDuration
    'EIS_MK_PLAN_GUI'       : Self.parentClass->editCursorTime
    'EIS_CPT_GUI'           : Self.parentClass->updateTime
    'EIS_DR_GUI'            : Self.parentClass->updateTime
    'EIS_TEST_POINTING_GUI' : ; Don't actually need to do anything
    ELSE                    : stop
ENDCASE

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO     eis_datetime_gui__Define

    struct          =   { eis_datetime_gui                            ,     $
                                    tlbID           : 0L              ,     $
                                    parentClass     : OBJ_NEW()       ,     $
                                    group_leader    : 0L              ,     $
                                    type            : ''              ,     $
                                    datetimeID      : 0L              ,     $
                                    datetime        : 0.0D                  $
                      }


END
