; Copyright (c) 1998, Forschungszentrum Juelich GmbH ICG-1
; All rights reserved.
; Unauthorized reproduction prohibited.
; This software may be used, copied, or redistributed as long as it is not
; sold and this copyright notice is reproduced on each copy made.  This
; routine is provided as is without any express or implied warranties
; whatsoever.
;
;+
; NAME:
;	x_breaker
;
; PURPOSE:
;  This widget procedure is used to break a routine by sending a breakpoint
;
; CATEGORY:
;   PROG_TOOLS/WIDGETS
;
; CALLING SEQUENCE:
;  x_breaker
;
;
; EXAMPLE:
;  PRO test
;    result=x_breaker()
;    FOR i=0l,100000l DO BEGIN
;       res=WIDGET_EVENT(result.base,/nowait)
;       WAIT,0.01
;       PRINT,i
;    ENDFOR
;  END
;
;
; MODIFICATION HISTORY:
; 	Written by:	R.Bauer (ICG-1), 1998-Dec-07
;-


PRO x_breaker_event,ev
   WIDGET_CONTROL, ev.id, get_uval=cmd
   WIDGET_CONTROL, ev.top, get_uval=map
   WIDGET_CONTROL, map.base, get_uval=struct
   IF SIZE(cmd,/type) NE 8 THEN BEGIN
      CASE cmd[0] OF
         'BREAK': BEGIN
            HELP,call=call
            line=LONG((STR_SEP((STR_SEP(call[1],'('))[1],')'))[0])
            file=(STR_SEP((STR_SEP(call[1],'<'))[1],'('))[0]
            BREAKPOINT,file,line
         END
         ELSE:
      ENDCASE
   ENDIF
END


FUNCTION x_breaker
   base=WIDGET_BASE(col=3,title='Break a running Script')
   id_break=WIDGET_BUTTON(base,Value='BREAK',UVALUE='BREAK',/ALIGN_CENTER,event_pro='x_breaker_event')
   result={base:base}
   WIDGET_CONTROL,base,set_uval= result,/realize , /XMANAGER_ACTIVE_COMMAND
   RETURN,result
END