;+
; Project     : SOHO - CDS     
;                   
; Name        : SEL_PARM_EVENT
;               
; Purpose     : Processes events from the SEL_PARM_MENU.
;               
; Explanation : Any events originating within the widgets realized by 
;               SEL_PARM_MENU are handled by this routine.
;               
; Use         : Only by XMANAGER
;    
; Inputs      : ev  -  the event structure
;               
; Opt. Inputs : None
;               
; Outputs     : None
;               
; Opt. Outputs: None
;               
; Keywords    : None
;
; Calls       : None
;               
; Restrictions: For use with SEL_PARM_MENU.
;               
; Side effects: None
;               
; Category    : Telemetry
;               
; Prev. Hist. : None
;
; Written     : C D Pike, RAL, 29-Sep-94
;               
; Modified    : Handle new CANCEL button.  18-Jan-95
;               Add sort by user string.  18-Apr-95
;
; Version     : Version 3, 18-Apr-95
;-            

PRO sel_parm_event, ev

;
;  COMMON blocks for widget id's
;
@emon.com
      
;
;  interpret type of event
;
type = TAG_NAMES(ev, /STRUCTURE)

;
;  could have been a BUTTON
;                    ======
;
IF (type EQ 'WIDGET_BUTTON') THEN BEGIN
   WIDGET_CONTROL, ev.id, GET_VALUE=value, get_uvalue=uvalue
 
;
;  OK (ie exit) request received
; 
   IF (value EQ 'OK') THEN BEGIN
      WIDGET_CONTROL, sel_parm_base, /destroy
      widget_control, main_base, sens=1
      n = where(wanted_parms ne '')
      if n(0) ge 0 then wanted_parms = wanted_parms(n)
   ENDIF

;
;  Cancel (ie exit and forget) request received
; 
   IF (value EQ 'Cancel') THEN BEGIN
      WIDGET_CONTROL, sel_parm_base, /destroy
      widget_control, main_base, sens=1
      wanted_parms(*) = ''
   ENDIF

;
;  Reset request received
; 
   IF (value EQ 'Reset') THEN BEGIN
      wanted_parms(*) = ''
      get_parm_list
      widget_control,parm_list_id,set_val=parm_list
      bell
      widget_control,msg_widg,set_val='Parameter selection cleared.'
   ENDIF

;
;  Sort by mnemonic request received
; 
   IF (value EQ 'Mnemonic') THEN BEGIN
      n = sort(strmid(parm_list,0,20))
      parm_list = parm_list(n)
      widget_control,parm_list_id,set_val=parm_list
   ENDIF

;
;  Sort by comment request received
; 
   IF (value EQ 'Comment') THEN BEGIN
      n = sort(strmid(parm_list,23,40))
      parm_list = parm_list(n)
      widget_control,parm_list_id,set_val=parm_list
   ENDIF

;
;  Sort by search string supplied
;
   IF (value EQ 'Search string') THEN BEGIN
      xinput,ss,'Enter the search string.',group=sel_parm_base,/modal
      if ss ne '' then ss = strupcase(ss)
      n = where(strpos(parm_list,ss) ge 0)
      if n(0) ge 0 then begin
         parm_list = [parm_list(n),' ',' ',parm_list]
      endif else begin
         bell
         widget_control, msg_widg, /append, $
                         set_val='No such string found in parameter database.'
         get_parm_list
      endelse
      widget_control,parm_list_id,set_val=parm_list
   ENDIF

;
;  Sort by original order request received
; 
   IF (value EQ 'Original order') THEN BEGIN
      get_parm_list
      widget_control,parm_list_id,set_val=parm_list
   ENDIF

ENDIF


;
;  or it was an INDEX input from the list itself
;               =====
;
if type eq 'WIDGET_LIST' then begin

   line = strtrim(strmid(parm_list(ev.index),0,20),2)
;
;  already in list?
;
   n = where(wanted_parms eq line)

;
;  if so, then ignore otherwise add to list
;
   if n(0) eq -1 then begin
      n = where(wanted_parms eq '')
      if n(0) eq -1 then begin
         flash_msg, msg_widg, 'Parameter selection list full.'
      endif else begin
         n = min(n)
         wanted_parms(n) = line
         widget_control, msg_widg, set_val=line, /append
      endelse
    endif
endif

END
