;+
; NAME:
;       EIS_XTEXT
;
; PURPOSE:
;
; CATEGORY:
;       Hansteen/Wikstol Data analysis SW
;
; CALLING SEQUENCE:
;
; INPUTS:
;
; KEYWORD PARAMETERS:
;
; Outputs:
;       None
;
; CALLS:
;
; COMMON BLOCKS:
;
; PROCEDURE:
;
; RESTRICTIONS:
;
;
; MODIFICATION HISTORY:
;       09-Feb-2007: Viggo Hansteen. Version 1.0
;
; $Id: eis_xtext.pro,v 1.1 2007/02/10 02:06:52 viggoh Exp $
;-
;

pro eis_xtext_destroy, event
  widget_control, event.top, get_uvalue = info
  widget_control, event.top,/destroy
end

pro eis_xtext_cleanup, tlb
  widget_control, tlb, get_uvalue = info
  ptr_free, info
end

pro eis_xtext_search, event
  widget_control, event.top, get_uvalue = info
  sstring = strtrim(event.value, 2)
  if sstring eq (*info).sstring then begin
    (*info).match=shift((*info).match[0:(*info).nmatch-1],-1)
  endif else begin
    (*info).sstring=sstring
    (*info).textpos=0
    match=strmatch((*info).text,'*'+sstring+'*',/fold_case)
    (*info).match=where(match)
    (*info).nmatch=n_elements(where(match))
  endelse
  (*info).textpos=((*info).match)[0]
  widget_control,(*info).textwidget,set_text_top_line=(*info).textpos
end

pro eis_xtext, text, nosearch=nosearch

  if n_params() ne 1 then begin
    message,'eis_xtext, textstring',/info
    return
  endif
  
  if n_elements(nosearch) eq 0 then search=1 else search=0

  dirsep = get_delim()
  tlb = widget_base(/row, title='eis_xtext', mbar=menubar, $
                    xoffset = 100,yoffset = 100)
  lcol = widget_base(tlb, /frame, /column)      ;left column.

  ; create pulldown menus on the base widget menubar
  filemenu=widget_button(menubar, value='File',/menu, uvalue='file')
  exitmenu=widget_button(filemenu, value='Close', event_pro='eis_xtext_destroy')

  ; text widget
  textfield = widget_base(lcol, /col, /frame)
  textwidget = widget_text(textfield,  value = text, $
                   xsize=130,ysize=30,/scroll)
  
  row2=widget_base(lcol, /column, /frame)
  searchfield=widget_base(row2, /row,event_pro='eis_xtext_search')
  if search then begin
    search=cw_field(searchfield, Title= 'Search:  ',value=' ', /string ,/return_events)
  endif
  closefield = widget_base(searchfield, /row)
  closebutton = widget_button(closefield, value = '        Close        ', $
                              event_pro = 'eis_xtext_destroy')

  ; realize main window:
  widget_control, tlb, /realize, tlb_get_size = tlb_sz

  ; define the info structure, used send information around
  info = {text:text, $
          sstring:' ', $
          match:intarr(n_elements(text)), $
          nmatch: 0, $
          textpos:0, $
          textwidget:textwidget}
  info = ptr_new(info, /no_copy)

  ; set user value of tlb widget to be the info ptr
  widget_control, tlb, set_uvalue = info
  
  xmanager, 'xcal', tlb, /no_block, group_leader = group, cleanup = 'eis_xtext_cleanup'

end
