original commit: bd6bf8f02fec681af39657dac43fb550d6813af6
This commit is contained in:
Robby Findler 1998-08-29 07:07:42 +00:00
parent 8b1a7656ce
commit 5d67444c68
4 changed files with 668 additions and 136 deletions

583
collects/framework/frame.ss Normal file
View File

@ -0,0 +1,583 @@
(unit/sig framework:frame^
(import [group framework:group^])
(define empty<%> (interface ()
get-panel%
make-root-panel))
(define standard-menus<%>
(interface ()
get-menu%
get-menu-item%
edit-menu
edit-menu:after-standard-items
edit-menu:between-clear-and-select-all
edit-menu:between-copy-and-paste
edit-menu:between-cut-and-copy
edit-menu:between-paste-and-clear
edit-menu:between-redo-and-cut
edit-menu:between-replace-and-preferences
edit-menu:between-select-all-and-find
edit-menu:clear
edit-menu:clear-help-string
edit-menu:clear-menu
edit-menu:clear-string
edit-menu:copy
edit-menu:copy-help-string
edit-menu:copy-menu
edit-menu:copy-string
edit-menu:cut
edit-menu:cut-help-string
edit-menu:cut-menu
edit-menu:cut-string
edit-menu:find
edit-menu:find-help-string
edit-menu:find-menu
edit-menu:find-string
edit-menu:paste
edit-menu:paste-help-string
edit-menu:paste-menu
edit-menu:paste-string
edit-menu:preferences
edit-menu:preferences-help-string
edit-menu:preferences-menu
edit-menu:redo
edit-menu:redo-help-string
edit-menu:redo-menu
edit-menu:redo-string
edit-menu:replace
edit-menu:replace-help-string
edit-menu:replace-menu
edit-menu:replace-string
edit-menu:select-all
edit-menu:select-all-help-string
edit-menu:select-all-menu
edit-menu:select-all-string
edit-menu:undo
edit-menu:undo-help-string
edit-menu:undo-menu
edit-menu:undo-string
file-menu
file-menu:after-quit
file-menu:between-close-and-quit
file-menu:between-new-and-open
file-menu:between-open-and-save
file-menu:between-print-and-close
file-menu:between-save-and-print
file-menu:close
file-menu:close-help-string
file-menu:close-menu
file-menu:close-string
file-menu:new
file-menu:new-help-string
file-menu:new-menu
file-menu:new-string
file-menu:open
file-menu:open-help-string
file-menu:open-menu
file-menu:open-string
file-menu:open-url
file-menu:open-url-help-string
file-menu:open-url-menu
file-menu:open-url-string
file-menu:print
file-menu:print-help-string
file-menu:print-menu
file-menu:print-string
file-menu:quit
file-menu:quit-help-string
file-menu:quit-menu
file-menu:quit-string
file-menu:revert
file-menu:revert-help-string
file-menu:revert-menu
file-menu:revert-string
file-menu:save
file-menu:save-as
file-menu:save-as-help-string
file-menu:save-as-menu
file-menu:save-as-string
file-menu:save-help-string
file-menu:save-menu
file-menu:save-string
help-menu
help-menu:about
help-menu:about-help-string
help-menu:about-menu
help-menu:about-string
help-menu:after-about
windows-menu))
(define empty-standard-menus<%> (interface (standard-menus<%> empty<%>)))
(define edit<%> (interface () FILL-ME-IN))
(define searchable<%> (interface ()))
(define pasteboard<%> (interface ()))
(define info<%> (interface ()))
(define info-file<%> (interface ()))
(define frame-width 600)
(define frame-height 650)
(let ([w (box 0)]
[h (box 0)])
(wx:display-size w h)
(when (< (unbox w) frame-width)
(set! frame-width (- (unbox w) 65)))
(when (< (unbox h) frame-height)
(set! frame-height (- (unbox h) 65))))
(define make-empty%
(mixin frame% empty<%> args
(rename [super-on-activate on-activate])
(override
[can-close?
(lambda ()
(send group:the-frame-group
can-remove-frame?
this))]
[on-close
(lambda ()
(send group:the-frame-group
remove-frame
this))])
(public
[get-panel% (lambda () vertical-panel%)]
[get-menu-bar% (lambda () menu-bar%)]
[make-root-panel
(lambda (% parent)
(make-object % parent))])
(rename [super-show show])
(override
[show
(lambda (on?)
(super-show on?)
(when on?
'(unless (member this (send group:the-frame-group
get-frames))
(send group:the-frame-group
insert-frame this))))]
[on-activate
(lambda (active?)
(super-on-activate active?)
'(when active?
(send group:the-frame-group set-active-frame this)))])
(sequence
(apply super-init args))
(public
[menu-bar (make-object (get-menu-bar%) this)]
[panel (make-root-panel (get-panel%) this)])))
(define make-standard-menus%
(begin-elaboration-time
(let-struct between (menu name procedure)
(let-struct an-item (name help-string proc key menu-string-before menu-string-after)
(letrec ([build-id
(lambda (name post)
(let* ([name-string (symbol->string name)]
[answer (string->symbol (string-append name-string post))])
answer))]
[menu-name->id
(lambda (name-string)
(let ([file-menu? (string=? (substring name-string 0 9) "file-menu")]
[edit-menu? (string=? (substring name-string 0 9) "edit-menu")]
[windows-menu? (string=? (substring name-string 0 9) "windows-m")]
[help-menu? (string=? (substring name-string 0 9) "help-menu")])
(cond
[file-menu? 'file-menu]
[edit-menu? 'edit-menu]
[windows-menu? 'windows-menu]
[help-menu? 'help-menu]
[else (printf "WARNING: defaulting item to file-menu ~s~n" name-string)
'file-menu])))]
[build-fill-in-item-clause
(lambda (item)
(let ([name (an-item-name item)]
[help-string (an-item-help-string item)]
[proc (an-item-proc item)])
`(public
[,name ,proc]
[,(build-id name "-string") ""]
[,(build-id name "-help-string") ,help-string])))]
[build-fill-in-between-clause
(lambda (between)
(let ([menu (between-menu between)]
[name (between-name between)]
[procedure (between-procedure between)])
`(public
[,(string->symbol
(string-append
(symbol->string menu)
":"
(symbol->string name)))
,procedure])))]
[build-item-menu-clause
(lambda (item)
(let* ([name (an-item-name item)]
[name-string (symbol->string name)]
[menu-before-string (an-item-menu-string-before item)]
[menu-after-string (an-item-menu-string-after item)]
[key (an-item-key item)]
[join (lambda (base special suffix)
(if (string=? special "")
(string-append base suffix)
(string-append base " " special suffix)))])
`(public
[,(build-id name "-menu")
(and ,name
(make-object
(get-menu-item%)
(,join ,menu-before-string
,(build-id name "-string")
,menu-after-string)
,(menu-name->id name-string)
,name
,key
,(build-id name "-help-string")))])))]
[build-between-menu-clause
(lambda (between)
`(sequence
(,(string->symbol
(string-append
(symbol->string (between-menu between))
":"
(symbol->string (between-name between))))
,(between-menu between))))]
[items
(let ([between-nothing (lambda (menu) (void))]
[between-separator (lambda (menu) (make-object separator-menu-item% menu))])
(list (make-an-item 'file-menu:new "Open a new file"
'(lambda (item control) (mred:handler:edit-file #f) #t)
#\n "&New" "")
(make-between 'file-menu 'between-new-and-open between-nothing)
(make-an-item 'file-menu:open "Open a file from disk"
'(lambda (item control) (mred:handler:open-file) #t)
#\o "&Open" "...")
(make-an-item 'file-menu:open-url "Open a Uniform Resource Locater"
'(lambda (item control) (mred:handler:open-url) #t)
#f "Open &URL" "...")
(make-an-item 'file-menu:revert
"Revert this file to the copy on disk"
#f #f "&Revert" "")
(make-between 'file-menu 'between-open-and-save between-nothing)
(make-an-item 'file-menu:save "" #f "s" "&Save" "")
(make-an-item 'file-menu:save-as "" #f #f "Save" " &As...")
(make-between 'file-menu 'between-save-and-print between-separator)
(make-an-item 'file-menu:print "" #f "p" "&Print" "...")
(make-between 'file-menu 'between-print-and-close between-separator)
(make-an-item 'file-menu:close ""
'(lambda (item control) (when (on-close) (show #f)) #t)
#\w "&Close" "")
(make-between 'file-menu 'between-close-and-quit between-nothing)
(make-an-item 'file-menu:quit "" '(lambda (item control) (exit:exit))
#\q
'(if (eq? (system-type) 'windows) "E&xit" "Quit")
"")
(make-between 'file-menu 'after-quit between-nothing)
(make-an-item 'edit-menu:undo "" #f #\z "&Undo" "")
(make-an-item 'edit-menu:redo "" #f #\y "&Redo" "")
(make-between 'edit-menu 'between-redo-and-cut between-nothing)
(make-an-item 'edit-menu:cut "" #f #\x "Cu&t" "")
(make-between 'edit-menu 'between-cut-and-copy between-nothing)
(make-an-item 'edit-menu:copy "" #f #\c "&Copy" "")
(make-between 'edit-menu 'between-copy-and-paste between-nothing)
(make-an-item 'edit-menu:paste "" #f #\v "&Paste" "")
(make-between 'edit-menu 'between-paste-and-clear between-nothing)
(make-an-item 'edit-menu:clear "" #f #f
'(if (eq? (system-type) 'macos)
"Clear"
"&Delete")
"")
(make-between 'edit-menu 'between-clear-and-select-all between-nothing)
(make-an-item 'edit-menu:select-all "" #f #\a "Select A&ll" "")
(make-between 'edit-menu 'between-select-all-and-find between-nothing)
(make-an-item 'edit-menu:find "Search for a string in the buffer"
'(lambda (item control) (send this move-to-search-or-search) #t)
#\f "Find" "")
(make-an-item 'edit-menu:replace "Search and replace a string in the buffer"
#f #f "Replace" "")
(make-between 'edit-menu 'between-replace-and-preferences between-separator)
(make-an-item 'edit-menu:preferences "Configure your preferences"
'(lambda (item control) (mred:preferences:show-preferences-dialog) #t)
#f "Preferences..." "")
(make-between 'edit-menu 'after-standard-items between-nothing)
(make-an-item 'help-menu:about "About this application"
'(lambda (item control) (mred:console:credits))
#f
"About "
"...")
(make-between 'help-menu 'after-about between-nothing)))])
`(mixin empty<%> standard-menus<%> args
(inherit menu-bar on-close)
(public [get-menu% (lambda () menu%)]
[get-menu-item% (lambda () menu-item%)])
,@(append
(map (lambda (x)
(if (between? x)
(build-fill-in-between-clause x)
(build-fill-in-item-clause x)))
items)
(list `(sequence (apply super-init args))
`(public
[file-menu (make-object (get-menu%)
(if (eq? (system-type) 'windows)
"&File" "F&ile")
menu-bar)]
[edit-menu (make-object (get-menu%) "&Edit" menu-bar)]
[windows-menu (make-object (get-menu%) "&Windows" menu-bar)]
[help-menu (make-object (get-menu%) "&Help" menu-bar)]))
(map (lambda (x)
(if (between? x)
(build-between-menu-clause x)
(build-item-menu-clause x)))
items))))))))
(define make-edit%
(mixin empty-standard-menus<%> frame:simple-menu<%> ([name (mred:application:current-app-name)])
(inherit panel get-client-size set-icon get-menu-bar
make-menu show active-edit active-canvas)
(rename [super-can-close? can-close?]
[super-make-menu-bar make-menu-bar]
[super-set-title set-title])
(public
[WIDTH frame-width]
[HEIGHT frame-height])
(override
[can-close?
(lambda ()
(and (send (get-edit) do-close)
(super-can-close?)))]
[get-panel% (lambda () mred:panel:vertical-edit-panel%)])
(public
[title-prefix name])
(private
[label ""]
[do-label
(lambda ()
(super-set-label (get-entire-label))
(send group:the-frame-group frame-title-changed this))])
(public
[get-entire-label
(lambda ()
(if (or (string=? "" label)
(string=? "" label-prefix))
(string-append label-prefix label)
(string-append label " - " label-prefix)))]
[get-label-prefix (lambda () label-prefix)]
[set-label-prefix
(lambda (s)
(when (and (string? s)
(not (string=? s label-prefix)))
(set! label-prefix s)
(do-label)))])
(override
[get-label (lambda () label)]
[set-label
(lambda (t)
(when (and (string? t)
(not (string=? t label)))
(set! label t)
(do-label)))])
(public
[get-canvas% (lambda () mred:canvas:frame-title-canvas%)]
[get-edit% (lambda () mred:edit:media-edit%)]
[make-edit (lambda () (make-object (get-edit%)))])
(public
[save-as
(opt-lambda ([format wx:const-media-ff-same])
(let ([file (parameterize ([mred:finder:dialog-parent-parameter
this])
(mred:finder:put-file))])
(when file
(send (get-edit) save-file file format))))]
[file-menu:revert
(lambda ()
(let* ([b (box #f)]
[edit (get-edit)]
[filename (send edit get-filename b)])
(if (or (null? filename) (unbox b))
(wx:bell)
(let-values ([(start end)
(if (is-a? edit wx:media-edit%)
(values (send edit get-start-position)
(send edit get-end-position))
(values #f #f))])
(send edit begin-edit-sequence)
(let ([status (send edit load-file
filename
wx:const-media-ff-same
#f)])
(if status
(begin
(when (is-a? edit wx:media-edit%)
(send edit set-position start end))
(send edit end-edit-sequence))
(begin
(send edit end-edit-sequence)
(mred:gui-utils:message-box
(format "could not read ~a" filename)
"Error Reverting"))))))
#t))]
[file-menu:save (lambda ()
(send (get-edit) save-file)
#t)]
[file-menu:save-as (lambda () (save-as) #t)]
[file-menu:between-print-and-close
(lambda (file-menu)
(send file-menu append-separator)
(let ([split
(lambda (panel%)
(lambda ()
(when (active-canvas)
(send panel split (active-canvas) panel%))))])
(send file-menu append-item "Split Horizontally" (split mred:container:horizontal-panel%))
(send file-menu append-item "Split Vertically" (split mred:container:vertical-panel%))
(send file-menu append-item "Collapse"
(lambda ()
(when (active-canvas)
(send panel collapse (active-canvas))))))
(send file-menu append-separator))]
[file-menu:print (lambda ()
(send (get-edit) print
'()
#t
#t
(mred:preferences:get-preference 'mred:print-output-mode))
#t)])
(private
[edit-menu:do (lambda (const)
(lambda (menu evt)
(let ([edit (active-edit)])
(when edit
(send edit do-edit const)))
#t))])
(public
[edit-menu:undo (edit-menu:do wx:const-edit-undo)]
[edit-menu:redo (edit-menu:do wx:const-edit-redo)]
[edit-menu:cut (edit-menu:do wx:const-edit-cut)]
[edit-menu:clear (edit-menu:do wx:const-edit-clear)]
[edit-menu:copy (edit-menu:do wx:const-edit-copy)]
[edit-menu:paste (edit-menu:do wx:const-edit-paste)]
[edit-menu:select-all (edit-menu:do wx:const-edit-select-all)]
[edit-menu:replace (lambda (menu evt)
(when (active-canvas)
(mred:find-string:find-string
(active-canvas)
(active-edit)
-1 -1 (list 'replace 'ignore-case))))]
[edit-menu:between-replace-and-preferences
(lambda (edit-menu)
(send edit-menu append-separator)
(send edit-menu append-item "Insert Text Box"
(edit-menu:do wx:const-edit-insert-text-box))
(send edit-menu append-item "Insert Graphic Box"
(edit-menu:do wx:const-edit-insert-graphic-box))
(send edit-menu append-item "Insert Image..."
(edit-menu:do wx:const-edit-insert-image))
(send edit-menu append-item "Toggle Wrap Text"
(lambda ()
(let ([edit (active-edit)])
(when edit
(send edit set-auto-set-wrap (not (ivar edit auto-set-wrap?)))
(send (active-canvas) force-redraw)))))
(send edit-menu append-separator))])
(public
[help-menu:about (lambda (menu evt) (mred:console:credits))]
[help-menu:about-string (mred:application:current-app-name)]
[help-menu:compare string-ci<?]
[help-menu:insert-items
(lambda (items)
(for-each (lambda (x) (apply (ivar (ivar this help-menu) append-item) x))
items))]
[help-menu:after-about
(let ([reg (regexp "<TITLE>(.*)</TITLE>")])
(lambda (help-menu)
(let* ([dir (with-handlers ([void (lambda (x) #f)]) (collection-path "doc"))])
(if (and dir (directory-exists? dir))
(let* ([dirs (directory-list dir)]
[find-title
(lambda (name)
(lambda (port)
(let loop ([l (read-line port)])
(if (eof-object? l)
name
(let ([match (regexp-match reg l)])
(if match
(cadr match)
(loop (read-line port))))))))]
[build-item
(lambda (local-dir output)
(let* ([f (build-path dir local-dir "index.htm")])
(if (file-exists? f)
(let ([title (call-with-input-file f (find-title local-dir))])
(cons
(list title
(lambda ()
(let* ([f (make-object mred:hyper-frame:hyper-view-frame%
(string-append "file:" f))])
(send f set-title-prefix title)
f)))
output))
(begin (mred:debug:printf 'help-menu "couldn't find ~a" f)
output))))]
[item-pairs
(mzlib:function:quicksort
(mzlib:function:foldl build-item null dirs)
(lambda (x y) (help-menu:compare (car x) (car y))))])
(unless (null? item-pairs)
(send help-menu append-separator))
(help-menu:insert-items item-pairs))
(mred:debug:printf 'help-menu "couldn't find PLTHOME/doc directory")))))])
(sequence
(mred:debug:printf 'super-init "before simple-frame%")
(super-init () name -1 -1 WIDTH HEIGHT
(+ wx:const-default-frame wx:const-sdi)
name)
(mred:debug:printf 'super-init "after simple-frame%"))
(public
[get-canvas (let ([c #f])
(lambda ()
(unless c
(set! c (make-object (get-canvas%) panel))
(send c set-media (get-edit)))
c))]
[get-edit (let ([e #f])
(lambda ()
(unless e
(set! e (make-edit))
(send (get-canvas) set-media e))
e))])
(sequence
(let ([icon (mred:icon:get-icon)])
(when (send icon ok?)
(set-icon icon)))
(do-title)
(let ([canvas (get-canvas)])
(send canvas set-focus)))))
(define empty% (make-empty% frame%))
(define standard-menus% (make-standard-menus% empty%))
(define edit% (make-edit% standard-menus%))
(define searchable% (make-searchable% edit%))
(define info% (make-info% searchable%))
(define info-file% (make-file% info%))
(define pasteboard% (make-pasteboard% simple-menu%))
(define pasteboard-info% (make-info% pasteboard%))
(define pasteboard-info-file% (make-file% pasteboard-info%)))

View File

@ -0,0 +1,47 @@
(private [get-standard-menu-close-item
(lambda (frame)
(let* ([close-string (if (eq? (system-type) 'windows)
"&Close"
"Close")]
[file-menu (ivar frame file-menu)])
(if file-menu
(send file-menu find-item close-string)
#f)))]
[set-close-menu-item-state!
(lambda (frame state)
(when (is-a? frame frame:standard-menus<%>)
(let ([close-menu-item
(get-standard-menu-close-item frame)])
(when close-menu-item
(send (ivar frame file-menu)
enable close-menu-item state)))))])
when removing a frame, do this:
(let ([frames (send mred:group:the-frame-group
get-frames)])
; disable File|Close if remaining frame is singleton
(when (eq? (length frames) 1)
(set-close-menu-item-state! (car frames) #f)))
when adding a frame, do this:
(let ([frames (send mred:group:the-frame-group get-frames)])
(if (eq? (length frames) 1)
; disable File|Close if frame is singleton
(set-close-menu-item-state! this #f)
; otherwise, enable for all frames
(send mred:group:the-frame-group
for-each-frame
(lambda (a-frame)
(set-close-menu-item-state! a-frame #t)))))

26
collects/framework/sig.ss Normal file
View File

@ -0,0 +1,26 @@
(define-signature framework:frame^
(empty<%>
standard-menus<%>
empty-standard-menus<%>
edit<%>
searchable<%>
pasteboard<%>
info<%>
info-file<%>
make-empty%
make-standard-menus%
make-edit%
make-searchable%
make-info%
make-file%
empty%
standard-menus%
edit%
searchable%
info%
info-file%
pasteboard%
pasteboard-info%
pasteboard-info-file%))

View File

@ -7,6 +7,11 @@ Several of the old classes and proecedures are not longer in the
framework. Some have been eliminated and some have been moved out
into a separate application.
Subtle Changes:
- overriding `windows-menu' with #f no longer eliminates the windows
menu. Now, it is an error.
The eliminated classes are:
:: classes that used to improve the wx: toolbox
@ -186,14 +191,13 @@ NOTE: some used but non-existant interfaces from mred engine:
with the corresponding engine classes. Perhaps later those
interfaces will be added.
frame:make-empty% : frame<%> -> frame:empty<%>
frame:make-standard-menus% : frame<%> -> frame:standard-menus<%>
frame:make-simple-menu% : (interface (frame:standard-menus<%> frame:empty<%>))
-> frame:simple-menu<%>
frame:make-searchable% : frame:simple-menu<%> -> frame:searchable<%>
frame:make-pasteboard% : frame:simple-menu<%> -> frame:pasteboard<%>
frame:make-info% : frame:simple-menu<%> -> frame:info<%>
frame:make-file% : frame:simple-menu<%> -> frame:info-file<%>
frame:make-empty% : frame% -> frame:empty<%>
frame:make-standard-menus% : frame% -> frame:standard-menus<%>
frame:make-edit% : frame:empty-standard-menus<%> -> frame:edit<%>
frame:make-searchable% : frame:edit<%> -> frame:searchable<%>
frame:make-pasteboard% : frame:edit<%> -> frame:pasteboard<%>
frame:make-info% : frame:edit<%> -> frame:info<%>
frame:make-file% : frame:edit<%> -> frame:info-file<%>
; editor:make-basic% adds keymap support, error checking on load-file
; run-after-edit-sequence, locked?, get-edit-snip,
@ -216,131 +220,3 @@ NOTE: some used but non-existant interfaces from mred engine:
panel:make-edit% : panel<%> -> panel:edit<%>
snip:make-basic-style% : snip<%> -> snip<%>
Interfaces:
frame:empty<%> =
(interface ()
get-panel%
can-close?
do-close
make-root-panel)
remove-canvas)
frame:standard-menus<%>
(interface ()
edit-menu
edit-menu:after-standard-items
edit-menu:between-clear-and-select-all
edit-menu:between-copy-and-paste
edit-menu:between-cut-and-copy
edit-menu:between-paste-and-clear
edit-menu:between-redo-and-cut
edit-menu:between-replace-and-preferences
edit-menu:between-select-all-and-find
edit-menu:clear
edit-menu:clear-help-string
edit-menu:clear-id
edit-menu:clear-string
edit-menu:copy
edit-menu:copy-help-string
edit-menu:copy-id
edit-menu:copy-string
edit-menu:cut
edit-menu:cut-help-string
edit-menu:cut-id
edit-menu:cut-string
edit-menu:find
edit-menu:find-help-string
edit-menu:find-id
edit-menu:find-string
edit-menu:paste
edit-menu:paste-help-string
edit-menu:paste-id
edit-menu:paste-string
edit-menu:preferences
edit-menu:preferences-help-string
edit-menu:preferences-id
edit-menu:redo
edit-menu:redo-help-string
edit-menu:redo-id
edit-menu:redo-string
edit-menu:replace
edit-menu:replace-help-string
edit-menu:replace-id
edit-menu:replace-string
edit-menu:select-all
edit-menu:select-all-help-string
edit-menu:select-all-id
edit-menu:select-all-string
edit-menu:undo
edit-menu:undo-help-string
edit-menu:undo-id
edit-menu:undo-string
file-menu
file-menu:after-quit
file-menu:between-close-and-quit
file-menu:between-new-and-open
file-menu:between-open-and-save
file-menu:between-print-and-close
file-menu:between-save-and-print
file-menu:close
file-menu:close-help-string
file-menu:close-id
file-menu:close-string
file-menu:new
file-menu:new-help-string
file-menu:new-id
file-menu:new-string
file-menu:open
file-menu:open-help-string
file-menu:open-id
file-menu:open-string
file-menu:open-url
file-menu:open-url-help-string
file-menu:open-url-id
file-menu:open-url-string
file-menu:print
file-menu:print-help-string
file-menu:print-id
file-menu:print-string
file-menu:quit
file-menu:quit-help-string
file-menu:quit-id
file-menu:quit-string
file-menu:revert
file-menu:revert-help-string
file-menu:revert-id
file-menu:revert-string
file-menu:save
file-menu:save-as
file-menu:save-as-help-string
file-menu:save-as-id
file-menu:save-as-string
file-menu:save-help-string
file-menu:save-id
file-menu:save-string
help-menu
help-menu:about
help-menu:about-help-string
help-menu:about-id
help-menu:about-string
help-menu:after-about
windows-menu))
; adds an edit and a canvas to the frame and sets up
; the basic menus. Updates the frame title based on the edit's
; filename.
frame:simple-menu<%> =
(interface (frame:standard-menus<%>)
get-title-prefix
set-title-prefix
get-entire-title
get-canvas%
get-edit%
make-edit
save-as)
frame:searchable<%> =