;------------------------------------------------------------------------------;
;+
; NAME
;           EIS_LINELIST_GUI
;
; PURPOSE
;           This object GUI is the eis_mk_linelist tool. It is called from
;           eis_mk_raster
;
; CATEGORY
;           EIS technical planning
;
; INPUTS
;           parentClass - the eis_mk_raster object
;
; WRITTEN
;           V0.0 John A Rainnie, RAL, 2006
;
; HISTORY
;           V0.1 JAR, 25-Jun-2006
;               Truncate titles to 130 characters to stop rollover
;           v0.2 JAR, 10-Jan-2006
;               If called from eis_mk_raster, then disable ZDBASE droplist
;           v0.3 JAR, 21-Mar-2007
;               Eliminate ZDBASE toggling even for stand-alone case!
;-
;------------------------------------------------------------------------------;
FUNCTION eis_linelist_gui::Init , parentClass = parentClass

IF (KEYWORD_SET(parentClass) EQ 1) THEN BEGIN
    Self.parentClass  = parentClass
    Self.group_leader = parentClass->tlbID()
ENDIF

;-------------------create the main base---------------------------------------;
pt_version = eis_get_pt_version_number()
widTitle = 'EIS Line List Database' + pt_version
TLB_EVENT                   = {eis_linelist_gui_Event}
TLB_EVENT.eis_linelist_gui      = Self
TLB_EVENT.Type              = "TLB"
Self.tlbID                  = WIDGET_BASE(                                  $
                                    TITLE       = widTitle,                 $
                                    COLUMN      = 1,                        $
                                    FLOATING    = KEYWORD_SET(parentClass), $
                                    GROUP_LEADER = Self.group_leader ,      $
                                    UValue      = TLB_EVENT)

;-------------------create the GUI------------------------------;
Self->createGUI
Self->readLLDataBase

RETURN, 1

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_linelist_gui::createGUI

; ______________________________________________________________________
;
; Database List Base
;
; ______________________________________________________________________
dbBase                      = WIDGET_BASE(Self.tlbID ,                      $
                                    COLUMN      = 1,/frame)

; Get eis_fonts
fonts = eis_fonts()

titleBase                   = WIDGET_BASE(dbBase ,                          $
                                    ROW         = 1)

value = 'ID:     Acronym:              Title:'
ll_listLabel                = WIDGET_LABEL(titleBase ,                      $
                                    value       = value ,                   $
                                    /ALIGN_LEFT,                            $
                                    font        = fonts.mono)


LIST_EVENT                  = {eis_linelist_gui_Event}
LIST_EVENT.eis_linelist_gui = Self
LIST_EVENT.Type             = "LINELIST"
Self.dbListID               = WIDGET_LIST(dbBase ,                          $
                                    ySize       = 16 ,                      $
                                    xSize       = 120 ,                     $
                                    uValue      = LIST_EVENT,               $
                                    value       = '' ,                      $
                                    font        = fonts.mono)

; ______________________________________________________________________
;
; Info Base
;
; ______________________________________________________________________
infoBase                    = WIDGET_BASE(dbBase     ,                      $
                                    ROW         = 1)

aLabel                      = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'Author: ' ,              $
                                    /ALIGN_LEFT)

Self.authorID               = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'none' ,                  $
                                    xSize       = 150 ,                     $
                                    /ALIGN_LEFT)


aLabel                      = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'Created: ' ,             $
                                    /ALIGN_LEFT)

Self.dateID                 = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'none' ,                  $
                                    xSize       = 150 ,                     $
                                    /ALIGN_LEFT)

aLabel                      = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'Number of lines: ' ,     $
                                    /ALIGN_LEFT)

Self.nLinesID               = WIDGET_LABEL(infoBase ,                       $
                                    value       = 'none' ,                  $
                                    xSize       = 50 ,                      $
                                    /ALIGN_LEFT)


; ______________________________________________________________________
;
; Button Base
;
; ______________________________________________________________________
buttonBase                  = WIDGET_BASE(Self.tlbID ,                      $
                                    ROW         = 1,/grid_layout,/frame)

