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

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

  (provide/contract
   [trace-gui% (class/c panel%)])

  ;; trace-gui% <: subwindow<%>
  ;; (new trace-gui% [parent Container] [view View])
  ;; Implements a panel displaying a sequence trace view.
  (define trace-gui%
    (class vertical-panel%
      (super-new)

      ;; Public properties of the class
      (init-field view)

      ;; Internal fields and initialization

      (define control-panel
        (new vertical-panel%
             [parent this]
             [stretchable-height #f]))

      (define display-panel
        (new trace-display%
             [parent this]
             [view view]))

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

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

      (define (do-update . args)
        (view-update view)
        (send display-panel on-update)
        (send actions on-update)
        (send objects on-update))

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

      ))

  )