original commit: f91b745769e8b6ec4038d442604e2b392b03dfa3
This commit is contained in:
Matthew Flatt 2004-07-26 13:42:36 +00:00
parent 6fe78d3e5e
commit 0b2eb4a829
3 changed files with 159 additions and 135 deletions

View File

@ -4,7 +4,8 @@
(module edit mzscheme (module edit mzscheme
(require (lib "class.ss") (require (lib "class.ss")
(lib "mred.ss" "mred")) (lib "mred.ss" "mred")
(lib "etc.ss"))
(provide new-text-frame (provide new-text-frame
new-pasteboard-frame new-pasteboard-frame
@ -13,143 +14,144 @@
(define (new-text-frame file) (new-frame text% file)) (define (new-text-frame file) (new-frame text% file))
(define (new-pasteboard-frame file) (new-frame pasteboard% file)) (define (new-pasteboard-frame file) (new-frame pasteboard% file))
(define (new-frame editor% file) (define new-frame
(define f (make-object (class frame% (opt-lambda (editor% file [editor-canvas% editor-canvas%])
(inherit modified) (define f (make-object (class frame%
(define/override (can-close?) (inherit modified)
(and (super can-close?) (define/augment (can-close?)
(or (not (modified)) (and (or (not (modified))
(let ([r (message-box/custom (let ([r (message-box/custom
"Editor Modified" "Editor Modified"
"The editor has been modified. Really close it?" "The editor has been modified. Really close it?"
"Close" "Close"
"Cancel" "Cancel"
"Save and Close" "Save and Close"
this this
'(default=2 disallow-close))]) '(default=2 disallow-close))])
(or (and (= r 3) (or (and (= r 3)
(send e save-file)) (send e save-file))
(= r 1)))))) (= r 1))))
(super-new)) (inner #t can-close?)))
"MrEdIt" #f 620 450)) (super-new))
(define c (make-object editor-canvas% f)) "MrEdIt" #f 620 450))
(define e (make-object (class editor% (define c (make-object editor-canvas% f))
(define/override (set-modified mod?) (define e (make-object (class editor%
(send f modified mod?) (define/override (set-modified mod?)
(super set-modified mod?)) (send f modified mod?)
(super-new)))) (super set-modified mod?))
(define mb (make-object menu-bar% f)) (super-new))))
(define mb (make-object menu-bar% f))
(define file-menu (make-object menu% "File" mb)) (define file-menu (make-object menu% "File" mb))
(define edit-menu (make-object menu% "Edit" mb)) (define edit-menu (make-object menu% "Edit" mb))
(define font-menu (make-object menu% "Font" mb)) (define font-menu (make-object menu% "Font" mb))
(define para-menu (make-object menu% "Paragraph" mb)) (define para-menu (make-object menu% "Paragraph" mb))
(make-object menu-item% "New Text Frame" file-menu (make-object menu-item% "New Text Frame" file-menu
(lambda (item event)
(new-text-frame #f))
#\N)
(make-object menu-item% "New Pasteboard Frame" file-menu
(lambda (item event)
(new-pasteboard-frame #f)))
(make-object menu-item% "Open..." file-menu
(lambda (item event)
(send e load-file ""))
#\O)
(make-object menu-item% "Save As..." file-menu
(lambda (item event)
(send e save-file ""))
#\S)
(when (eq? editor% text%)
(make-object menu-item% "Save As Text..." file-menu
(lambda (item event) (lambda (item event)
(send e save-file "" 'text)))) (new-text-frame #f))
(make-object separator-menu-item% file-menu) #\N)
(make-object menu-item% "Print..." file-menu (make-object menu-item% "New Pasteboard Frame" file-menu
(lambda (item event) (lambda (item event)
(send e print)) (new-pasteboard-frame #f)))
#\P)
(make-object separator-menu-item% file-menu)
(make-object menu-item% "Close" file-menu
(lambda (item event)
(when (send f can-close?)
(send f on-close)
(send f show #f)))
#\Q)
(append-editor-operation-menu-items edit-menu #f) (make-object menu-item% "Open..." file-menu
(when (eq? editor% text%) (lambda (item event)
(make-object separator-menu-item% edit-menu) (send e load-file ""))
(make-object checkable-menu-item% "Wrap Lines" edit-menu #\O)
(make-object menu-item% "Save As..." file-menu
(lambda (item event)
(send e save-file ""))
#\S)
(when (eq? editor% text%)
(make-object menu-item% "Save As Text..." file-menu
(lambda (item event)
(send e save-file "" 'text))))
(make-object separator-menu-item% file-menu)
(make-object menu-item% "Print..." file-menu
(lambda (item event) (lambda (item event)
(send e auto-wrap (send item is-checked?))))) (send e print))
#\P)
(make-object separator-menu-item% file-menu)
(make-object menu-item% "Close" file-menu
(lambda (item event)
(when (send f can-close?)
(send f on-close)
(send f show #f)))
#\Q)
(append-editor-font-menu-items font-menu) (append-editor-operation-menu-items edit-menu #f)
(let ([m (make-object menu% "Smoothing" font-menu)]) (when (eq? editor% text%)
(let ([mk (lambda (name v) (make-object separator-menu-item% edit-menu)
(make-object menu-item% name m (make-object checkable-menu-item% "Wrap Lines" edit-menu
(lambda (i e) (lambda (item event)
(let* ([o (send f get-edit-target-object)]) (send e auto-wrap (send item is-checked?)))))
(and o
(o . is-a? . editor<%>)
(send o change-style
(make-object style-delta% 'change-smoothing v)))))))])
(mk "Default" 'default)
(mk "Partly Smoothed" 'partly-smoothed)
(mk "Smoothed" 'smoothed)
(mk "Not Smoothed" 'unsmoothed)))
(make-object menu-item% "Set Margins..." para-menu (append-editor-font-menu-items font-menu)
(lambda (i ev) (let ([m (make-object menu% "Smoothing" font-menu)])
(let* ([d (make-object dialog% "Margins" f)] (let ([mk (lambda (name v)
[mk-txt (lambda (label) (make-object (make-object menu-item% name m
text-field% (lambda (i e)
label (let* ([o (send f get-edit-target-object)])
d (and o
void (o . is-a? . editor<%>)
"0.0"))] (send o change-style
[first-left (mk-txt "First Left")] (make-object style-delta% 'change-smoothing v)))))))])
[rest-left (mk-txt "Rest Left")] (mk "Default" 'default)
[right (mk-txt "Right")] (mk "Partly Smoothed" 'partly-smoothed)
[button-panel (new horizontal-pane% (mk "Smoothed" 'smoothed)
[parent d] (mk "Not Smoothed" 'unsmoothed)))
[alignment '(right center)])]
[ok (make-object button% "Ok" button-panel
(lambda (b ev)
(let* ([get (lambda (field)
(let ([n (string->number (send field get-value))])
(and n (real? n) (not (negative? n)) n)))]
[first-left (get first-left)]
[rest-left (get rest-left)]
[right (get right)])
(if (and first-left
rest-left
right)
(let ([start (send e position-paragraph
(send e get-start-position))]
[end (send e position-paragraph
(send e get-end-position))])
(let loop ([i start])
(unless (i . > . end)
(send e set-paragraph-margins
i first-left rest-left right)
(loop (add1 i)))
(send d show #f)))
(bell))))
'(border))]
[cancel (make-object button% "Cancel" button-panel
(lambda (b e)
(send d show #f)))])
(send d show #t))))
((current-text-keymap-initializer) (send e get-keymap)) (make-object menu-item% "Set Margins..." para-menu
(send c set-editor e) (lambda (i ev)
(let* ([d (make-object dialog% "Margins" f)]
[mk-txt (lambda (label) (make-object
text-field%
label
d
void
"0.0"))]
[first-left (mk-txt "First Left")]
[rest-left (mk-txt "Rest Left")]
[right (mk-txt "Right")]
[button-panel (new horizontal-pane%
[parent d]
[alignment '(right center)])]
[ok (make-object button% "Ok" button-panel
(lambda (b ev)
(let* ([get (lambda (field)
(let ([n (string->number (send field get-value))])
(and n (real? n) (not (negative? n)) n)))]
[first-left (get first-left)]
[rest-left (get rest-left)]
[right (get right)])
(if (and first-left
rest-left
right)
(let ([start (send e position-paragraph
(send e get-start-position))]
[end (send e position-paragraph
(send e get-end-position))])
(let loop ([i start])
(unless (i . > . end)
(send e set-paragraph-margins
i first-left rest-left right)
(loop (add1 i)))
(send d show #f)))
(bell))))
'(border))]
[cancel (make-object button% "Cancel" button-panel
(lambda (b e)
(send d show #f)))])
(send d show #t))))
(when file ((current-text-keymap-initializer) (send e get-keymap))
(if (regexp-match "[.](gif|bmp|jpe?g|xbm|xpm|png)$" file) (send c set-editor e)
(send e insert (make-object image-snip% file))
(send e load-file file))) (when file
(if (regexp-match "[.](gif|bmp|jpe?g|xbm|xpm|png)$" file)
(send f show #t) (send e insert (make-object image-snip% file))
f)) (send e load-file file)))
(send f show #t)
f)))

View File

@ -4831,7 +4831,8 @@
(interface (subwindow<%>) (interface (subwindow<%>)
min-client-width min-client-height min-client-width min-client-height
on-char on-event on-paint on-scroll on-tab-in on-char on-event on-paint on-scroll on-tab-in
warp-pointer get-dc)) warp-pointer get-dc
set-canvas-background get-canvas-background))
(define-keywords canvas%-keywords (define-keywords canvas%-keywords
window%-keywords window%-keywords
@ -4852,7 +4853,24 @@
[warp-pointer (entry-point (lambda (x y) (send wx warp-pointer x y)))] [warp-pointer (entry-point (lambda (x y) (send wx warp-pointer x y)))]
[get-dc (entry-point (lambda () (send wx get-dc)))]) [get-dc (entry-point (lambda () (send wx get-dc)))]
[set-canvas-background
(entry-point
(lambda (c)
(unless (c . is-a? . wx:color%)
(raise-type-error (who->name '(method canvas<%> set-canvas-background))
"color% object"
c))
(unless (send wx get-canvas-background)
(raise-mismatch-error (who->name '(method canvas<%> set-canvas-background))
"cannot set a transparent canvas's background color: "
c))
(send wx set-canvas-background c)))]
[get-canvas-background
(entry-point
(lambda ()
(send wx get-canvas-background)))])
(private-field (private-field
[wx #f]) [wx #f])
(sequence (sequence
@ -4977,7 +4995,7 @@
(let ([cwho '(constructor editor-canvas)]) (let ([cwho '(constructor editor-canvas)])
(check-container-parent cwho parent) (check-container-parent cwho parent)
(check-instance cwho internal-editor<%> "text% or pasteboard%" #t editor) (check-instance cwho internal-editor<%> "text% or pasteboard%" #t editor)
(check-style cwho #f '(hide-vscroll hide-hscroll no-vscroll no-hscroll deleted control-border) style) (check-style cwho #f '(hide-vscroll hide-hscroll no-vscroll no-hscroll deleted control-border transparent) style)
(check-gauge-integer cwho scrolls-per-page) (check-gauge-integer cwho scrolls-per-page)
(check-label-string/false cwho label) (check-label-string/false cwho label)
(unless (eq? wheel-step no-val) (unless (eq? wheel-step no-val)

View File

@ -342,6 +342,8 @@
on-size on-size
on-set-focus on-set-focus
on-kill-focus on-kill-focus
get-canvas-background
set-canvas-background
set-background-to-gray set-background-to-gray
on-scroll on-scroll
set-scroll-page set-scroll-page
@ -647,6 +649,8 @@
on-kill-focus on-kill-focus
popup-for-editor popup-for-editor
call-as-primary-owner call-as-primary-owner
get-canvas-background
set-canvas-background
set-y-margin set-y-margin
set-x-margin set-x-margin
get-y-margin get-y-margin