;; What is ZDBASE
;zdbase = eis_get_  zdbase()
;; Create USER/OFFICIAL droplist only if GUI is created standalone
;IF (OBJ_VALID(Self.parentClass) NE 1) THEN BEGIN
;    DLIST_EVENT             = {eis_linelist_gui_Event}
;    DLIST_EVENT.eis_linelist_gui   = Self
;    DLIST_EVENT.Type        = "DROPLIST"
;    DLISTbutton             = WIDGET_DROPLIST(buttonBase,                   $
;                                    Event_Pro   = 'eis_linelist_gui_EV',    $
;                                    title       = 'Database:'       ,       $
;                                    value       = ['official','user'] ,     $
;                                    uValue      = DLIST_EVENT)
;
;    WIDGET_CONTROL , DLISTbutton , set_droplist_select = zdbase
;ENDIF ELSE BEGIN
;    CASE zdbase OF
;        0    : value = "OFFICIAL DB"
;        1    : value = "USER DB"
;        ELSE : stop
;    ENDCASE
;    aLabel                  = WIDGET_LABEL(buttonBase    ,                  $
;                                    /ALIGN_LEFT          ,                  $
;                                    /DYNAMIC_RESIZE      ,                  $
;                                    value       = value  ,                  $
;                                    font        = fonts.bold)
;ENDELSE

VIEW_EVENT                  = {eis_linelist_gui_Event}
VIEW_EVENT.eis_linelist_gui    = Self
VIEW_EVENT.Type             = "VIEWDETAILS"
VIEWbutton                  = WIDGET_BUTTON(buttonBase,                     $
                                    value       = ' View Details... ',      $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    uValue      = VIEW_EVENT)


REFRESH_EVENT               = {eis_linelist_gui_Event}
REFRESH_EVENT.eis_linelist_gui = Self
REFRESH_EVENT.Type          = "REFRESHDB"
REFRESHbutton               = WIDGET_BUTTON(buttonBase,                     $
                                    value       = 'Refresh',                $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    uValue      = REFRESH_EVENT)

IF OBJ_VALID(Self.parentClass) THEN BEGIN

    LOAD_EVENT              = {eis_linelist_gui_Event}
    LOAD_EVENT.eis_linelist_gui    = Self
    LOAD_EVENT.Type         = "LOAD_LL"
    LOADbutton              = WIDGET_BUTTON(buttonBase,                     $
                                    value       = ' Load ' ,                $
                                    Event_Pro   = 'eis_linelist_gui_EV',    $
                                    uValue      = LOAD_EVENT)
ENDIF

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

; ______________________________________________________________________
;
; Search Button Base
;
; ______________________________________________________________________
searchButtonBase            = WIDGET_BASE(searchBase ,                      $
                                    ROW         = 1)

; ______________________________________________________________________
;
; Search Acronym Base
;
; ______________________________________________________________________
acronymBase                 = WIDGET_BASE(searchButtonBase ,                $
                                    ROW         = 1)

aLabel                      = WIDGET_LABEL(acronymBase ,                    $
                                    value       = 'Acronym: '  ,            $
                                    /ALIGN_LEFT)

ACRONYM_EVENT               = {eis_linelist_gui_Event}
ACRONYM_EVENT.eis_linelist_gui = Self
ACRONYM_EVENT.Type          = "ACRONYM"
Self.search_acronymID       = WIDGET_TEXT(acronymBase,                      $
                                    value       = '',                       $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    /EDITABLE                          ,    $
                                    xSize       = 20 ,                      $
                                    uValue      = ACRONYM_EVENT)

; ______________________________________________________________________
;
; Search Title Base
;
; ______________________________________________________________________
titleBase                   = WIDGET_BASE(searchButtonBase ,                $
                                    ROW         = 1)

aLabel                      = WIDGET_LABEL(titleBase   ,                    $
                                    value       = 'Title: '    ,            $
                                    /ALIGN_LEFT)

