ft-read-only-text.rkt
(module ft-read-only-text frtime
  (require racket/gui/base racket/class)
  
  (define ft-read-only-text%
    (class text%
      (init text (line-spacing 1.0) (tab-stops null) (auto-wrap #f))
      (inherit delete insert last-position hide-caret)
      (define text-e (changes text))
      (define programmatic-context? (make-parameter #f))
      (define/augment (can-insert? s l) (programmatic-context?))
      (define/augment (can-delete? s l) (programmatic-context?))
      (define/public set-text
        (lambda (t)
          (parameterize ([programmatic-context? #t])
            (delete 0 (last-position))
            (insert t 0))))
      (define text-action (==> text-e (lambda (x) (set-text x))))
      (super-new (line-spacing line-spacing)
                 (tab-stops tab-stops)
                 (auto-wrap auto-wrap))
      (hide-caret #t))
    )
  
  (provide ft-read-only-text%))