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

  (require (lib "contract.ss")
           (lib "class.ss")
           (lib "mred.ss" "mred")
           (lib "etc.ss")
           "interfaces.ss"
           "util-mixins.ss"
           "pasteboard-mixins.ss"
           "snip-mixins.ss"
           "trace-header.ss"
           "draw.ss"
           "../model/view.ss"
           "../model/action-util.ss"
           )

  (provide/contract
   [trace-sidebar% (class/c editor-canvas% updatee<%>)])

  (define trace-sidebar%
    (class*
      (ensure-iface editor-canvas-util<%>
                    editor-canvas-util-mixin
                    editor-canvas%)
      (updatee<%>)

      (inherit set-editor)

      (init-field view trace-display)
      (super-new [style '(auto-hscroll auto-vscroll)]
                 [min-width (+ SIDEBAR-WIDTH SCROLLBAR-WIDTH)]
                 [horizontal-inset 0]
                 [vertical-inset 0])

      (public on-update)
      (override on-scroll/xy)

      (define editor
        (new trace-action-editor% [view view] [trace-display trace-display]))
      (set-editor editor)

      (define (on-scroll/xy x y dx dy)
        (unless (= 0 dy)
          (send trace-display scroll-trace/xy #f y)))

      (define (on-update)
        (send editor on-update))))

  (define trace-action-editor%
    (class*
      (ensure-iface pasteboard-util<%>
                    pasteboard-util-mixin
                    (static-pasteboard-mixin pasteboard%))
      (updatee<%>)

      (super-new)
      (inherit insert)

      (init-field view trace-display)
      (public on-update)
      (override on-double-click)

      (define sidebar-snip
        (new trace-sidebar-snip% [view view]))
      (insert sidebar-snip 0 0)

      (on-update)

      ;; Placeholder: reimplement soon.
      (define (on-double-click snip event)
        (super on-double-click snip event))

      (define (on-update)
        (send sidebar-snip on-update))

      ))

  (define SIDEBAR-LABEL-HORIZ-OFFSET 10)
  (define SIDEBAR-LABEL-VERT-OFFSET 10)
  (define SIDEBAR-ARROW-HORIZ-OFFSET 10)
  (define SIDEBAR-ARROW-VERT-OFFSET 12)

  (define trace-sidebar-snip%
    (class (updatable-snip-mixin
            (custom-snip-mixin snip%))
      (super-new)

      (init-field view)
      (override paint extent)

      (define (extent dc x y)
        (values SIDEBAR-WIDTH
                (view-height view)
                0 0 0 0))

      (define (paint easel)
        (draw-sidebar easel view))))

  )