89 lines
2.8 KiB
Racket
89 lines
2.8 KiB
Racket
#|
|
|
|
|
This file contains a mixin that should be used my any embedded editor that contains
|
|
code. What is does is tells the drscheme frame that the program has changed and
|
|
drscheme can appropriately reset highlighting and display the "save" button. There
|
|
is a facility of drscheme to do this but to my knowledge it is not working properly.
|
|
|
|
|#
|
|
|
|
#|NOTES:
|
|
|
|
This code is copied from the test suite tool and the test suite tool should be
|
|
rewritten to use this copy of the program. This is not a trivial change since the
|
|
alert-of-modify method in test-suite is currently clearing the test cases to reset
|
|
them.
|
|
|
|
This code can be replaced by drscheme:unit:program-editor-mixin when I figure out how
|
|
to make the results of the test case boxes be reset when (and only when) highlighting
|
|
is being reset.
|
|
|#
|
|
|
|
(module program-editor mzscheme
|
|
|
|
(require
|
|
mred
|
|
mzlib/etc
|
|
mzlib/class
|
|
framework
|
|
"snip-lib.rkt")
|
|
|
|
(provide program-editor-mixin
|
|
program-editor%)
|
|
|
|
(define (program-editor-mixin %)
|
|
(class %
|
|
(inherit get-admin begin-edit-sequence end-edit-sequence)
|
|
(define (get-frame)
|
|
;; gets the top most editor in the tree of snips and editors
|
|
(define (editor-root ed)
|
|
(let ([parent (editor-parent ed)])
|
|
(cond
|
|
[(is-a? parent area<%>) parent]
|
|
[(is-a? parent snip%)
|
|
(editor-root (snip-parent parent))]
|
|
[else false])))
|
|
|
|
;; gets the canvas or snip that the pasteboard is displayed in
|
|
;; status: what if there is more than one canvas?
|
|
(define (editor-parent ed)
|
|
(let ([admin (send ed get-admin)])
|
|
(cond
|
|
[(is-a? admin editor-snip-editor-admin<%>)
|
|
(send admin get-snip)]
|
|
[(is-a? admin editor-admin%)
|
|
(send ed get-canvas)]
|
|
[else false])))
|
|
|
|
(let ([er (editor-root this)])
|
|
(if er
|
|
(send er get-top-level-window)
|
|
false)))
|
|
|
|
(define (alert-of-modify)
|
|
(let ([frame (get-frame)])
|
|
(when frame
|
|
(send (send frame get-interactions-text) reset-highlighting)
|
|
(send* (send frame get-definitions-text)
|
|
(set-modified true)))))
|
|
|
|
;(define/override (on-insert start len)
|
|
; (begin-edit-sequence)
|
|
; (super on-insert start len)
|
|
; (end-edit-sequence))
|
|
|
|
(define/augment (after-insert start len)
|
|
(alert-of-modify)
|
|
;(begin-edit-sequence)
|
|
#;(super after-insert start len)
|
|
;(end-edit-sequence)
|
|
)
|
|
(define/augment (after-delete start len)
|
|
(alert-of-modify)
|
|
#;(super after-delete start len))
|
|
(super-new)))
|
|
|
|
(define program-editor%
|
|
(program-editor-mixin color:text%))
|
|
)
|