TITLE_EVENT                 = {eis_linelist_gui_Event}
TITLE_EVENT.eis_linelist_gui   = Self
TITLE_EVENT.Type            = "TITLE"
Self.search_titleID         = WIDGET_TEXT(titleBase  ,                      $
                                    value       = '',                       $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    /EDITABLE                          ,    $
                                    xSize       = 20 ,                      $
                                    uValue      = TITLE_EVENT)


; ______________________________________________________________________
;
; Search Author Base
;
; ______________________________________________________________________
authorBase                  = WIDGET_BASE(searchButtonBase ,                $
                                    ROW         = 1)

aLabel                      = WIDGET_LABEL(authorBase ,                     $
                                    value       = 'Author: '  ,             $
                                    /ALIGN_LEFT)

AUTHOR_EVENT                = {eis_linelist_gui_Event}
AUTHOR_EVENT.eis_linelist_gui  = Self
AUTHOR_EVENT.Type           = "AUTHOR"
Self.search_authorID        = WIDGET_TEXT(authorBase,                       $
                                    value       = '',                       $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    /EDITABLE                          ,    $
                                    xSize       = 20 ,                      $
                                    uValue      = AUTHOR_EVENT)

SEARCH_EVENT                = {eis_linelist_gui_Event}
SEARCH_EVENT.eis_linelist_gui  = Self
SEARCH_EVENT.Type           = "SEARCHDB"
SEARCHbutton                = WIDGET_BUTTON(authorBase,               $
                                    value       = ' Search ' ,              $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    uValue      = SEARCH_EVENT)

RESET_EVENT                 = {eis_linelist_gui_Event}
RESET_EVENT.eis_linelist_gui   = Self
RESET_EVENT.Type            = "RESET"
RESETbutton                 = WIDGET_BUTTON(authorBase,               $
                                    value       = ' Reset ' ,              $
                                    Event_Pro   = 'eis_linelist_gui_EV',       $
                                    uValue      = RESET_EVENT)

; ______________________________________________________________________
;
; Message Base
;
; ______________________________________________________________________
messageBase                 = WIDGET_BASE(searchBase ,                      $
                                    ROW         = 1)

aLabel                      = WIDGET_LABEL(messageBase ,                    $
                                    value       = 'Message: '  ,            $
                                    xSize       = 60 ,                      $
                                    /ALIGN_LEFT)

Self.messageID              = WIDGET_LABEL(messageBase ,                    $
                                    value       = 'n/a'  ,                  $
                                    xSize       = 300 ,                     $
                                    /ALIGN_LEFT)

; ______________________________________________________________________
;
; Quit Button
;
; ______________________________________________________________________
QUIT_EVENT                  = {eis_linelist_gui_Event}
QUIT_EVENT.eis_linelist_gui = Self
QUIT_EVENT.Type             = "QUIT"
quitbutton                  = WIDGET_BUTTON(Self.tlbID,                     $
                                    value       = ' Dismiss '   ,           $
                                    Event_Pro   = 'eis_linelist_gui_EV',    $
                                    uValue      = QUIT_EVENT)

END
;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_linelist_gui_Cleanup , wid

WIDGET_CONTROL , wid , get_uvalue = eis_linelist_gui_Event
OBJ_DESTROY    , eis_linelist_gui_Event.eis_linelist_gui

END
;______________________________________________________________________________
; Cleanup
;______________________________________________________________________________
PRO eis_linelist_gui::CleanUp

PTR_FREE , Self.orig_dbList
PTR_FREE , Self.dbList

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

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

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

tlbID = Self.tlbID

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

    Return, Self.tlbID
End

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

Widget_Control, Self.tlbID, _Extra=Widget_Control_Keywords

End

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

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

End

;______________________________________________________________________________
; Realize wrapper
;______________________________________________________________________________
PRO eis_linelist_gui::Realize

Widget_Control, Self.tlbID, /Realize

End

;______________________________________________________________________________
; XManager wrapper
;______________________________________________________________________________
PRO eis_linelist_gui::XManager

XMANAGER , "eis_linelist_gui" ,   Self.tlbID ,                                 $
    Event_Handler  = "eis_linelist_gui_EV",                                    $
    cleanup        = "eis_linelist_gui_Cleanup",                               $
    GROUP_LEADER   = Self.group_leader ,                                   $
    /NO_BLOCK

