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

Self.parentClass  = parentClass
Self.group_leader = parentClass->tlbID()
;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = 'EIS Raster: Set Exposure Times' + pt_version
TLB_EVENT                   = {eis_exposure_times_gui_Event}
TLB_EVENT.eis_exposure_times_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_exposure_times_gui::createGUI

Event_Pro   = 'eis_exposure_times_gui_EV'


; Get eis_fonts
fonts = eis_fonts()

value = '          Set Exposure Times  (s)          '
expLabel                    = WIDGET_LABEL(Self.tlbID ,                     $
                                    value       = value ,                   $
																																				ySize       = 50    ,                   $
                                    FONT        = fonts.bold)
; ______________________________________________________________________
;
; Exposure Time Base
;
; ______________________________________________________________________
dbBase                      = WIDGET_BASE(Self.tlbID ,                      $
                                    COLUMN      = 1,/frame)

; OK, we want to find the current Number of exposures / pointing - and
; create a base for each, containing a label and a text widget!
Self.parentClass->getProperty , eis_raster = eis_raster
numExposures = eis_raster.nexp

FOR i = 0,numExposures -1 DO BEGIN


    expTimeBase             = WIDGET_BASE(dbBase , ROW = 1)


    value = 'Exposure ' + STRCOMPRESS(i+1,/REMOVE_ALL) + ':  '
    expLabel                = WIDGET_LABEL(expTimeBase ,                    $
                                    value       = value )




    value = '     Time (s): '
    expLabel                = WIDGET_LABEL(expTimeBase ,                    $
                                    value       = value )

    ; Get exposure time for each pointing's exposure
    expTime = eis_raster.exposures[i]/1000.
    expTimeValue = STRCOMPRESS( STRING(format='(F6.2)',expTime),/REMOVE_ALL)



    EXP_EVENT               = {eis_exposure_times_gui_Event}
    EXP_EVENT.eis_exposure_times_gui     = Self
    EXP_EVENT.Type          = "EXP"
    EXP_EVENT.extra         = i
    Self.expTimeID[i]       = WIDGET_TEXT(expTimeBase   ,                   $
                                    value       = expTimeValue ,            $
                                    Event_Pro   = Event_Pro ,               $
                                    /EDITABLE ,                             $
                                    xSize       = 6 ,                       $
                                    UValue      = EXP_EVENT)


    value = '  Delay (ms): '
    expLabel                = WIDGET_LABEL(expTimeBase ,                    $
                                    value       = value )



    ; Get exposure time for each pointing's exposure
    delTime = eis_raster.delays[i]
    delTimeValue = STRCOMPRESS( delTime , /REMOVE_ALL)




    DEL_EVENT               = {eis_exposure_times_gui_Event}
    DEL_EVENT.eis_exposure_times_gui     = Self
    DEL_EVENT.Type          = "DEL"
    DEL_EVENT.extra         = i
    Self.delTimeID[i]       = WIDGET_TEXT(expTimeBase   ,                   $
                                    value       = delTimeValue ,            $
                                    Event_Pro   = Event_Pro ,               $
                                    /EDITABLE ,                             $
                                    xSize       = 6 ,                       $
                                    UValue      = DEL_EVENT)



ENDFOR

; ______________________________________________________________________
;
; Accept Button
;
; ______________________________________________________________________
ACCEPT_EVENT                = {eis_exposure_times_gui_Event}
ACCEPT_EVENT.eis_exposure_times_gui = Self
ACCEPT_EVENT.Type           = "ACCEPT"
ACCEPTbutton                = WIDGET_BUTTON(Self.tlbID,                     $
                                    value       = 'Accept',                 $
                                    Event_Pro   = 'eis_exposure_times_gui_EV',$
                                    uValue      = ACCEPT_EVENT)


END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_exposure_times_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_exposure_times_gui_Event
OBJ_DESTROY    , eis_exposure_times_gui_Event.eis_exposure_times_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_exposure_times_gui::CleanUp


END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_exposure_times_gui::setProperty, autoScaleStr  = autoScaleStr

IF (N_ELEMENTS(autoScaleStr) GT 0) THEN BEGIN
    stop
ENDIF

