racket/collects/macro-debugger/view/view.ss
Ryan Culpepper 502edfb02f macro stepper: fixed interface bugs
svn: r13109
2009-01-14 06:11:59 +00:00

71 lines
2.3 KiB
Scheme

#lang scheme/base
(require scheme/class
macro-debugger/util/class-iop
scheme/pretty
scheme/gui
framework/framework
"interfaces.ss"
"frame.ss"
"prefs.ss"
"../model/trace.ss")
(provide macro-stepper-director%
macro-stepper-frame%
go)
(define macro-stepper-director%
(class* object% (director<%>)
(define stepper-frames (make-hasheq))
;; Flags is a subset(list) of '(no-obsolete no-new-traces)
(define/private (add-stepper! s flags)
(hash-set! stepper-frames s flags))
(define/public (remove-stepper! s)
(hash-remove! stepper-frames s))
(define/public (add-obsoleted-warning)
(hash-for-each stepper-frames
(lambda (stepper-frame flags)
(unless (memq 'no-obsolete flags)
(send: stepper-frame stepper-frame<%> add-obsoleted-warning)))))
(define/public (add-trace events)
(hash-for-each stepper-frames
(lambda (stepper-frame flags)
(unless (memq 'no-new-traces flags)
(send: (send: stepper-frame stepper-frame<%> get-widget) widget<%>
add-trace events)))))
(define/public (add-deriv deriv)
(hash-for-each stepper-frames
(lambda (stepper-frame flags)
(unless (memq 'no-new-traces flags)
(send: (send: stepper-frame stepper-frame<%> get-widget) widget<%>
add-deriv deriv)))))
(define/public (new-stepper [flags '()])
(define stepper-frame (new-stepper-frame))
(define stepper (send: stepper-frame stepper-frame<%> get-widget))
(send stepper-frame show #t)
(add-stepper! stepper-frame flags)
stepper)
(define/public (new-stepper-frame)
(new macro-stepper-frame%
(config (new macro-stepper-config/prefs%))
(director this)))
(super-new)))
(define macro-stepper-frame%
(macro-stepper-frame-mixin
(frame:standard-menus-mixin
(frame:basic-mixin frame%))))
;; Main entry points
(define (go stx)
(define director (new macro-stepper-director%))
(define stepper (send: director director<%> new-stepper))
(send: director director<%> add-deriv (trace stx))
(void))