END

;______________________________________________________________________________
;
;______________________________________________________________________________
PRO eis_linelist_gui_Event__Define

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

;Get event handler structure containing eis_linelist_gui type object
Widget_CONTROL,Event.ID,get_uvalue = eis_linelist_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_linelist_gui's class member procedure "Handler"
eis_linelist_gui_Event.eis_linelist_gui->Handler,Event

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

WIDGET_CONTROL, Event.ID, Get_UValue = eis_linelist_gui_Event
CASE eis_linelist_gui_Event.Type OF
    "QUIT"          : Self->quit
;    "DROPLIST"      : Self->changeDatabaseDirectory , event
    "LINELIST"      : Self->updateInfo , event.clicks
    "REFRESHDB"     : Self->readLLDataBase
    "SEARCHDB"      : Self->search
    "AUTHOR"        : Self->search
    "ACRONYM"       : Self->search
    "TITLE"         : Self->search
    "RESET"         : Self->resetSearchFields
    "LOAD_LL"       : Self->loadLineList
    "NLINES_UP"     : Self->increase_list_size
    "NLINES_DOWN"   : Self->decrease_list_size
    "VIEWDETAILS"   : Self->view_details
    ELSE            : print,eis_linelist_gui_Event.Type
ENDCASE

END
;______________________________________________________________________________
; Kill GUI
;______________________________________________________________________________
PRO eis_linelist_gui::quit

IF (OBJ_VALID(Self.parentClass) EQ 1) THEN BEGIN

    CASE OBJ_CLASS(Self.parentClass) OF
        'EIS_MK_PLAN_GUI'        : stop
        'EIS_MK_STUDY_GUI'       : stop
        'EIS_MK_RASTER_GUI'      : Self.parentClass->kill_xlinelist,Self
        ELSE                     : stop
    ENDCASE

ENDIF ELSE BEGIN
    Self->Control, /Destroy
ENDELSE

END
;______________________________________________________________________________
; View Linelist Details
;______________________________________________________________________________
PRO eis_linelist_gui::view_details

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

splitLine = STRSPLIT((*Self.dbList)[index] , /EXTRACT)
idValue   = FIX(splitLine[0])
ll        = db_read_linelist_entry(idValue)

line = "*****************************"
line = [line,"Linelist"]
line = [line,""]
line = [line,"ID        : " + STRCOMPRESS(idValue,/REMOVE)]
line = [line,"Acronym   : " + ll.acronym]
line = [line,"Author    : " + ll.author]
line = [line,"Date      : " + ll.date]
line = [line,"num Lines : " + STRCOMPRESS(ll.nLines,/REMOVE)]
line = [line,""]
FOR i = 0, ll.nLines - 1 DO BEGIN

    index = STRCOMPRESS(i,/REMOVE_ALL)
    wave  = STRING(format='(F6.2)',ll.lines[i].wavelength/100.)
    name  = STRTRIM(ll.lines[i].name , 2)
    CASE ll.lines[i].type OF
        0   : type = 'c'
        1   : type = 'p'
        2   : type = 'u'
    ENDCASE

    line = [line,STRING(format='(A-3,A-7,A-2,A-10)',                        $
                          index,wave,type,name)]

ENDFOR
line = [line,"*****************************"]

print,transpose(line)
print,"Must create GUI to display this info"

END
;______________________________________________________________________________
; Increase ySize of List
;______________________________________________________________________________
PRO eis_linelist_gui::decrease_list_size

current_size = WIDGET_INFO(Self.dbListID , /LIST_NUM_VISIBLE)
IF (current_size LE 4) THEN RETURN
WIDGET_CONTROL , Self.dbListID , ySize = current_size - 2

;stop
print,current_size - 2

END
;______________________________________________________________________________
; Increase ySize of List
;______________________________________________________________________________
PRO eis_linelist_gui::increase_list_size

;stop
current_size = WIDGET_INFO(Self.dbListID , /LIST_NUM_VISIBLE)
WIDGET_CONTROL , Self.dbListID , ySize = current_size + 2