End
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_exposure_times_gui::GetProperty, tlbID   = tlbID

tlbID = Self.tlbID

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

    Return, Self.tlbID
End

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

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

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

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

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_exposure_times_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_exposure_times_gui::XManager

XMANAGER , "eis_exposure_times_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_exposure_times_gui_EV",                                    $
    cleanup        = "eis_exposure_times_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                   $
    /NO_BLOCK

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_exposure_times_gui_Event__Define

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

;Get event handler structure containing eis_exposure_times_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_exposure_times_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_exposure_times_gui's class member procedure "Handler"
eis_exposure_times_gui_Event.eis_exposure_times_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_exposure_times_gui_Event
CASE eis_exposure_times_gui_Event.Type OF
    "ACCEPT"    : Self->Control, /Destroy
    "EXP"       : Self->updateExposureTime , eis_exposure_times_gui_Event.extra
    "DEL"       : Self->updateDelayTime    , eis_exposure_times_gui_Event.extra
    ELSE        : print,eis_exposure_times_gui_Event.Type
ENDCASE

END
;______________________________________________________________________________
; Update delay times
;______________________________________________________________________________
PRO eis_exposure_times_gui::updateDelayTime , index

; Get original delay times
Self.parentClass->getProperty , eis_raster = eis_raster

WIDGET_CONTROL , Self.delTimeID[index] , get_value = widValue
; arguments-> name , newValue , oldValue , minValue , maxValue , multiple
valid  = eis_validate_input('Delay Time' , widValue[0]    ,                 $
                              eis_raster.delays[index]    ,                 $
                              0 , 65535L )

CASE valid.valid OF
    0:  BEGIN
            newValue = eis_raster.delays[index]
            beep
        				complain = DIALOG_MESSAGE( valid.mText ,                        $
                             				DIALOG_PARENT = Self.tlbID,                $
                             				/ERROR )
            WIDGET_CONTROL , Self.delTimeID[index] ,                        $
                        set_value = STRCOMPRESS(newValue , /REMOVE_ALL)
        END
    1:  BEGIN
            ; Set this particular exposure time to new value
            eis_raster.delays[index] = LONG(widValue[0])
            ; Update mk_raster's eis_raster
            Self.parentClass->setProperty , eis_raster = eis_raster
            ; Call mk_raster method to update exposure times
            Self.parentClass->updateExposureTimes
        END
ENDCASE

END
;______________________________________________________________________________
; Update exposure times
;______________________________________________________________________________
PRO eis_exposure_times_gui::updateExposureTime , index

; Get original exposure times
Self.parentClass->getProperty , eis_raster = eis_raster


WIDGET_CONTROL , Self.expTimeID[index] , get_value = widValue
; arguments-> name , newValue , oldValue , minValue , maxValue , multiple
valid  = eis_validate_input('Exposure Time' , widValue[0] ,                 $
                              eis_raster.exposures[index] ,                 $
                              70. , 655350. , multiplier = 1000.)

CASE valid.valid OF
    0:  BEGIN
            newValue = eis_raster.exposures[index]
            beep
        				complain = DIALOG_MESSAGE( valid.mText ,                        $
                             				DIALOG_PARENT = Self.tlbID,                $
                             				/ERROR )
            WIDGET_CONTROL , Self.expTimeID[index] ,                        $
                        set_value = STRCOMPRESS(newValue/1000.  , /REMOVE_ALL)
        END
    1:  BEGIN
            ; Set this particular exposure time to new value
            eis_raster.exposures[index] = LONG(FLOAT(widValue[0]) * 1000.)

            ; Update mk_raster's eis_raster
            Self.parentClass->setProperty , eis_raster = eis_raster
            ; Call mk_raster method to update exposure times
            Self.parentClass->updateExposureTimes
        END
ENDCASE

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO	eis_exposure_times_gui__Define

    struct          =	{ eis_exposure_times_gui                        ,     $
                                    tlbID           : 0L              ,     $
                                    group_leader    : 0L              ,     $
                                    parentClass     : OBJ_NEW()       ,     $
                                    expTimeID       : LONARR(8)       ,     $
                                    delTimeID       : LONARR(8)             $
                      }

END
