PRO xwidump,base,text,id,level,no_text=no_text
  
  default,level,0
  
  IF level EQ 0 THEN id = [base] $
  ELSE id = [id,base]
  
  IF NOT widget_info(base,/valid_id) THEN BEGIN
     print,"Non-valid widget ID passed to XWIDUMP"
     return
  END
  
  do_text = NOT keyword_set(no_text)
  
  IF do_text THEN BEGIN 
     IF level GT 0 THEN pretext = string(replicate(32b,level)) $
     ELSE               pretext = ""
     IF level EQ 0 THEN text = [pretext+xwidump_text(base)] $
     ELSE text = [text,pretext+xwidump_text(base)]
     pretext = pretext+" "
  END
  
  next = widget_info(base,/child)
  
  WHILE widget_info(next,/valid_id) DO BEGIN
     IF widget_info(next,/child) ne 0 THEN $
        xwidump,next,text,id,level+1,no_text=no_text $
     ELSE BEGIN
        IF do_text THEN text = [text,pretext+xwidump_text(next)]
        id = [id,next]
     END
     next = widget_info(next,/sibling)
  END
  
  IF do_text THEN BEGIN
     IF n_params() EQ 1 THEN BEGIN
        print,text,format='(A)'
     END
  END
END


PRO xwidump_test
  
  base = widget_base(/column)
  su = widget_base(base,/row,uvalue='SU')
  su1 = widget_base(su,/column,uvalue='SU1')
  but = widget_button(su1,value='Button',uvalue='BUT')
  su2 = widget_base(su,/column,uvalue='SU2')
  ; 06-Jun-2018, Gelu added bitmap button test 
  but2 = widget_button(su2,value=filepath('view.bmp', subdirectory=['resource', 'bitmaps']),uvalue='BUT2',/bitmap)
  widget_control,base,/realize
  xwidump,base
END