Macro stepper: added support for extra nav tools (zoom, jump) but disabled
svn: r5461
This commit is contained in:
parent
3fe785014a
commit
f9dfebefa3
|
@ -89,6 +89,10 @@
|
||||||
(define (cursor:can-move-previous? c)
|
(define (cursor:can-move-previous? c)
|
||||||
(pair? (cursor-prefix c)))
|
(pair? (cursor-prefix c)))
|
||||||
|
|
||||||
|
(define (cursor->list c)
|
||||||
|
(append (reverse (cursor-prefix c))
|
||||||
|
(cursor-suffix->list c)))
|
||||||
|
|
||||||
|
(define (cursor-suffix->list c) (cursor-suffix c))
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -69,6 +69,8 @@
|
||||||
(notify-box/pref pref:suppress-warnings?))
|
(notify-box/pref pref:suppress-warnings?))
|
||||||
(field/notify one-by-one?
|
(field/notify one-by-one?
|
||||||
(notify-box/pref pref:one-by-one?))
|
(notify-box/pref pref:one-by-one?))
|
||||||
|
(field/notify extra-navigation?
|
||||||
|
(notify-box/pref pref:extra-navigation?))
|
||||||
(super-new)))
|
(super-new)))
|
||||||
|
|
||||||
(define macro-stepper-frame%
|
(define macro-stepper-frame%
|
||||||
|
@ -186,6 +188,9 @@
|
||||||
(menu-option/notify-box extras-menu
|
(menu-option/notify-box extras-menu
|
||||||
"Suppress warnings"
|
"Suppress warnings"
|
||||||
(get-field suppress-warnings? config))
|
(get-field suppress-warnings? config))
|
||||||
|
(menu-option/notify-box extras-menu
|
||||||
|
"Extra navigation"
|
||||||
|
(get-field extra-navigation? config))
|
||||||
(new checkable-menu-item%
|
(new checkable-menu-item%
|
||||||
(label "(Debug) Catch internal errors?")
|
(label "(Debug) Catch internal errors?")
|
||||||
(parent extras-menu)
|
(parent extras-menu)
|
||||||
|
@ -220,8 +225,16 @@
|
||||||
|
|
||||||
(define warnings-frame #f)
|
(define warnings-frame #f)
|
||||||
|
|
||||||
|
;; add-deriv : Derivation -> void
|
||||||
(define/public (add-deriv d)
|
(define/public (add-deriv d)
|
||||||
(set! derivs (append derivs (list d)))
|
(set! derivs (append derivs (list d)))
|
||||||
|
(ensure-nav:up+down-shown)
|
||||||
|
(if (null? (cdr derivs))
|
||||||
|
;; There is nothing currently displayed
|
||||||
|
(refresh/move/cached-prefix)
|
||||||
|
(update)))
|
||||||
|
|
||||||
|
(define/private (ensure-nav:up+down-shown)
|
||||||
(when (and (not (send nav:up is-shown?))
|
(when (and (not (send nav:up is-shown?))
|
||||||
(pair? (cdr (append derivs-prefix derivs))))
|
(pair? (cdr (append derivs-prefix derivs))))
|
||||||
(send navigator change-children
|
(send navigator change-children
|
||||||
|
@ -231,30 +244,36 @@
|
||||||
nav:previous
|
nav:previous
|
||||||
nav:next
|
nav:next
|
||||||
nav:end
|
nav:end
|
||||||
nav:down))))
|
nav:down)))))
|
||||||
(if (null? (cdr derivs))
|
|
||||||
;; There is nothing currently displayed
|
|
||||||
(refresh/move/cached-prefix)
|
|
||||||
(update)))
|
|
||||||
|
|
||||||
(define/public (get-controller) sbc)
|
(define/public (get-controller) sbc)
|
||||||
(define/public (get-view) sbview)
|
(define/public (get-view) sbview)
|
||||||
(define/public (get-macro-hiding-prefs) macro-hiding-prefs)
|
(define/public (get-macro-hiding-prefs) macro-hiding-prefs)
|
||||||
|
|
||||||
(define area (new vertical-panel% (parent parent)))
|
(define area (new vertical-panel% (parent parent)))
|
||||||
(define navigator
|
(define supernavigator
|
||||||
(new horizontal-panel%
|
(new horizontal-panel%
|
||||||
(parent area)
|
(parent area)
|
||||||
(stretchable-height #f)
|
(stretchable-height #f)
|
||||||
(alignment '(center center))))
|
(alignment '(center center))))
|
||||||
|
(define navigator
|
||||||
|
(new horizontal-panel%
|
||||||
|
(parent supernavigator)
|
||||||
|
(stretchable-width #f)
|
||||||
|
(stretchable-height #f)
|
||||||
|
(alignment '(left center))))
|
||||||
|
(define extra-navigator
|
||||||
|
(new horizontal-panel%
|
||||||
|
(parent supernavigator)
|
||||||
|
(stretchable-width #f)
|
||||||
|
(stretchable-height #f)
|
||||||
|
(alignment '(left center))
|
||||||
|
(style '(deleted))))
|
||||||
|
|
||||||
(define sbview (new sb:syntax-widget%
|
(define sbview (new sb:syntax-widget%
|
||||||
(parent area)
|
(parent area)
|
||||||
(macro-stepper this)
|
(macro-stepper this)
|
||||||
(pref:props-percentage pref:props-percentage)))
|
(pref:props-percentage pref:props-percentage)))
|
||||||
(send config listen-show-syntax-properties?
|
|
||||||
(lambda (show?) (send sbview show-props show?)))
|
|
||||||
|
|
||||||
(define sbc (send sbview get-controller))
|
(define sbc (send sbview get-controller))
|
||||||
(define control-pane
|
(define control-pane
|
||||||
(new vertical-panel% (parent area) (stretchable-height #f)))
|
(new vertical-panel% (parent area) (stretchable-height #f)))
|
||||||
|
@ -263,11 +282,16 @@
|
||||||
(parent control-pane)
|
(parent control-pane)
|
||||||
(stepper this)
|
(stepper this)
|
||||||
(config config)))
|
(config config)))
|
||||||
|
|
||||||
|
(send config listen-show-syntax-properties?
|
||||||
|
(lambda (show?) (send sbview show-props show?)))
|
||||||
|
|
||||||
(send config listen-show-hiding-panel?
|
(send config listen-show-hiding-panel?
|
||||||
(lambda (show?) (show-macro-hiding-prefs show?)))
|
(lambda (show?) (show-macro-hiding-prefs show?)))
|
||||||
|
|
||||||
(send sbc add-selection-listener
|
(send sbc add-selection-listener
|
||||||
(lambda (stx) (send macro-hiding-prefs set-syntax stx)))
|
(lambda (stx)
|
||||||
|
(send macro-hiding-prefs set-syntax stx)))
|
||||||
|
|
||||||
(send config listen-highlight-foci?
|
(send config listen-highlight-foci?
|
||||||
(lambda (_) (update/preserve-view)))
|
(lambda (_) (update/preserve-view)))
|
||||||
|
@ -278,8 +302,12 @@
|
||||||
(send config listen-one-by-one?
|
(send config listen-one-by-one?
|
||||||
(lambda (_) (refresh)))
|
(lambda (_) (refresh)))
|
||||||
|
|
||||||
|
(send config listen-extra-navigation?
|
||||||
|
(lambda (show?) (show-extra-navigation show?)))
|
||||||
|
|
||||||
(define nav:up
|
(define nav:up
|
||||||
(new button% (label "Previous term") (parent navigator) (style '(deleted))
|
(new button% (label "Previous term") (parent navigator)
|
||||||
|
(style '(deleted))
|
||||||
(callback (lambda (b e) (navigate-up)))))
|
(callback (lambda (b e) (navigate-up)))))
|
||||||
|
|
||||||
(define nav:start
|
(define nav:start
|
||||||
|
@ -298,6 +326,14 @@
|
||||||
(define nav:down
|
(define nav:down
|
||||||
(new button% (label "Next term") (parent navigator) (style '(deleted))
|
(new button% (label "Next term") (parent navigator) (style '(deleted))
|
||||||
(callback (lambda (b e) (navigate-down)))))
|
(callback (lambda (b e) (navigate-down)))))
|
||||||
|
#;
|
||||||
|
(define nav:zoom
|
||||||
|
(new button% (label "Zoom in") (parent extra-navigator)
|
||||||
|
(callback (lambda (b e) (zoom)))))
|
||||||
|
#;
|
||||||
|
(define nav:jump-to
|
||||||
|
(new button% (label "Jump to") (parent extra-navigator)
|
||||||
|
(callback (lambda (b e) (jump-to)))))
|
||||||
|
|
||||||
(define/public (show-macro-hiding-prefs show?)
|
(define/public (show-macro-hiding-prefs show?)
|
||||||
(send area change-children
|
(send area change-children
|
||||||
|
@ -306,6 +342,13 @@
|
||||||
(append (remq control-pane children) (list control-pane))
|
(append (remq control-pane children) (list control-pane))
|
||||||
(remq control-pane children)))))
|
(remq control-pane children)))))
|
||||||
|
|
||||||
|
(define/private (show-extra-navigation show?)
|
||||||
|
(send supernavigator change-children
|
||||||
|
(lambda (children)
|
||||||
|
(if show?
|
||||||
|
(list navigator extra-navigator)
|
||||||
|
(list navigator)))))
|
||||||
|
|
||||||
;; Navigate
|
;; Navigate
|
||||||
|
|
||||||
(define/private (navigate-to-start)
|
(define/private (navigate-to-start)
|
||||||
|
@ -334,6 +377,50 @@
|
||||||
(set! synth-deriv #f))
|
(set! synth-deriv #f))
|
||||||
(refresh/move/cached-prefix))
|
(refresh/move/cached-prefix))
|
||||||
|
|
||||||
|
;; FIXME: selected stx must be in term1; doesn't work in term2
|
||||||
|
#;
|
||||||
|
(define/private (zoom)
|
||||||
|
(let* ([selected-syntax (send sbc get-selected-syntax)]
|
||||||
|
[step (and steps (cursor:current steps))]
|
||||||
|
[deriv (and step (protostep-deriv step))])
|
||||||
|
(when (and selected-syntax deriv)
|
||||||
|
(for-each go/deriv (seek/syntax selected-syntax deriv)))))
|
||||||
|
#;
|
||||||
|
(define/public (jump-to)
|
||||||
|
(let* ([selected-syntax (send sbc get-selected-syntax)]
|
||||||
|
[step (and steps (cursor:current steps))]
|
||||||
|
[deriv (and step (protostep-deriv step))])
|
||||||
|
(when (and selected-syntax deriv)
|
||||||
|
(let ([subderivs (seek/syntax selected-syntax deriv)])
|
||||||
|
(cond [(null? subderivs)
|
||||||
|
(message-box "Macro stepper - Jump to"
|
||||||
|
"Cannot find selected term in the expansion")]
|
||||||
|
[(and (pair? subderivs) (null? (cdr subderivs)))
|
||||||
|
(jump-to/deriv (car subderivs))]
|
||||||
|
[else
|
||||||
|
(message-box "Macro stepper - Jump to"
|
||||||
|
"Subterm occurs non-linearly in the expansion")])))))
|
||||||
|
#;
|
||||||
|
(define/private (jump-to/deriv subderiv)
|
||||||
|
(define all-step-derivs
|
||||||
|
(let ([ht (make-hash-table)])
|
||||||
|
(for-each (lambda (s) (hash-table-put! ht (protostep-deriv s) #t))
|
||||||
|
(cursor-suffix->list steps))
|
||||||
|
ht))
|
||||||
|
(define target-deriv
|
||||||
|
(find-deriv
|
||||||
|
(lambda (d) (hash-table-get all-step-derivs d (lambda () #f)))
|
||||||
|
(lambda (d) #f)
|
||||||
|
subderiv))
|
||||||
|
(unless target-deriv
|
||||||
|
(message-box "Macro stepper - Jump to"
|
||||||
|
"Could not find selected term in the expansion"))
|
||||||
|
(when target-deriv
|
||||||
|
(let loop ()
|
||||||
|
(unless (eq? (protostep-deriv (cursor:current steps)) target-deriv)
|
||||||
|
(cursor:move-next steps)))
|
||||||
|
(update/save-position)))
|
||||||
|
|
||||||
(define/private (insert-step-separator text)
|
(define/private (insert-step-separator text)
|
||||||
(send sbview add-text "\n ")
|
(send sbview add-text "\n ")
|
||||||
(send sbview add-text
|
(send sbview add-text
|
||||||
|
@ -499,9 +586,8 @@
|
||||||
(send nav:next enable (and steps (cursor:can-move-next? steps)))
|
(send nav:next enable (and steps (cursor:can-move-next? steps)))
|
||||||
(send nav:end enable (and steps (cursor:can-move-next? steps)))
|
(send nav:end enable (and steps (cursor:can-move-next? steps)))
|
||||||
(send nav:up enable (and (pair? derivs-prefix)))
|
(send nav:up enable (and (pair? derivs-prefix)))
|
||||||
(send nav:down enable
|
(send nav:down enable (and (pair? derivs))))
|
||||||
(and (pair? derivs))))
|
|
||||||
|
|
||||||
;; --
|
;; --
|
||||||
|
|
||||||
;; refresh/move/cached-prefix : -> void
|
;; refresh/move/cached-prefix : -> void
|
||||||
|
@ -661,6 +747,7 @@
|
||||||
(super-new)
|
(super-new)
|
||||||
(send sbview show-props (send config get-show-syntax-properties?))
|
(send sbview show-props (send config get-show-syntax-properties?))
|
||||||
(show-macro-hiding-prefs (send config get-show-hiding-panel?))
|
(show-macro-hiding-prefs (send config get-show-hiding-panel?))
|
||||||
|
(show-extra-navigation (send config get-extra-navigation?))
|
||||||
(refresh/move/cached-prefix)
|
(refresh/move/cached-prefix)
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
pref:highlight-foci?
|
pref:highlight-foci?
|
||||||
pref:suppress-warnings?
|
pref:suppress-warnings?
|
||||||
pref:one-by-one?
|
pref:one-by-one?
|
||||||
|
pref:extra-navigation?
|
||||||
))
|
))
|
||||||
|
|
||||||
;; macro-stepper-config%
|
;; macro-stepper-config%
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
(preferences:set-default 'MacroStepper:ShowRenameSteps? #f boolean?)
|
(preferences:set-default 'MacroStepper:ShowRenameSteps? #f boolean?)
|
||||||
(preferences:set-default 'MacroStepper:SuppressWarnings? #f boolean?)
|
(preferences:set-default 'MacroStepper:SuppressWarnings? #f boolean?)
|
||||||
(preferences:set-default 'MacroStepper:OneByOne? #f boolean?)
|
(preferences:set-default 'MacroStepper:OneByOne? #f boolean?)
|
||||||
|
(preferences:set-default 'MacroStepper:ExtraNavigation? #f boolean?)
|
||||||
|
|
||||||
(pref:get/set pref:width MacroStepper:Frame:Width)
|
(pref:get/set pref:width MacroStepper:Frame:Width)
|
||||||
(pref:get/set pref:height MacroStepper:Frame:Height)
|
(pref:get/set pref:height MacroStepper:Frame:Height)
|
||||||
|
@ -45,6 +46,7 @@
|
||||||
(pref:get/set pref:show-rename-steps? MacroStepper:ShowRenameSteps?)
|
(pref:get/set pref:show-rename-steps? MacroStepper:ShowRenameSteps?)
|
||||||
(pref:get/set pref:suppress-warnings? MacroStepper:SuppressWarnings?)
|
(pref:get/set pref:suppress-warnings? MacroStepper:SuppressWarnings?)
|
||||||
(pref:get/set pref:one-by-one? MacroStepper:OneByOne?)
|
(pref:get/set pref:one-by-one? MacroStepper:OneByOne?)
|
||||||
|
(pref:get/set pref:extra-navigation? MacroStepper:ExtraNavigation?)
|
||||||
|
|
||||||
))
|
))
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user