pro list_codecs_m_event, event

widget_control, event.id, get_uvalue = mnu
lab = widget_info(event.top, /child)
widget_control, lab, get_uvalue = state

case mnu of
    'CODEC': begin
        (*state).isel = event.index
        if event.clicks eq 2 then widget_control, event.top, /destroy $
        else widget_control, (*state).dobut, sensitive = 1
    end
    'DO': widget_control, event.top, /destroy
    'DONT': begin
        (*state).isel = -1
        widget_control, event.top, /destroy
    end
endcase

end
function list_codecs_menc, group = group

;+
; LIST_CODECS_MENC
;	Make a list of the available codecs for mencoder
;
; Usage:
;	codec=list_codecs_menc()
;
; Return Value:
;	The chosen codec (string)
;
; Keywords:
;	group	long	A parent widget.
;
; Notes:
;	The extraction relies on a fixed format for the codec list
;	emitted from avconv.
;
; History:
;	Original (after list_codecs); SJT
;-

  if n_elements(group) eq 0 then group = 0l

  spawn, 'avconv -codecs', out, err
  ; Select encodable video codecs only
  locs = where(strmid(out, 2, 2) eq 'EV', nm)

  clist = strmid(out[locs], 8)
  nl = strpos(clist, ' ')
  cnames = strarr(nm)
  for j = 0, nm-1 do cnames[j] = strmid(clist[j], 0, nl[j])
  
  if ~widget_info(/valid, group) then begin
     for j = 0, nm-1 do print, j, clist[j], format = "(I0,') ',A)"
     isel = 0
     read, "Enter codec number to choose or -1 for none :_", isel
     if isel lt 0 then return, ''
     return, cnames[isel]
  endif

  base = widget_base(group = group, $
                     /modal, $
                     /column)

  lab = widget_label(base, $
                     value = "Select codec for mencoder")

  junk = widget_list(base, $
                     value = clist, $
                     uvalue = 'CODEC', $
                     ysize = nm < 12)

  jb = widget_base(base, $
                   /row)

  dobut = widget_button(jb, $
                        value = 'Apply', $
                        uvalue = 'DO', $
                        sensitive = 0)

  junk = widget_button(jb, $
                       value = 'Cancel', $
                       uvalue = 'DONT')

  state = ptr_new({isel: 0l, $
                   dobut: dobut})

  widget_control, lab, set_uvalue = state

  widget_control, base, /real

  xmanager, 'list_codecs_m', base

  if (*state).isel lt 0 then rv = '' $
  else rv = cnames[(*state).isel]

  ptr_free, state

  return, rv

end
