;------------------------------------------------------------------------------;
;+
; NAME:
;		eis_raster_index_gui
; PURPOSE:
;		This object
; INPUTS:
;		GROUP -
; Written
;               John Rainnie, RAL - a while ago
; Modified
;               V0.1, 15 July 2006
;                   Removed modal keyword and changed string format in line
;                   with eis_mk_study. Also made list double-clickable
;
;-
;------------------------------------------------------------------------------;
FUNCTION eis_raster_index_gui::Init , parentClass , eis_study

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

Self.eis_study    = eis_study
;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = 'EIS Raster Database' + pt_version
TLB_EVENT                   = {eis_raster_index_gui_Event}
TLB_EVENT.eis_raster_index_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_raster_index_gui::createGUI

; ______________________________________________________________________
;
; Label Base
;
; ______________________________________________________________________
labelBase                  = WIDGET_BASE(Self.tlbID ,                      $
                                    COLUMN      = 1,/frame)

value = "Choose a raster from the list below."
aLabel                     = WIDGET_LABEL(labelBase        ,               $
                                   value       = value )
; ______________________________________________________________________
;
; Database List Base
;
; ______________________________________________________________________
dbBase                      = WIDGET_BASE(Self.tlbID ,                      $
                                    COLUMN      = 1,/frame)

; Get eis_fonts
fonts = eis_fonts()

value = STRING(format='(A-8,A-22,A-90)','ID:','Acronym:','Title:')
;value = 'ID:     Acronym:                Title:'
ra_listLabel                = WIDGET_LABEL(dbBase ,                         $
                                    value       = value ,                   $
                                    /ALIGN_LEFT ,                           $
                                    font        = fonts.mono)

LIST_EVENT                  = {eis_raster_index_gui_Event}
;Set it's values
LIST_EVENT.eis_raster_index_gui    = Self
LIST_EVENT.Type             = "LINELIST"
;ySize = Self.eis_study.nRasters > 6
ySize  = 10
Self.ra_dbListID            = WIDGET_LIST(dbBase ,                          $
                                    ySize       = ySize ,                   $
                                    xSize       = 120 ,                     $
                                    uValue      = LIST_EVENT,               $
                                    value       = ''  ,                     $
                                    font        = fonts.mono)

; ______________________________________________________________________
;
; Bottom base
;
; ______________________________________________________________________
bottomBase                  = WIDGET_BASE(Self.tlbID ,                      $
                                    ROW         = 1  ,                      $
                                    FRAME       = 1  ,                      $
                                    /GRID_LAYOUT)
;
; View Raster Details
;
VIEW_EVENT                  = {eis_raster_index_gui_Event}
VIEW_EVENT.eis_raster_index_gui    = Self
VIEW_EVENT.Type             = "VIEWRASTER"
VIEWbutton                  = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' View Details... ' ,     $
                                    Event_Pro   = 'eis_raster_index_gui_EV',$
                                    uValue      = VIEW_EVENT)

;
; Accept Button
;
QUIT_EVENT                  = {eis_raster_index_gui_Event}
QUIT_EVENT.eis_raster_index_gui = Self
QUIT_EVENT.Type             = "QUIT"
quitbutton                  = WIDGET_BUTTON(bottomBase,                     $
                                    value       = ' Accept ',               $
                                    Event_Pro   = 'eis_raster_index_gui_EV',$
                                    uValue      = QUIT_EVENT)


END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_raster_index_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_raster_index_gui_Event
OBJ_DESTROY    , eis_raster_index_gui_Event.eis_raster_index_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_raster_index_gui::CleanUp

PTR_FREE , Self.ra_dbList

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

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

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

tlbID = Self.tlbID

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

    Return, Self.tlbID
End

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

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

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

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

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_raster_index_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_raster_index_gui::XManager

XMANAGER , "eis_raster_index_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_raster_index_gui_EV",                                    $
    cleanup        = "eis_raster_index_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                   $
    /NO_BLOCK

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_raster_index_gui_Event__Define

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

