diff --git a/collects/framework/autosave.ss b/collects/framework/autosave.ss index 4f04997a..b32b8d92 100644 --- a/collects/framework/autosave.ss +++ b/collects/framework/autosave.ss @@ -1,5 +1,6 @@ (unit/sig framework:autosave^ - (import [exit : framework:exit^] + (import mred^ + [exit : framework:exit^] [preferences : framework:preferences^]) (define register @@ -11,7 +12,7 @@ (override [notify (lambda () - (when (preferences:get-preference 'framework:autosaving-on?) + (when (preferences:get 'framework:autosaving-on?) (set! objects (let loop ([list objects]) (if (null? list) diff --git a/collects/framework/editor.ss b/collects/framework/editor.ss index c737bf93..3c73ced7 100644 --- a/collects/framework/editor.ss +++ b/collects/framework/editor.ss @@ -1,5 +1,6 @@ (unit/sig framework:editor^ - (import [autosave : framework:autosave^] + (import mred^ + [autosave : framework:autosave^] [finder : framework:finder^] [path-utils : framework:path-utils^] [keymap : framework:keymap^] @@ -8,7 +9,7 @@ [gui-utils : framework:gui-utils^]) (define basic<%> - (interface () + (interface (editor<%>) editing-this-file? local-edit-sequence? run-after-edit-sequence @@ -17,7 +18,7 @@ default-auto-wrap?)) (define make-basic% - (mixin editor<%> basic<%> args + (mixin (editor<%>) (basic<%>) args (inherit modified? get-filename save-file canvases refresh-delayed? get-frame get-keymap @@ -127,8 +128,8 @@ (super-lock x))]) (public - [get-text-snip (lambda () (make-object media-snip% (make-object edit%)))] - [get-pasteboard-snip (lambda () (make-object media-snip% (make-object pasteboard%)))]) + [get-text-snip (lambda () (make-object editor-snip% (make-object text%)))] + [get-pasteboard-snip (lambda () (make-object editor-snip% (make-object pasteboard%)))]) (override [on-new-box (lambda (type) @@ -159,10 +160,12 @@ (inherit auto-wrap) (sequence (apply super-init args) - (auto-wrap default-auto-wrap)))) + (auto-wrap default-auto-wrap?)))) + + (define file<%> (interface (basic<%>))) (define make-file% - (mixin basic<%> basic<%> args + (mixin (basic<%>) (file<%>) args (inherit get-keymap find-snip get-filename lock get-style-list modified? change-style set-modified @@ -170,7 +173,7 @@ (rename [super-after-save-file after-save-file] [super-after-load-file after-load-file]) - (public [editing-this-file? #t]) + (override [editing-this-file? #t]) (private [check-lock (lambda () @@ -182,7 +185,7 @@ (file-or-directory-permissions filename))))]) (lock lock?)))]) - (public + (override [after-save-file (lambda (success) (when success @@ -193,20 +196,26 @@ (lambda (sucessful?) (when sucessful? (check-lock)) - (super-after-load-file sucessful?))] - [autowrap-bitmap (icon:get-autowrap-bitmap)]) + (super-after-load-file sucessful?))]) (sequence (apply super-init args) (let ([keymap (get-keymap)]) (keymap:set-keymap-error-handler keymap) (keymap:set-keymap-implied-shifts keymap) - (send keymap chain-to-keymap keymap:global-file-keymap #f))))) + (send keymap chain-to-keymap keymap:file #f))))) + (define backup-autosave<%> + (interface (basic<%>) + backup? + autosave? + do-autosave + remove-autosave)) + ; wx: when should autosave files be removed? ; also, what about checking the autosave files when a file is ; opened? (define make-backup-autosave% - (mixin basic<%> autosave<%> args + (mixin (basic<%>) (backup-autosave<%>) args (inherit modified? get-filename save-file) (rename [super-on-save-file on-save-file] [super-on-change on-change] @@ -218,6 +227,7 @@ [auto-save-out-of-date? #t] [auto-save-error? #f]) (public + [auto-save? #t] [backup? #t]) (override [on-save-file @@ -233,7 +243,7 @@ (set! freshen-backup? #f) (when (file-exists? back-name) (delete-file back-name))) - (with-handlers ([exn:i/o:filesystem:rename? void]) + (with-handlers ([(lambda (x) #t) void]) (copy-file name back-name)))) #t)))] [do-close @@ -245,7 +255,6 @@ (lambda () (super-on-change) (set! auto-save-out-of-date? #t))] - [auto-save? #t] [set-modified (lambda (modified?) (when auto-saved-name @@ -254,7 +263,9 @@ (begin (delete-file auto-saved-name) (set! auto-saved-name #f)))) - (super-set-modified modified?))] + (super-set-modified modified?))]) + (public + [autosave? #t] [do-autosave (lambda () (when (and auto-save? @@ -286,21 +297,68 @@ (set! auto-saved-name #f)))]) (sequence (apply super-init args) - (autosave:register-autosave this)))) - + (autosave:register this)))) + + (define info<%> (interface (basic<%>))) (define make-info% - (lambda (super-info-edit%) - (class-asi super-info-edit% - (inherit get-frame run-after-edit-sequence) - (rename [super-lock lock]) - (public - [lock - (lambda (x) - (super-lock x) - (run-after-edit-sequence - (rec send-frame-update-lock-icon - (lambda () - (let ([frame (get-frame)]) - (when frame - (send frame lock-status-changed))))) - 'framework:update-lock-icon))]))))) \ No newline at end of file + (mixin (basic<%>) (info<%>) args + (inherit get-frame run-after-edit-sequence) + (rename [super-lock lock]) + (override + [lock + (lambda (x) + (super-lock x) + (run-after-edit-sequence + (rec send-frame-update-lock-icon + (lambda () + (let ([frame (get-frame)]) + (when frame + (send frame lock-status-changed))))) + 'framework:update-lock-icon))]) + (sequence (apply super-init args)))) + + (define make-clever-file-format% + (mixin (editor<%>) (editor<%>) args + (inherit get-file-format set-file-format find-snip) + (rename [super-on-save-file on-save-file] + [super-after-save-file after-save-file]) + + (private [restore-file-format void]) + + (override + [after-save-file + (lambda (success) + (restore-file-format) + (super-after-save-file success))] + [on-save-file + (let ([has-non-text-snips + (lambda () + (let loop ([s (find-snip 0 'after)]) + (cond + [(null? s) #f] + [(is-a? s text-snip%) + (loop (send s next))] + [else #t])))]) + (lambda (name format) + (when (and (or (eq? format 'same) + (eq? format 'copy)) + (not (eq? (get-file-format) + 'std))) + (cond + [(eq? format 'copy) + (set! restore-file-format + (let ([f (get-file-format)]) + (lambda () + (set! restore-file-format void) + (set-file-format f)))) + (set-file-format 'std)] + [(and (has-non-text-snips) + (or (not (preferences:get 'framework:verify-change-format)) + (gui-utils:get-choice "Save this file as plain text?" "No" "Yes"))) + (set-file-format 'std)] + [else (void)])) + (or (super-on-save-file name format) + (begin + (restore-file-format) + #f))))]) + (sequence (apply super-init args))))) \ No newline at end of file diff --git a/collects/framework/finder.ss b/collects/framework/finder.ss index 51d57325..759fd5e0 100644 --- a/collects/framework/finder.ss +++ b/collects/framework/finder.ss @@ -9,6 +9,9 @@ [mzlib:string : mzlib:string^] [mzlib:function : mzlib:function^] [mzlib:file : mzlib:file^]) + + (rename [put-file -put-file] + [get-file -get-file]) (define dialog-parent-parameter (make-parameter #f)) @@ -344,7 +347,7 @@ number number-of-visible-items set-first-item - set-focus + focus set-selection) (public @@ -371,7 +374,7 @@ (cond [(or (equal? code 'numpad-return) - (equal? code #\return))) + (equal? code #\return)) (do-ok)] [(equal? code #\tab) @@ -423,7 +426,7 @@ (set-selection-and-edit (min (sub1 num-items) (+ curr-pos num-vis))))] - [else #f]))] + [else #f])))] [on-default-action (lambda () @@ -443,10 +446,10 @@ [set-focus-to-name-list (lambda () - (send name-list set-focus))] + (send name-list focus))] [set-focus-to-directory-edit (lambda () - (send directory-panel set-focus))] + (send directory-panel focus))] [save-panel (when save-mode? (make-object horizontal-panel% main-panel))] @@ -515,7 +518,7 @@ (send* canvas (set-line-count 1) (set-media directory-edit) - (set-focus) + (focus) (user-min-height 20))) (when multi-mode? @@ -731,7 +734,7 @@ ; external interfaces to file functions - (define put-file + (define -put-file (lambda args (let ([actual-fun (case (preferences:get 'framework:file-dialogs) @@ -739,7 +742,7 @@ [(common) common-put-file])]) (apply actual-fun args)))) - (define get-file + (define -get-file (lambda args (let ([actual-fun (case (preferences:get 'framework:file-dialogs) diff --git a/collects/framework/frame.ss b/collects/framework/frame.ss index 53f8bfef..671f73c3 100644 --- a/collects/framework/frame.ss +++ b/collects/framework/frame.ss @@ -523,7 +523,7 @@ (do-title) (let ([canvas (get-canvas)]) (send (get-edit) load-file filename) - (send canvas set-focus))))) + (send canvas focus))))) (define searchable<%> (interface () get-edit-to-search @@ -702,7 +702,7 @@ (unless startup? (send (send (get-edit-to-search) get-canvas) - set-focus)) + focus)) (set! hidden? #t))] [unhide-search (lambda () @@ -779,7 +779,7 @@ (send (get-edit-to-search) get-canvas)] [else find-canvas]) - set-focus))] + focus))] [move-to-search-or-search (lambda () (when hidden? @@ -787,7 +787,7 @@ (if (or (send find-canvas is-focus-on?) (send replace-canvas is-focus-on?)) (search 1) - (send find-canvas set-focus)))] + (send find-canvas focus)))] [move-to-search-or-reverse-search (lambda () (when hidden? @@ -795,7 +795,7 @@ (if (or (send find-canvas is-focus-on?) (send replace-canvas is-focus-on?)) (search -1) - (send find-canvas set-focus)))] + (send find-canvas focus)))] [search (opt-lambda ([direction searching-direction] [beep? #t]) diff --git a/collects/framework/guiutils.ss b/collects/framework/guiutils.ss index 00072b96..05ce6d55 100644 --- a/collects/framework/guiutils.ss +++ b/collects/framework/guiutils.ss @@ -55,8 +55,8 @@ (define unsaved-warning (opt-lambda (filename action [can-save-now? #f]) (let* ([result (void)] - [dialog% - (class dialog-box% () + [unsaved-dialog% + (class dialog% () (inherit show center) (private [on-dont-save @@ -95,22 +95,22 @@ button-panel on-cancel)]) (if (not can-save-now?) - (begin (send cancel set-focus) + (begin (send cancel focus) (send now show #f)) - (send now set-focus)))) + (send now focus)))) (center 'both) (show #t)))]) - (make-object dialog%) + (make-object unsaved-dialog%) result))) (define get-choice (opt-lambda (message true-choice false-choice [title "Warning"][x -1][y -1]) (let* ([result (void)] - [dialog% - (class dialog-box% () + [choice-dialog% + (class dialog% () (inherit show center) (private [on-true @@ -143,7 +143,7 @@ (center 'both) (show #t))))]) - (make-object dialog%) + (make-object choice-dialog%) result))) (define read-snips/chars-from-buffer diff --git a/collects/framework/handler.ss b/collects/framework/handler.ss index 4a7e3dac..2d7658f9 100644 --- a/collects/framework/handler.ss +++ b/collects/framework/handler.ss @@ -5,6 +5,7 @@ [group : framework:group^] [text : framework:text^] [preferences : framework:preferences^] + [frame : framework:frame^] [mzlib:file : mzlib:file^]) (define-struct handler (name extension handler)) @@ -88,7 +89,7 @@ (opt-lambda (filename [make-default (lambda (filename) - (make-object frame:info-file-frame% filename))] + (make-object frame:info-file% filename))] [consult-group? (edit-file-consult-group)]) (gui-utils:show-busy-cursor (lambda () diff --git a/collects/framework/icon.ss b/collects/framework/icon.ss index 422dabd7..c06a744a 100644 --- a/collects/framework/icon.ss +++ b/collects/framework/icon.ss @@ -1,5 +1,5 @@ (unit/sig framework:icon^ - (import) + (import mred^) (define icon-path (with-handlers ([void (lambda (x) (collection-path "system"))]) diff --git a/collects/framework/keys.ss b/collects/framework/keys.ss index 46bc0f57..d2048a73 100644 --- a/collects/framework/keys.ss +++ b/collects/framework/keys.ss @@ -3,7 +3,8 @@ [preferences : framework:preferences^] [finder : framework:finder^] [handler : framework:handler^] - [scheme-paren : framework:scheme-paren^]) + [scheme-paren : framework:scheme-paren^] + [frame : framework:frame^]) ; This is a list of keys that are typed with the SHIFT key, but ; are not normally thought of as shifted. It will have to be @@ -70,7 +71,7 @@ [flash-paren-match (lambda (edit event) (send edit on-default-char event) - (let ([pos (scheme-paren:scheme-backward-match + (let ([pos (scheme-paren:backward-match edit (send edit get-start-position) 0)]) @@ -488,15 +489,15 @@ (lambda (edit event) (if building-macro (send build-macro-km break-sequence) - (letrec* ([km (send edit get-keymap)] - [done - (lambda () - (if build-protect? - (send km set-break-sequence-callback done) - (begin - (set! building-macro #f) - (send km set-break-sequence-callback void) - (send km remove-grab-key-function))))]) + (letrec ([km (send edit get-keymap)] + [done + (lambda () + (if build-protect? + (send km set-break-sequence-callback done) + (begin + (set! building-macro #f) + (send km set-break-sequence-callback void) + (send km remove-grab-key-function))))]) (set! building-macro '()) (set! build-macro-km km) (send km set-grab-key-function @@ -772,19 +773,18 @@ (lambda (method) (lambda (edit event) (let ([frame - (let ([frame - (cond - [(is-a? obj editor<%>) - (let ([canvas (send obj get-active-canvas)]) - (and canvas - (send canvas get-top-level-window)))] - [(is-a? obj area<%>) - (send obj get-top-level-window)] - [else #f])]))]) + (cond + [(is-a? edit editor<%>) + (let ([canvas (send edit get-active-canvas)]) + (and canvas + (send canvas get-top-level-window)))] + [(is-a? edit area<%>) + (send edit get-top-level-window)] + [else #f])]) (if frame ((ivar/proc frame method)) - (bell)) - #t)))]) + (bell))) + #t))]) (lambda (kmap) (let* ([map (lambda (key func) (send kmap map-function key func))] diff --git a/collects/framework/main.ss b/collects/framework/main.ss index dbd74558..b6de4504 100644 --- a/collects/framework/main.ss +++ b/collects/framework/main.ss @@ -210,5 +210,5 @@ (exn-message exn))))]) (save-user-preferences)))) - ;(wx:application-file-handler edit-file) + ;(wx:application-file-handler edit-file) ;; how to handle drag and drop? ) diff --git a/collects/framework/panel.ss b/collects/framework/panel.ss index 28f2306d..fcb70056 100644 --- a/collects/framework/panel.ss +++ b/collects/framework/panel.ss @@ -38,7 +38,7 @@ (if (<= num-children 1) (helper parent) (begin (send parent delete-child canvas/panel) - (send (car (ivar parent children)) set-focus))))))]) + (send (car (ivar parent children)) focus))))))]) (send media remove-canvas canvas) (helper canvas)) (bell))))] @@ -72,7 +72,7 @@ (send* media (remove-canvas canvas) (add-canvas left-split) (add-canvas right-split)) - (send* left-split (set-media media) (set-focus)) + (send* left-split (set-media media) (focus)) (send* right-split (set-media media))))])))) (define horizontal-edit% diff --git a/collects/framework/pasteboard.ss b/collects/framework/pasteboard.ss index 2d61f727..b926c51c 100644 --- a/collects/framework/pasteboard.ss +++ b/collects/framework/pasteboard.ss @@ -6,4 +6,4 @@ (define file% (editor:make-file% basic%)) (define clever-file-format% (editor:make-clever-file-format% file%)) (define backup-autosave% (editor:make-backup-autosave% clever-file-format%)) - (define info% (editor:make-info% searching%))) \ No newline at end of file + (define info% (editor:make-info% backup-autosave%))) \ No newline at end of file diff --git a/collects/framework/prefs.ss b/collects/framework/prefs.ss index 13471fe6..ddf77734 100644 --- a/collects/framework/prefs.ss +++ b/collects/framework/prefs.ss @@ -383,7 +383,7 @@ (let* ([pref-sym (build-font-preference-symbol name)] [family-const-pair (assoc name font-families-name/const)] - [edit (make-object edit%)] + [edit (make-object text%)] [_ (send edit insert ex-string)] [set-edit-font (lambda (size) @@ -537,60 +537,61 @@ (define make-preferences-dialog (lambda () - (letrec* ([frame - (make-object (class-asi frame% - (public [added-pane (lambda () - (ensure-constructed) - (refresh-menu) - (send popup-menu set-selection (sub1 (length ppanels))) - (send single-panel active-child - (ppanel-panel (car (list-tail ppanels (sub1 (length ppanels)))))))])) - '() "Preferences")] - [panel (make-object vertical-panel% frame)] - [popup-callback - (lambda (choice command-event) - (send single-panel active-child - (ppanel-panel (list-ref ppanels (send command-event get-command-int)))))] - [make-popup-menu - (lambda () - (let ([menu (make-object choice% "Category" - (map ppanel-title ppanels) - panel popup-callback)]) - (send menu stretchable-in-x #f) - menu))] - [popup-menu (make-popup-menu)] - [single-panel (make-object single-panel% panel '(border))] - [bottom-panel (make-object horizontal-panel% panel)] - [ensure-constructed - (lambda () - (for-each (lambda (ppanel) - (unless (ppanel-panel ppanel) - (let ([panel ((ppanel-container ppanel) single-panel)]) - (unless (is-a? panel panel%) - (error 'preferences-dialog - "expected the preference panel to be a panel%. Got ~a instead~n" - panel)) - (set-ppanel-panel! ppanel panel)))) - ppanels) - (send single-panel change-children (lambda (l) (map ppanel-panel ppanels))) - (send single-panel active-child (ppanel-panel (car ppanels))))] - [refresh-menu - (lambda () - (let ([new-popup (make-popup-menu)]) - (send new-popup set-selection (send popup-menu get-selection)) - (set! popup-menu new-popup) - (send panel change-children - (lambda (l) (list new-popup - single-panel - bottom-panel)))))] - [ok-callback (lambda args - (save) - (hide-dialog))] - [ok-button (make-object button% bottom-panel ok-callback "OK")] - [cancel-callback (lambda args - (hide-dialog) - (read))] - [cancel-button (make-object button% bottom-panel cancel-callback "Cancel")]) + (letrec ([frame + (make-object (class-asi frame% + (public [added-pane (lambda () + (ensure-constructed) + (refresh-menu) + (send popup-menu set-selection (sub1 (length ppanels))) + (send single-panel active-child + (ppanel-panel (car (list-tail ppanels (sub1 (length ppanels)))))))])) + '() "Preferences")] + [panel (make-object vertical-panel% frame)] + [popup-callback + (lambda (choice command-event) + (send single-panel active-child + (ppanel-panel (list-ref ppanels (send command-event get-command-int)))))] + [make-popup-menu + (lambda () + (let ([menu (make-object choice% "Category" + (map ppanel-title ppanels) + panel popup-callback)]) + (send menu stretchable-in-x #f) + menu))] + [popup-menu (make-popup-menu)] + [single-panel (make-object vertical-panel%; This should be single-panel%. wx: + panel '(border))] + [bottom-panel (make-object horizontal-panel% panel)] + [ensure-constructed + (lambda () + (for-each (lambda (ppanel) + (unless (ppanel-panel ppanel) + (let ([panel ((ppanel-container ppanel) single-panel)]) + (unless (is-a? panel panel%) + (error 'preferences-dialog + "expected the preference panel to be a panel%. Got ~a instead~n" + panel)) + (set-ppanel-panel! ppanel panel)))) + ppanels) + (send single-panel change-children (lambda (l) (map ppanel-panel ppanels))) + (send single-panel active-child (ppanel-panel (car ppanels))))] + [refresh-menu + (lambda () + (let ([new-popup (make-popup-menu)]) + (send new-popup set-selection (send popup-menu get-selection)) + (set! popup-menu new-popup) + (send panel change-children + (lambda (l) (list new-popup + single-panel + bottom-panel)))))] + [ok-callback (lambda args + (save) + (hide-dialog))] + [ok-button (make-object button% bottom-panel ok-callback "OK")] + [cancel-callback (lambda args + (hide-dialog) + (read))] + [cancel-button (make-object button% bottom-panel cancel-callback "Cancel")]) (send ok-button user-min-width (send cancel-button get-width)) (send* bottom-panel (stretchable-in-y #f) diff --git a/collects/framework/scheme.ss b/collects/framework/scheme.ss index 06ac3de6..a25620a5 100644 --- a/collects/framework/scheme.ss +++ b/collects/framework/scheme.ss @@ -3,7 +3,7 @@ ; Scheme mode for MrEd. -(unit/sig framework:scheme-mode^ +(unit/sig framework:scheme^ (import mred^ [preferences : framework:preferences^] [match-cache : framework:match-cache^] @@ -51,10 +51,9 @@ (define init-wordbreak-map (lambda (map) (let ([v (send map get-map (char->integer #\-))]) - (unless (zero? (bitwise-and v wx:const-break-for-line)) - (send map set-map - (char->integer #\-) - (- v wx:const-break-for-line)))))) + (send map set-map + (char->integer #\-) + '(line))))) (define wordbreak-map (make-object editor-wordbreak-map%)) (init-wordbreak-map scheme-media-wordbreak-map) @@ -760,7 +759,7 @@ (let ([k (make-object keymap%)]) (set-keymap k) k))]) - (send keymap chain-to-keymap scheme-keymap #t)))))) + (send keymap chain-to-keymap scheme-keymap #t))))) (define setup-keymap (lambda (keymap) @@ -882,7 +881,7 @@ (map-meta "c:space" "select-forward-sexp") (map-meta "c:t" "transpose-sexp")) - (send keymap map-function "c:c;c:b" "remove-parens-forward")))) + (send keymap map-function "c:c;c:b" "remove-parens-forward"))) (define keymap (make-object keymap%)) (setup-keymap keymap)) diff --git a/collects/framework/sig.ss b/collects/framework/sig.ss index 1e6c35d8..53420612 100644 --- a/collects/framework/sig.ss +++ b/collects/framework/sig.ss @@ -1,10 +1,10 @@ - (require-library "refer.ss") (require-library "cores.ss") (require-library "match.ss") (require-library "dates.ss") (require-library "functios.ss") (require-library "macro.ss") +(require-relative-library "macro.ss") (define-signature framework:frame^ (empty<%> @@ -102,14 +102,15 @@ put-file)) (define-signature framework:editor^ - (editor:basic<%> - editor:info<%> - editor:autosave<%> + (basic<%> + info<%> + backup-autosave<%> - editor:make-basic% - editor:make-info% - editor:make-file% - editor:make-backup-autosave%)) + make-clever-file-format% + make-basic% + make-info% + make-file% + make-backup-autosave%)) (define-signature framework:pasteboard^ (basic% @@ -119,23 +120,20 @@ info%)) (define-signature framework:text^ - (text:basic<%> - text:searching<%> + (basic<%> + searching<%> - text:make-basic% - text:make-return% - text:make-searching% - text:make-clever-file-format% - text:make-scheme% + make-basic% + make-return% + make-searching% - text:basic% - text:return% - text:searching% - text:info% - text:clever-file-format% - text:file% - text:backup-autosave% - text:scheme%)) + basic% + return% + searching% + info% + file% + clever-file-format% + backup-autosave%)) (define-signature framework:pasteboard% (pasteboard:basic% @@ -267,7 +265,7 @@ balanced? backward-containing-sexp)) -(define-signature framework:scheme-mode^ +(define-signature framework:scheme^ (wordbreak-map init-wordbreak-map style-list @@ -313,4 +311,4 @@ [unit panel : framework:panel^] [unit frame : framework:frame^] - [unit scheme-mode : framework:scheme-mode^])) \ No newline at end of file + [unit scheme : framework:scheme^])) \ No newline at end of file diff --git a/collects/framework/text.ss b/collects/framework/text.ss index 0e212fa5..dec74634 100644 --- a/collects/framework/text.ss +++ b/collects/framework/text.ss @@ -1,14 +1,18 @@ (unit/sig framework:text^ - (import mred^ + (import mred-interfaces^ [editor : framework:editor^] [preferences : framework:preferences^] - [keymap : framework:keymap^]) + [keymap : framework:keymap^] + [mzlib:function : mzlib:function^]) + + (define-struct range (start end b/w-bitmap color caret-space?)) + (define-struct rectangle (left top right bottom b/w-bitmap color)) ;; wx: `default-wrapping?', add as the initial value for auto-wrap bitmap, ;; unless matthew makes it primitive (define basic<%> - (interface () + (interface (editor:basic<%> text<%>) highlight-range styles-fixed? set-styles-fixed @@ -16,7 +20,7 @@ autowrap-bitmap)) (define make-basic% - (mixin (interface (editor:basic<%> text<%>)) basic<%> args + (mixin (editor:basic<%> text<%>) (basic<%>) args (inherit canvases get-max-width get-admin split-snip get-snip-position delete find-snip invalidate-bitmap-cache set-autowrap-bitmap get-keymap mode set-mode-direct @@ -304,59 +308,15 @@ (let ([keymap (get-keymap)]) (keymap:set-keymap-error-handler keymap) (keymap:set-keymap-implied-shifts keymap) - (send keymap chain-to-keymap keymap:global-keymap #f))))) + (send keymap chain-to-keymap keymap:global #f))))) - (define make-clever-file-format% - (mixin text<%> text<%> args - (inherit get-file-format set-file-format find-snip) - (rename [super-on-save-file on-save-file] - [super-after-save-file after-save-file]) - - (private [restore-file-format void]) - - (public - [after-save-file - (lambda (success) - (restore-file-format) - (super-after-save-file success))] - [on-save-file - (let ([has-non-text-snips - (lambda () - (let loop ([s (find-snip 0 'after)]) - (cond - [(null? s) #f] - [(is-a? s text-snip%) - (loop (send s next))] - [else #t])))]) - (lambda (name format) - (when (and (or (eq? format 'same) - (eq? format 'copy)) - (not (eq? (get-file-format) - 'std))) - (cond - [(eq? format 'copy) - (set! restore-file-format - (let ([f (get-file-format)]) - (lambda () - (set! restore-file-format void) - (set-file-format f)))) - (set-file-format 'std)] - [(and (has-non-text-snips) - (or (not (preferences:get-preference 'framework:verify-change-format)) - (gui-utils:get-choice "Save this file as plain text?" "No" "Yes"))) - (set-file-format 'std)] - [else (void)])) - (or (super-on-save-file name format) - (begin - (restore-file-format) - #f))))]) - (sequence (apply super-init args)))) + (define file<%> (interface (basic<%>))) (define searching<%> (interface () find-string-embedded)) (define make-searching% - (mixin (interface (editor:basic<%> text<%>)) searching<%> args + (mixin (editor:basic<%> text<%>) (searching<%>) args (inherit get-end-position get-start-position last-position find-string get-snip-position get-admin find-snip get-keymap) @@ -443,10 +403,10 @@ (let ([keymap (get-keymap)]) (keymap:set-keymap-error-handler keymap) (keymap:set-keymap-implied-shifts keymap) - (send keymap chain-to-keymap keymap:global-search-keymap #f))))) + (send keymap chain-to-keymap keymap:search #f))))) (define make-return% - (mixin text<%> text<%> args + (mixin (text<%>) (text<%>) (return . args) (rename [super-on-local-char on-local-char]) (override [on-local-char @@ -462,7 +422,7 @@ (apply super-init args)))) (define make-info% - (mixin (interface (editor:basic<%> text<%>)) (interface (editor:basic<%> text<%>)) args + (mixin (editor:basic<%> text<%>) (editor:basic<%> text<%>) args (inherit get-frame get-start-position get-end-position run-after-edit-sequence) (rename [super-after-set-position after-set-position] @@ -509,11 +469,10 @@ (enqueue-for-frame 'edit-position-changed 'framework:edit-position-changed))]))) - - (define basic% (make-basic (editor:make-basic% text%))) + (define basic% (make-basic% (editor:make-basic% text%))) (define return% (make-return% basic%)) (define file% (editor:make-file% basic%)) (define clever-file-format% (editor:make-clever-file-format% file%)) (define backup-autosave% (editor:make-backup-autosave% clever-file-format%)) - (define searching% (make-searching backup-autosave%)) + (define searching% (make-searching% backup-autosave%)) (define info% (make-info% (editor:make-info% searching%)))) \ No newline at end of file diff --git a/notes/mred/MrEd_100_Framework.txt b/notes/mred/MrEd_100_Framework.txt index ea63178e..dcaad37a 100644 --- a/notes/mred/MrEd_100_Framework.txt +++ b/notes/mred/MrEd_100_Framework.txt @@ -9,6 +9,7 @@ into a separate application. Subtle Changes: + - the editor `auto-save?' ivar is now called `autosave?' - overriding `windows-menu' with #f no longer eliminates the windows menu. Now, it is an error. - mred:original-output-port, mred:original-error-port, and @@ -148,6 +149,22 @@ The remaining existant classes: Old to new name mapping: + mred:scheme-paren-pairs -> scheme-paren:paren-pairs + mred:scheme-quote-pairs -> scheme-paren:quote-pairs + mred:scheme-comments -> scheme-paren:comments + mred:scheme-backward-match -> scheme-paren:forward-match + mred:scheme-forward-match-> scheme-paren:backward-match + mred:scheme-balanced? -> scheme-paren:balanced? + mred:scheme-backward-containing-sexp -> scheme-paren:backward-containing-sexp + + mred:setup-global-keymap -> keymap:setup-global + mred:setup-global-search -> keymap:setup-search + mred:setup-global-file -> keymap:setup-file + + mred:global-keymap -> keymap:global + mred:global-search-keymap -> keymap:serach + mred:global-file-keymap -> keyamp:file + mred:match-cache% -> match-cache:% mred:handler? -> handler:handler? @@ -248,9 +265,10 @@ NOTE: some used but non-existant interfaces from mred engine: ; text:make-basic% adds ranges, wrapping, move/copy-to-edit text:make-basic% : (interface (editor:basic<%> text<%>)) -> text:basic<%> - text:make-return% : text<%> -> editor:basic<%> + text:make-return% : editor:basic<%> -> editor:basic<%> text:make-searching% : (interface (editor:basic<%> text<%>)) -> text:searching<%> - text:make-clever-file-format% : text<%> -> editor<%> + text:make-info% : (interface (editor:basic<%> text<%>)) -> (interface (editor:basic<%> text<%>)) + text:make-clever-file-format% : text<%> -> clever-file-format<%> text:make-scheme% : (interface (editor:basic<%> text<%>)) -> editor:scheme<%> editor-canvas:make-frame-title% : editor-canvas<%> -> editor-canvas<%>