113 lines
3.4 KiB
Scheme
113 lines
3.4 KiB
Scheme
|
|
(module extensions mzscheme
|
|
(require (lib "class.ss")
|
|
(lib "unit.ss")
|
|
(lib "list.ss")
|
|
(lib "plt-match.ss")
|
|
(lib "mred.ss" "mred")
|
|
(lib "framework.ss" "framework")
|
|
(lib "boundmap.ss" "syntax")
|
|
"interfaces.ss"
|
|
"prefs.ss"
|
|
"warning.ss"
|
|
"hiding-panel.ss"
|
|
(prefix s: "../syntax-browser/widget.ss")
|
|
"../model/deriv.ss"
|
|
"../model/deriv-util.ss"
|
|
"../model/trace.ss"
|
|
"../model/hide.ss"
|
|
"../model/steps.ss"
|
|
"cursor.ss"
|
|
"util.ss")
|
|
(provide stepper-keymap%
|
|
stepper-context-menu%
|
|
stepper-syntax-widget%)
|
|
|
|
;; Extensions
|
|
|
|
(define stepper-keymap%
|
|
(class s:widget-keymap%
|
|
(init-field macro-stepper)
|
|
(inherit-field controller)
|
|
(inherit add-function)
|
|
|
|
(super-new)
|
|
|
|
(define/override (get-context-menu%)
|
|
stepper-context-menu%)
|
|
|
|
(define/public (get-hiding-panel)
|
|
(send macro-stepper get-macro-hiding-prefs))
|
|
|
|
(add-function "hiding:show-macro"
|
|
(lambda (i e)
|
|
(send* (get-hiding-panel)
|
|
(add-show-identifier)
|
|
(refresh))))
|
|
|
|
(add-function "hiding:hide-macro"
|
|
(lambda (i e)
|
|
(send* (get-hiding-panel)
|
|
(add-hide-identifier)
|
|
(refresh))))))
|
|
|
|
(define stepper-context-menu%
|
|
(class s:widget-context-menu%
|
|
(inherit-field keymap)
|
|
(inherit add-separator)
|
|
|
|
(field [show-macro #f]
|
|
[hide-macro #f])
|
|
|
|
(define/override (after-selection-items)
|
|
(super after-selection-items)
|
|
(add-separator)
|
|
(set! show-macro
|
|
(new menu-item% (label "Show this macro") (parent this)
|
|
(callback (lambda (i e)
|
|
(send keymap call-function "hiding:show-macro" i e)))))
|
|
(set! hide-macro
|
|
(new menu-item% (label "Hide this macro") (parent this)
|
|
(callback (lambda (i e)
|
|
(send keymap call-function "hiding:hide-macro" i e)))))
|
|
(void))
|
|
|
|
(define/override (on-demand)
|
|
(define hiding-panel (send keymap get-hiding-panel))
|
|
(define controller (send keymap get-controller))
|
|
(define stx (send controller get-selected-syntax))
|
|
(define id? (identifier? stx))
|
|
(send show-macro enable id?)
|
|
(send hide-macro enable id?)
|
|
(super on-demand))
|
|
|
|
(super-new)))
|
|
|
|
(define stepper-syntax-widget%
|
|
(class s:widget%
|
|
(init-field macro-stepper)
|
|
(inherit get-text)
|
|
|
|
(define/override (setup-keymap)
|
|
(new stepper-keymap%
|
|
(editor (get-text))
|
|
(widget this)
|
|
(macro-stepper macro-stepper)))
|
|
|
|
(define/override (show-props show?)
|
|
(super show-props show?)
|
|
(send macro-stepper update/preserve-view))
|
|
|
|
(super-new
|
|
(config (new config-adapter%
|
|
(config (send macro-stepper get-config)))))))
|
|
|
|
(define config-adapter%
|
|
(class object%
|
|
(init-field config)
|
|
(define/public pref:props-percentage
|
|
(case-lambda [() (send config get-props-percentage)]
|
|
[(v) (send config set-props-percentage v)]))
|
|
(super-new)))
|
|
)
|