;Get event handler structure containing eis_raster_index_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_raster_index_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_raster_index_gui's class member procedure "Handler"
eis_raster_index_gui_Event.eis_raster_index_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_raster_index_gui_Event
CASE eis_raster_index_gui_Event.Type OF
    "QUIT"      : Self->ok
    "VIEWRASTER": Self->viewRasterDetails
    "LINELIST"  : Self->selectRaster , event
    ELSE        : print,eis_raster_index_gui_Event.Type
ENDCASE

END
;______________________________________________________________________________
; View Raster Details
;______________________________________________________________________________
PRO eis_raster_index_gui::selectRaster , event

IF (event.clicks EQ 2) THEN Self->ok

END
;______________________________________________________________________________
; View Raster Details
;______________________________________________________________________________
PRO eis_raster_index_gui::ok

raster_index = WIDGET_INFO(Self.ra_dbListID , /LIST_SELECT)
IF (raster_index EQ -1) THEN BEGIN
    mText = 'No item selected. Aborting!'
    BEEP
    dummy = DIALOG_MESSAGE(mText,/ERROR , DIALOG_PARENT = Self.tlbID)
    RETURN
ENDIF

Self.parentClass->update_raster_index , raster_index
;Self.parentClass->setProperty , raster_index = raster_index

; Finally, kill the GUI
Self->Control, /Destroy

END
;______________________________________________________________________________
; View Raster Details
;______________________________________________________________________________
PRO eis_raster_index_gui::viewRasterDetails

; Check a raster list item is selected
index = WIDGET_INFO(Self.ra_dbListID , /LIST_SELECT)
IF (index EQ -1) THEN BEGIN
    messageText = 'No item selected. Aborting.'
    BEEP
    dummy = DIALOG_MESSAGE(messageText,/ERROR , DIALOG_PARENT = Self.tlbID)
    RETURN
ENDIF


line   = (*Self.ra_dblist)[index]
; Get ID value of selected item
; OK, let's split the line into its 3 components
lineSplit = STRSPLIT(line , /EXTRACT)
rasterID  = FIX(lineSplit[0])

; Read raster and linelist from DB, and pass into "eis_raster_details_gui"
eis_raster   = db_read_raster_entry(rasterID)
eis_lineList = db_read_linelist_entry(eis_raster.ll_id)

o_rasterDetails = OBJ_NEW("eis_raster_details_gui" , eis_raster   ,         $
                                                     eis_lineList ,         $
                                      group_leader = Self.group_leader)
o_rasterDetails->Realize
o_rasterDetails->XMANAGER

END
;______________________________________________________________________________
; Read Line List Database - all of it
;______________________________________________________________________________
PRO eis_raster_index_gui::readStudyRasters

ra_dbList = STRARR(Self.eis_study.nRasters)

FOR i = 0 , Self.eis_study.nRasters - 1 DO BEGIN

    ra_id      = STRING(format='(I06)',Self.eis_study.studyRasters[i].ra_id)
    ra_acronym = Self.eis_study.studyRasters[i].ra_acronym
    ra_title   = Self.eis_study.studyRasters[i].ra_title

    ra_dbList[i] = STRING(format='(A-8,A-22,A-90)',ra_id,ra_acronym,ra_title)
ENDFOR

PTR_FREE , Self.ra_dbList  & Self.ra_dbList = PTR_NEW(ra_dbList)

; Update widget list
WIDGET_CONTROL , Self.ra_dbListID , set_Value = ra_dbList

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO	eis_raster_index_gui__Define

    struct          =	{ eis_raster_index_gui                          ,     $
                                    tlbID           : 0L              ,     $
                                    group_leader    : 0L              ,     $
                                    ra_dbListID     : 0L              ,     $
                                    parentClass     : OBJ_NEW()       ,     $
                                    eis_study       : {eis_study}     ,     $
                                    ra_dbList       : PTR_NEW()             $
                      }

END
