(module trace-grid mzscheme (require (lib "contract.ss") (lib "class.ss") (lib "mred.ss" "mred") "interfaces.ss" "util-mixins.ss" "editor-canvas-mixins.ss" "pasteboard-mixins.ss" "snip-mixins.ss" "draw.ss") (provide/contract [trace-grid% (class/c editor-canvas% updatee<%>)]) (define trace-grid% (class* (ensure-iface editor-canvas-util<%> editor-canvas-util-mixin (pullable-editor-canvas-mixin editor-canvas%)) (updatee<%>) (super-new [style '(hide-hscroll hide-vscroll)] [horizontal-inset 0] [vertical-inset 0]) (inherit set-editor get-client-size) (init-field trace-display) (public on-update) (override on-pull) (define editor (new trace-grid-editor% [trace-display trace-display])) (set-editor editor) (define (on-pull editor-x editor-y dc-x dc-y) (send trace-display scroll-trace/xy (- editor-x dc-x) (- editor-y dc-y))) (define (on-update) (send editor on-update)))) (define trace-grid-editor% (class* (ensure-iface pasteboard-util<%> pasteboard-util-mixin (inert-pasteboard-mixin pasteboard%)) (updatee<%>) (super-new) (inherit insert) (init-field trace-display) (public on-update) (define snip (new trace-grid-snip% [trace-display trace-display])) (insert snip 0 0) (define (on-update) (send snip on-update)))) (define trace-grid-snip% (class* (updatable-snip-mixin (custom-snip-mixin snip%)) (updatee<%>) (super-new) (init-field trace-display) (override paint extent) (private get-view) (define (get-view) (send trace-display get-view)) (define (extent dc x y) (values (view-width (get-view)) (view-height (get-view)) 0 0 0 0)) (define (paint easel) (draw-view easel (get-view))) )) )