;stop
print,current_size + 2

END
;______________________________________________________________________________
; Reset Search Parameters
;______________________________________________________________________________
PRO eis_linelist_gui::resetSearchFields

;
; Acronym
;
WIDGET_CONTROL ,  Self.search_acronymID , set_value = ''
;
; Author
;
WIDGET_CONTROL ,  Self.search_authorID , set_value = ''
;
; Title
;
WIDGET_CONTROL ,  Self.search_titleID , set_value = ''
;
Self->search

END
;______________________________________________________________________________
; Search Database
;______________________________________________________________________________
PRO eis_linelist_gui::search

spar = ''
;
; Acronym
;
WIDGET_CONTROL ,  Self.search_acronymID , get_value = widValue
IF (widValue[0] NE '') THEN BEGIN
    spar = STRJOIN( [ 'acronym=' , widValue[0] ] , /SINGLE )
ENDIF
;
; Author
;
WIDGET_CONTROL ,  Self.search_authorID , get_value = widValue
IF (widValue[0] NE '') THEN BEGIN
        authorS = STRJOIN( [ 'author=' , widValue[0] ] , /SINGLE )
    IF (spar NE '') THEN BEGIN
        spar = STRJOIN( [ spar , authorS ] , ',', /SINGLE )
    ENDIF ELSE BEGIN
        spar = authorS
    ENDELSE
ENDIF
;
; Title
;
WIDGET_CONTROL ,  Self.search_titleID , get_value = widValue
IF (widValue[0] NE '') THEN BEGIN
        titleS = STRJOIN( [ 'title=' , widValue[0] ] , /SINGLE )
    IF (spar NE '') THEN BEGIN
        spar = STRJOIN( [ spar , titleS ] , ',', /SINGLE )
    ENDIF ELSE BEGIN
        spar = titleS
    ENDELSE
ENDIF

;
;help,spar

IF (spar EQ '') THEN BEGIN
    ; No search parameters defined
    PTR_FREE , Self.dbList
    Self.dbList = PTR_NEW(*Self.orig_dbList)
    ; Update widget list
    WIDGET_CONTROL , Self.dbListID , set_Value = STRTRIM(*Self.dbList,2)
    value = STRCOMPRESS(N_ELEMENTS(*Self.dbList),/REMOVE_ALL) +             $
                      ' line list entries found'
ENDIF ELSE BEGIN
    status = eis_open_db(/LINELIST)
    r = dbfind(spar)
    Self->displaySearchResults , r
    dbclose
    value = STRCOMPRESS(N_ELEMENTS(r),/REMOVE_ALL) + ' line list entries found'
    IF (N_ELEMENTS(r) EQ 1) AND (r[0] EQ 0) THEN value = 'No matching entries!'
ENDELSE

; Update Message
WIDGET_CONTROL , Self.messageID , set_value = value

END
;______________________________________________________________________________
; OK, display the search results
;______________________________________________________________________________
PRO eis_linelist_gui::displaySearchResults , r

IF (r[0] EQ 0)  OR (r[0] EQ -1) THEN BEGIN
    newList = ''
ENDIF ELSE BEGIN
    ; Get IDs we asked for (ids start at 1, NOT zero)
    newList = (*Self.orig_dbList)[r - 1]
    print,transpose('ID '+strcompress(r))
ENDELSE

; Refresh pointer
PTR_FREE , Self.dbList
Self.dbList = PTR_NEW(newList)
; Update widget list
WIDGET_CONTROL , Self.dbListID , set_Value = newList

END
;______________________________________________________________________________
; Update Author and Date info
;______________________________________________________________________________
PRO eis_linelist_gui::updateInfo , clicks

index = WIDGET_INFO(Self.dbListID , /LIST_SELECT)

splitLine = STRSPLIT((*Self.dbList)[index] , /EXTRACT)
idValue   = FIX(splitLine[0])

ll = db_read_linelist_entry(idValue)

WIDGET_CONTROL , Self.authorID , set_value = ll.author
WIDGET_CONTROL , Self.dateID   , set_value = ll.date
WIDGET_CONTROL , Self.nLinesID , set_value = STRCOMPRESS(ll.nLines,/REMOVE_ALL)

