gui/trace-control.ss
(module trace-control mzscheme

  (require (lib "contract.ss")
           (lib "class.ss")
           (lib "mred.ss" "mred")
           "interfaces.ss"
           "message-mixins.ss"
           "../model/view.ss"
           )

  (provide/contract
   [trace-control% (class/c panel% updatee<%>)])

  (define trace-control%
    (class* vertical-panel% (updatee<%>)
      (super-new [stretchable-height #f])

      ;; Public properties of the class
      (init-field view trace-display)
      (public on-update)

      ;; Internal fields and initialization

      (define (do-update . args)
        (send trace-display do-update))

      (define update (new button%
                          [parent this]
                          [label "Update"]
                          [callback do-update]))

      (define actions
        (new (updatable-message-mixin message%)
             [parent this]
             [stretchable-width #t]
             [update-label
              (lambda () (format "Actions: ~s" (view-count-actions view)))]))

      (define objects
        (new (updatable-message-mixin message%)
             [parent this]
             [stretchable-width #t]
             [update-label
              (lambda () (format "Objects: ~s" (view-count-objects view)))]))

      (define (on-update)
        (send actions on-update)
        (send objects on-update))

      ))

  )