original commit: b61ae9eddf4666edefac36632de7fa82e87016c5
This commit is contained in:
Robby Findler 2001-09-25 13:17:46 +00:00
parent 769a63d8fb
commit f6f2dfa9d4
2 changed files with 406 additions and 407 deletions

View File

@ -990,8 +990,7 @@
;; the "roller ball" mice map clicking the ball to button 2. ;; the "roller ball" mice map clicking the ball to button 2.
(unless (eq? (system-type) 'windows) (unless (eq? (system-type) 'windows)
(map "middlebutton" "paste-click-region")) (map "middlebutton" "paste-click-region"))
(map ":rightbuttonseq" "mouse-popup-menu"))))) (map ":rightbuttonseq" "mouse-popup-menu")))))
(define setup-search (define setup-search

View File

@ -10,421 +10,421 @@
(lib "list.ss") (lib "list.ss")
(lib "etc.ss")) (lib "etc.ss"))
(provide text@) (provide text@)
(define text@ (define text@
(unit/sig framework:text^ (unit/sig framework:text^
(import mred^ (import mred^
[icon : framework:icon^] [icon : framework:icon^]
[editor : framework:editor^] [editor : framework:editor^]
[preferences : framework:preferences^] [preferences : framework:preferences^]
[keymap : framework:keymap^] [keymap : framework:keymap^]
[gui-utils : framework:gui-utils^] [gui-utils : framework:gui-utils^]
[color-model : framework:color-model^] [color-model : framework:color-model^]
[frame : framework:frame^]) [frame : framework:frame^])
(rename [-keymap% keymap%]) (rename [-keymap% keymap%])
(define-struct range (start end b/w-bitmap color caret-space?)) (define-struct range (start end b/w-bitmap color caret-space?))
(define-struct rectangle (left top right bottom b/w-bitmap color)) (define-struct rectangle (left top right bottom b/w-bitmap color))
;; wx: `default-wrapping?', add as the initial value for auto-wrap bitmap, ;; wx: `default-wrapping?', add as the initial value for auto-wrap bitmap,
;; unless matthew makes it primitive ;; unless matthew makes it primitive
(define basic<%> (define basic<%>
(interface (editor:basic<%> (class->interface text%)) (interface (editor:basic<%> (class->interface text%))
highlight-range highlight-range
get-styles-fixed get-styles-fixed
set-styles-fixed set-styles-fixed
move/copy-to-edit move/copy-to-edit
initial-autowrap-bitmap)) initial-autowrap-bitmap))
(define highlight-pen (make-object pen% "BLACK" 0 'solid)) (define highlight-pen (make-object pen% "BLACK" 0 'solid))
(define highlight-brush (make-object brush% "black" 'solid)) (define highlight-brush (make-object brush% "black" 'solid))
(define basic-mixin (define basic-mixin
(mixin (editor:basic<%> (class->interface text%)) (basic<%>) (mixin (editor:basic<%> (class->interface text%)) (basic<%>)
(inherit get-canvases get-admin split-snip get-snip-position (inherit get-canvases get-admin split-snip get-snip-position
begin-edit-sequence end-edit-sequence begin-edit-sequence end-edit-sequence
set-autowrap-bitmap set-autowrap-bitmap
delete find-snip invalidate-bitmap-cache delete find-snip invalidate-bitmap-cache
set-file-format get-file-format set-file-format get-file-format
get-style-list is-modified? change-style set-modified get-style-list is-modified? change-style set-modified
position-location get-extent) position-location get-extent)
(define range-rectangles null) (define range-rectangles null)
(define ranges null) (define ranges null)
(define (invalidate-rectangles rectangles) (define (invalidate-rectangles rectangles)
(let ([b1 (box 0)] (let ([b1 (box 0)]
[b2 (box 0)] [b2 (box 0)]
[b3 (box 0)] [b3 (box 0)]
[b4 (box 0)]) [b4 (box 0)])
(let-values ([(min-left max-right) (let-values ([(min-left max-right)
(let loop ([left #f] (let loop ([left #f]
[right #f] [right #f]
[canvases (get-canvases)]) [canvases (get-canvases)])
(cond
[(null? canvases)
(values left right)]
[else
(let-values ([(this-left this-right)
(send (car canvases)
call-as-primary-owner
(lambda ()
(send (get-admin) get-view b1 b2 b3 b4)
(let* ([this-left (unbox b1)]
[this-width (unbox b3)]
[this-right (+ this-left this-width)])
(values this-left
this-right))))])
(if (and left right)
(loop (min this-left left)
(max this-right right)
(cdr canvases))
(loop this-left
this-right
(cdr canvases))))]))])
(when (and min-left max-right)
(let loop ([left #f]
[top #f]
[right #f]
[bottom #f]
[rectangles rectangles])
(cond
[(null? rectangles)
(when left
(let ([width (- right left)]
[height (- bottom top)])
(when (and (> width 0)
(> height 0))
(invalidate-bitmap-cache left top width height))))]
[else (let* ([r (car rectangles)]
[rleft (rectangle-left r)]
[rright (rectangle-right r)]
[rtop (rectangle-top r)]
[rbottom (rectangle-bottom r)]
[this-left (if (number? rleft)
rleft
min-left)]
[this-right (if (number? rright)
rright
max-right)]
[this-bottom rbottom]
[this-top rtop])
(if (and left top right bottom)
(loop (min this-left left)
(min this-top top)
(max this-right right)
(max this-bottom bottom)
(cdr rectangles))
(loop this-left
this-top
this-right
this-bottom
(cdr rectangles))))]))))))
(define (recompute-range-rectangles)
(let* ([b1 (box 0)]
[b2 (box 0)]
[new-rectangles
(lambda (range)
(let* ([start (range-start range)]
[end (range-end range)]
[b/w-bitmap (range-b/w-bitmap range)]
[color (range-color range)]
[caret-space? (range-caret-space? range)]
[start-eol? #f]
[end-eol? (if (= start end)
start-eol?
#t)])
(let-values ([(start-x top-start-y)
(begin
(position-location start b1 b2 #t start-eol? #t)
(values (if caret-space?
(+ 1 (unbox b1))
(unbox b1))
(unbox b2)))]
[(end-x top-end-y)
(begin (position-location end b1 b2 #t end-eol? #t)
(values (unbox b1) (unbox b2)))]
[(bottom-start-y)
(begin (position-location start b1 b2 #f start-eol? #t)
(unbox b2))]
[(bottom-end-y)
(begin (position-location end b1 b2 #f end-eol? #t)
(unbox b2))])
(cond (cond
[(null? canvases) [(= top-start-y top-end-y)
(values left right)] (list
(make-rectangle start-x
top-start-y
(if (= end-x start-x)
(+ end-x 1)
end-x)
bottom-start-y
b/w-bitmap
color))]
[else [else
(let-values ([(this-left this-right) (list
(send (car canvases) (make-rectangle start-x
call-as-primary-owner top-start-y
(lambda () 'right-edge
(send (get-admin) get-view b1 b2 b3 b4) bottom-start-y
(let* ([this-left (unbox b1)] b/w-bitmap
[this-width (unbox b3)] color)
[this-right (+ this-left this-width)]) (make-rectangle 'left-edge
(values this-left bottom-start-y
this-right))))]) 'max-width
(if (and left right) top-end-y
(loop (min this-left left) b/w-bitmap
(max this-right right) color)
(cdr canvases)) (make-rectangle 'left-edge
(loop this-left top-end-y
this-right end-x
(cdr canvases))))]))]) bottom-end-y
(when (and min-left max-right) b/w-bitmap
(let loop ([left #f] color))]))))]
[top #f] [old-rectangles range-rectangles])
[right #f]
[bottom #f] (set! range-rectangles
[rectangles rectangles]) (foldl (lambda (x l) (append (new-rectangles x) l))
(cond null ranges))))
[(null? rectangles)
(when left (public highlight-range)
(let ([width (- right left)] (define highlight-range
[height (- bottom top)]) (opt-lambda (start end color bitmap [caret-space? #f] [priority 'low])
(when (and (> width 0) (unless (let ([exact-pos-int?
(> height 0)) (lambda (x) (and (integer? x) (exact? x) (x . >= . 0)))])
(invalidate-bitmap-cache left top width height))))] (and (exact-pos-int? start)
[else (let* ([r (car rectangles)] (exact-pos-int? end)))
(error 'highlight-range "expected first two arguments to be non-negative exact integers, got: ~e ~e"
[rleft (rectangle-left r)] start end))
[rright (rectangle-right r)] (unless (or (eq? priority 'high) (eq? priority 'low))
[rtop (rectangle-top r)] (error 'highlight-range "expected last argument to be either 'high or 'low, got: ~e"
[rbottom (rectangle-bottom r)] priority))
(let ([l (make-range start end bitmap color caret-space?)])
[this-left (if (number? rleft) (invalidate-rectangles range-rectangles)
rleft (set! ranges (if (eq? priority 'high) (cons l ranges) (append ranges (list l))))
min-left)] (recompute-range-rectangles)
[this-right (if (number? rright) (invalidate-rectangles range-rectangles)
rright (lambda ()
max-right)] (let ([old-rectangles range-rectangles])
[this-bottom rbottom] (set! ranges
[this-top rtop]) (let loop ([r ranges])
(if (and left top right bottom) (cond
(loop (min this-left left) [(null? r) r]
(min this-top top) [else (if (eq? (car r) l)
(max this-right right) (cdr r)
(max this-bottom bottom) (cons (car r) (loop (cdr r))))])))
(cdr rectangles)) (recompute-range-rectangles)
(loop this-left (invalidate-rectangles old-rectangles))))))
this-top (rename [super-on-paint on-paint])
this-right (override on-paint)
this-bottom (define (on-paint before dc left-margin top-margin right-margin bottom-margin dx dy draw-caret)
(cdr rectangles))))])))))) (super-on-paint before dc left-margin top-margin right-margin bottom-margin dx dy draw-caret)
(define (recompute-range-rectangles)
(let* ([b1 (box 0)]
[b2 (box 0)]
[new-rectangles
(lambda (range)
(let* ([start (range-start range)]
[end (range-end range)]
[b/w-bitmap (range-b/w-bitmap range)]
[color (range-color range)]
[caret-space? (range-caret-space? range)]
[start-eol? #f]
[end-eol? (if (= start end)
start-eol?
#t)])
(let-values ([(start-x top-start-y)
(begin
(position-location start b1 b2 #t start-eol? #t)
(values (if caret-space?
(+ 1 (unbox b1))
(unbox b1))
(unbox b2)))]
[(end-x top-end-y)
(begin (position-location end b1 b2 #t end-eol? #t)
(values (unbox b1) (unbox b2)))]
[(bottom-start-y)
(begin (position-location start b1 b2 #f start-eol? #t)
(unbox b2))]
[(bottom-end-y)
(begin (position-location end b1 b2 #f end-eol? #t)
(unbox b2))])
(cond
[(= top-start-y top-end-y)
(list
(make-rectangle start-x
top-start-y
(if (= end-x start-x)
(+ end-x 1)
end-x)
bottom-start-y
b/w-bitmap
color))]
[else
(list
(make-rectangle start-x
top-start-y
'right-edge
bottom-start-y
b/w-bitmap
color)
(make-rectangle 'left-edge
bottom-start-y
'max-width
top-end-y
b/w-bitmap
color)
(make-rectangle 'left-edge
top-end-y
end-x
bottom-end-y
b/w-bitmap
color))]))))]
[old-rectangles range-rectangles])
(set! range-rectangles
(foldl (lambda (x l) (append (new-rectangles x) l))
null ranges))))
(public highlight-range)
(define highlight-range
(opt-lambda (start end color bitmap [caret-space? #f] [priority 'low])
(unless (let ([exact-pos-int?
(lambda (x) (and (integer? x) (exact? x) (x . >= . 0)))])
(and (exact-pos-int? start)
(exact-pos-int? end)))
(error 'highlight-range "expected first two arguments to be non-negative exact integers, got: ~e ~e"
start end))
(unless (or (eq? priority 'high) (eq? priority 'low))
(error 'highlight-range "expected last argument to be either 'high or 'low, got: ~e"
priority))
(let ([l (make-range start end bitmap color caret-space?)])
(invalidate-rectangles range-rectangles)
(set! ranges (if (eq? priority 'high) (cons l ranges) (append ranges (list l))))
(recompute-range-rectangles) (recompute-range-rectangles)
(invalidate-rectangles range-rectangles) (let ([b1 (box 0)]
(lambda () [b2 (box 0)]
(let ([old-rectangles range-rectangles]) [b3 (box 0)]
(set! ranges [b4 (box 0)])
(let loop ([r ranges]) (for-each
(cond (lambda (rectangle)
[(null? r) r] (let-values ([(view-x view-y view-width view-height)
[else (if (eq? (car r) l) (begin
(cdr r) (send (get-admin) get-view b1 b2 b3 b4)
(cons (car r) (loop (cdr r))))]))) (values (unbox b1)
(recompute-range-rectangles) (unbox b2)
(invalidate-rectangles old-rectangles)))))) (unbox b3)
(rename [super-on-paint on-paint]) (unbox b4)))])
(override on-paint) (let* ([old-pen (send dc get-pen)]
(define (on-paint before dc left-margin top-margin right-margin bottom-margin dx dy draw-caret) [old-brush (send dc get-brush)]
(super-on-paint before dc left-margin top-margin right-margin bottom-margin dx dy draw-caret) [b/w-bitmap (rectangle-b/w-bitmap rectangle)]
(recompute-range-rectangles) [color (let* ([rc (rectangle-color rectangle)]
(let ([b1 (box 0)] [tmpc (make-object color% 0 0 0)])
[b2 (box 0)] (if rc
[b3 (box 0)] (begin (send dc try-color rc tmpc)
[b4 (box 0)]) (if (<= (color-model:rgb-color-distance
(for-each (send rc red)
(lambda (rectangle) (send rc green)
(let-values ([(view-x view-y view-width view-height) (send rc blue)
(begin (send tmpc red)
(send (get-admin) get-view b1 b2 b3 b4) (send tmpc green)
(values (unbox b1) (send tmpc blue))
(unbox b2) 18)
(unbox b3) rc
(unbox b4)))]) #f))
(let* ([old-pen (send dc get-pen)] rc))]
[old-brush (send dc get-brush)] [first-number (lambda (x y) (if (number? x) x y))]
[b/w-bitmap (rectangle-b/w-bitmap rectangle)] [left (max left-margin (first-number (rectangle-left rectangle) view-x))]
[color (let* ([rc (rectangle-color rectangle)] [top (max top-margin (rectangle-top rectangle))]
[tmpc (make-object color% 0 0 0)]) [right (min right-margin
(if rc (if (number? (rectangle-right rectangle))
(begin (send dc try-color rc tmpc) (rectangle-right rectangle)
(if (<= (color-model:rgb-color-distance (+ view-x view-width)))]
(send rc red) [bottom (min bottom-margin (rectangle-bottom rectangle))]
(send rc green) [width (max 0 (- right left))]
(send rc blue) [height (max 0 (- bottom top))])
(send tmpc red) (let/ec k
(send tmpc green) (cond
(send tmpc blue)) [(and before color)
18) (send highlight-pen set-color color)
rc (send highlight-brush set-color color)]
#f)) [(and (not before) (not color) b/w-bitmap)
rc))] (send highlight-pen set-stipple b/w-bitmap)
[first-number (lambda (x y) (if (number? x) x y))] (send highlight-brush set-stipple b/w-bitmap)]
[left (max left-margin (first-number (rectangle-left rectangle) view-x))] [else (k (void))])
[top (max top-margin (rectangle-top rectangle))] (send dc set-pen highlight-pen)
[right (min right-margin (send dc set-brush highlight-brush)
(if (number? (rectangle-right rectangle)) (send dc draw-rectangle (+ left dx) (+ top dy) width height)
(rectangle-right rectangle) (send dc set-pen old-pen)
(+ view-x view-width)))] (send dc set-brush old-brush)))))
[bottom (min bottom-margin (rectangle-bottom rectangle))] range-rectangles)))
[width (max 0 (- right left))]
[height (max 0 (- bottom top))]) (define styles-fixed? #f)
(let/ec k (define styles-fixed-edit-modified? #f)
(cond (public get-styles-fixed set-styles-fixed)
[(and before color) (define (get-styles-fixed) styles-fixed?)
(send highlight-pen set-color color) (define (set-styles-fixed b) (set! styles-fixed? b))
(send highlight-brush set-color color)]
[(and (not before) (not color) b/w-bitmap) (rename
(send highlight-pen set-stipple b/w-bitmap) [super-on-change-style on-change-style]
(send highlight-brush set-stipple b/w-bitmap)] [super-after-change-style after-change-style]
[else (k (void))]) [super-on-insert on-insert]
(send dc set-pen highlight-pen) [super-after-insert after-insert])
(send dc set-brush highlight-brush) (override on-change-style on-insert after-insert after-change-style)
(send dc draw-rectangle (+ left dx) (+ top dy) width height) (define (on-change-style start len)
(send dc set-pen old-pen) (when styles-fixed?
(send dc set-brush old-brush))))) (set! styles-fixed-edit-modified? (is-modified?)))
range-rectangles))) (super-on-change-style start len))
(define (on-insert start len)
(begin-edit-sequence)
(super-on-insert start len))
(define (after-insert start len)
(when styles-fixed?
(change-style (send (get-style-list) find-named-style "Standard")
start
(+ start len)))
(super-after-insert start len)
(end-edit-sequence))
(define (after-change-style start len)
(super-after-change-style start len)
(when styles-fixed?
(set-modified styles-fixed-edit-modified?)))
(public move/copy-to-edit)
(define (move/copy-to-edit dest-edit start end dest-position)
(split-snip start)
(split-snip end)
(let loop ([snip (find-snip end 'before)])
(cond
[(or (not snip) (< (get-snip-position snip) start))
(void)]
[else
(let ([prev (send snip previous)]
[released/copied (if (send snip release-from-owner)
snip
(let* ([copy (send snip copy)]
[snip-start (get-snip-position snip)]
[snip-end (+ snip-start (send snip get-count))])
(delete snip-start snip-end)
snip))])
(send dest-edit insert released/copied dest-position dest-position)
(loop prev))])))
(public initial-autowrap-bitmap)
(define (initial-autowrap-bitmap) (icon:get-autowrap-bitmap))
(super-instantiate ())
(set-autowrap-bitmap (initial-autowrap-bitmap))))
(define styles-fixed? #f) (define hide-caret/selection<%> (interface (basic<%>)))
(define styles-fixed-edit-modified? #f) (define hide-caret/selection-mixin
(public get-styles-fixed set-styles-fixed) (mixin (basic<%>) (hide-caret/selection<%>)
(define (get-styles-fixed) styles-fixed?) (override after-set-position)
(define (set-styles-fixed b) (set! styles-fixed? b)) (inherit get-start-position get-end-position hide-caret)
(define (after-set-position)
(hide-caret (= (get-start-position) (get-end-position))))
(super-instantiate ())))
(rename (define searching<%> (interface (editor:keymap<%> basic<%>)))
[super-on-change-style on-change-style] (define searching-mixin
[super-after-change-style after-change-style] (mixin (editor:keymap<%> basic<%>) (searching<%>)
[super-on-insert on-insert] (rename [super-get-keymaps get-keymaps])
[super-after-insert after-insert]) (override get-keymaps)
(override on-change-style on-insert after-insert after-change-style) (define (get-keymaps)
(define (on-change-style start len) (cons (keymap:get-search) (super-get-keymaps)))
(when styles-fixed? (super-instantiate ())))
(set! styles-fixed-edit-modified? (is-modified?)))
(super-on-change-style start len))
(define (on-insert start len)
(begin-edit-sequence)
(super-on-insert start len))
(define (after-insert start len)
(when styles-fixed?
(change-style (send (get-style-list) find-named-style "Standard")
start
(+ start len)))
(super-after-insert start len)
(end-edit-sequence))
(define (after-change-style start len)
(super-after-change-style start len)
(when styles-fixed?
(set-modified styles-fixed-edit-modified?)))
(public move/copy-to-edit) (define return<%> (interface ((class->interface text%))))
(define (move/copy-to-edit dest-edit start end dest-position) (define return-mixin
(split-snip start) (mixin ((class->interface text%)) (return<%>)
(split-snip end) (init-field return)
(let loop ([snip (find-snip end 'before)]) (rename [super-on-local-char on-local-char])
(cond (override on-local-char)
[(or (not snip) (< (get-snip-position snip) start)) (define (on-local-char key)
(void)] (let ([cr-code #\return]
[else [lf-code #\newline]
(let ([prev (send snip previous)] [code (send key get-key-code)])
[released/copied (if (send snip release-from-owner) (or (and (char? code)
snip (or (char=? lf-code code)
(let* ([copy (send snip copy)] (char=? cr-code code))
[snip-start (get-snip-position snip)] (return))
[snip-end (+ snip-start (send snip get-count))]) (super-on-local-char key))))
(delete snip-start snip-end) (super-instantiate ())))
snip))])
(send dest-edit insert released/copied dest-position dest-position)
(loop prev))])))
(public initial-autowrap-bitmap) (define info<%> (interface (basic<%>)))
(define (initial-autowrap-bitmap) (icon:get-autowrap-bitmap))
(super-instantiate ()) (define info-mixin
(set-autowrap-bitmap (initial-autowrap-bitmap)))) (mixin (editor:keymap<%> basic<%>) (info<%>)
(inherit get-start-position get-end-position get-canvas
run-after-edit-sequence)
(rename [super-after-set-position after-set-position]
[super-after-edit-sequence after-edit-sequence]
[super-on-edit-sequence on-edit-sequence]
[super-after-insert after-insert]
[super-after-delete after-delete]
[super-set-overwrite-mode set-overwrite-mode]
[super-set-anchor set-anchor])
(define (enqueue-for-frame call-method tag)
(run-after-edit-sequence
(rec from-enqueue-for-frame
(lambda ()
(let ([canvas (get-canvas)])
(when canvas
(let ([frame (send canvas get-top-level-window)])
(when (is-a? frame frame:text-info<%>)
(call-method frame)))))))
tag))
(override set-anchor set-overwrite-mode after-set-position after-insert after-delete)
(define (set-anchor x)
(super-set-anchor x)
(enqueue-for-frame
(lambda (x) (send x anchor-status-changed))
'framework:anchor-status-changed))
(define (set-overwrite-mode x)
(super-set-overwrite-mode x)
(enqueue-for-frame
(lambda (x) (send x overwrite-status-changed))
'framework:overwrite-status-changed))
(define (after-set-position)
(super-after-set-position)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(define (after-insert start len)
(super-after-insert start len)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(define (after-delete start len)
(super-after-delete start len)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(super-instantiate ())))
(define hide-caret/selection<%> (interface (basic<%>)))
(define hide-caret/selection-mixin
(mixin (basic<%>) (hide-caret/selection<%>)
(override after-set-position)
(inherit get-start-position get-end-position hide-caret)
(define (after-set-position)
(hide-caret (= (get-start-position) (get-end-position))))
(super-instantiate ())))
(define searching<%> (interface (editor:keymap<%> basic<%>)))
(define searching-mixin
(mixin (editor:keymap<%> basic<%>) (searching<%>)
(rename [super-get-keymaps get-keymaps])
(override get-keymaps)
(define (get-keymaps)
(cons (keymap:get-search) (super-get-keymaps)))
(super-instantiate ())))
(define return<%> (interface ((class->interface text%))))
(define return-mixin
(mixin ((class->interface text%)) (return<%>)
(init-field return)
(rename [super-on-local-char on-local-char])
(override on-local-char)
(define (on-local-char key)
(let ([cr-code #\return]
[lf-code #\newline]
[code (send key get-key-code)])
(or (and (char? code)
(or (char=? lf-code code)
(char=? cr-code code))
(return))
(super-on-local-char key))))
(super-instantiate ())))
(define info<%> (interface (basic<%>)))
(define info-mixin
(mixin (editor:keymap<%> basic<%>) (info<%>)
(inherit get-start-position get-end-position get-canvas
run-after-edit-sequence)
(rename [super-after-set-position after-set-position]
[super-after-edit-sequence after-edit-sequence]
[super-on-edit-sequence on-edit-sequence]
[super-after-insert after-insert]
[super-after-delete after-delete]
[super-set-overwrite-mode set-overwrite-mode]
[super-set-anchor set-anchor])
(define (enqueue-for-frame call-method tag)
(run-after-edit-sequence
(rec from-enqueue-for-frame
(lambda ()
(let ([canvas (get-canvas)])
(when canvas
(let ([frame (send canvas get-top-level-window)])
(when (is-a? frame frame:text-info<%>)
(call-method frame)))))))
tag))
(override set-anchor set-overwrite-mode after-set-position after-insert after-delete)
(define (set-anchor x)
(super-set-anchor x)
(enqueue-for-frame
(lambda (x) (send x anchor-status-changed))
'framework:anchor-status-changed))
(define (set-overwrite-mode x)
(super-set-overwrite-mode x)
(enqueue-for-frame
(lambda (x) (send x overwrite-status-changed))
'framework:overwrite-status-changed))
(define (after-set-position)
(super-after-set-position)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(define (after-insert start len)
(super-after-insert start len)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(define (after-delete start len)
(super-after-delete start len)
(enqueue-for-frame
(lambda (x) (send x editor-position-changed))
'framework:editor-position-changed))
(super-instantiate ())))
(define clever-file-format<%> (interface ((class->interface text%)))) (define clever-file-format<%> (interface ((class->interface text%))))
(define clever-file-format-mixin (define clever-file-format-mixin