IF (clicks EQ 2) THEN Self->loadLineList

END
;;______________________________________________________________________________
;; Change ZDBASE between user and official
;;______________________________________________________________________________
;PRO eis_linelist_gui::changeDatabaseDirectory , event
;
;eis_set_zdbase , event.index
;Self->readLLDataBase
;
;END
;______________________________________________________________________________
; Load the selected Line List entry
;______________________________________________________________________________
PRO eis_linelist_gui::loadLineList

; IF this GUI was invoked as a free-standing, then ignore
; trying to load
IF ~OBJ_VALID(Self.parentClass) THEN RETURN

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

line   = (*Self.dblist)[index]
; Check there any entries!! If not, list widget value is set as null string!
IF (line EQ '') THEN BEGIN
    messageText = 'No item selected. Aborting.'
    dummy = DIALOG_MESSAGE(messageText,/ERROR , DIALOG_PARENT = Self.tlbID)
    RETURN
ENDIF

; OK, let's split the line into its 3 components
lineSplit = STRSPLIT(line , /EXTRACT)
; Get study ID
ll_id = LONG(lineSplit[0])
; Load LineList
eis_lineList = db_read_linelist_entry( ll_id )
; OK, get lineList - and update it
Self.parentClass->loadLineList , ll_id

END
;______________________________________________________________________________
; Read Line List Database - all of it
;______________________________________________________________________________
PRO eis_linelist_gui::readLLDataBase

; OK, read Line List database
ll_db = db_read_linelist_all()
nEntries = N_ELEMENTS(ll_db[0,*])

dbList = STRARR(nEntries)

FOR i = 0,nEntries - 1 DO BEGIN

    title = STRTRIM(ll_db[2,i],2)
    IF (STRLEN(title) GT 87) THEN BEGIN

        title = STRJOIN([STRMID(title,0,87),'...'],/SINGLE)

    ENDIF


    dbList[i] = STRING(format='(A6,A2,A-20,A2,A-90)',                      $
                        ll_db[0,i],'  ',ll_db[1,i],'  ',title)
ENDFOR
; Refresh pointer
PTR_FREE , Self.dbList , Self.orig_dbList
Self.dbList      = PTR_NEW(STRTRIM(dbList,2))
Self.orig_dbList = PTR_NEW(STRTRIM(dbList,2))
; Update widget list
WIDGET_CONTROL , Self.dbListID , set_Value = *Self.dbList
; Update Message
value = STRCOMPRESS(nEntries,/REMOVE_ALL) + ' line list entries'
WIDGET_CONTROL , Self.messageID , set_value = value

WIDGET_CONTROL , Self.authorID , set_value = 'none'
WIDGET_CONTROL , Self.dateID   , set_value = 'none'
WIDGET_CONTROL , Self.nLinesID , set_value = 'none'

; Update TLB Title
pt_version = eis_get_pt_version_number()
widTitle = "EIS Line List Database " + pt_version + ":  "  +                $
           STRCOMPRESS(nEntries , /REMOVE_ALL)             +                $
           " entries"
WIDGET_CONTROL , Self.tlbID , TLB_Set_Title = widTitle

END
;______________________________________________________________________________
; Define Data members
;______________________________________________________________________________
PRO	eis_linelist_gui__Define

    struct          =	{ eis_linelist_gui                              ,     $
                                    tlbID           : 0L              ,     $
                                    group_leader    : 0L              ,     $
                                    dbListID        : 0L              ,     $
                                    parentClass     : OBJ_NEW()       ,     $
                                    orig_dbList     : PTR_NEW()       ,     $
                                    dbList          : PTR_NEW()       ,     $
                                    authorID        : 0L              ,     $
                                    dateID          : 0L              ,     $
                                    nLinesID        : 0L              ,     $
                                    messageID       : 0L              ,     $
                                    search_authorID : 0L              ,     $
                                    search_acronymID: 0L              ,     $
                                    search_titleID  : 0L                    $
                      }

END
