gui/collects/framework/framework.ss
Robby Findler 0a14e7b5b3 ..
original commit: 78671f5cc1d716230985f9a3bd6868c91331c57d
2003-08-10 23:36:54 +00:00

1504 lines
52 KiB
Scheme

(module framework mzscheme
(require (lib "unitsig.ss")
(lib "mred.ss" "mred")
(lib "mred-sig.ss" "mred")
(lib "class.ss")
"test.ss"
"gui-utils.ss"
"decorated-editor-snip.ss"
"framework-unit.ss"
"framework-sig.ss"
"macro.ss"
(lib "contract.ss"))
(provide-signature-elements framework-class^)
(provide (all-from "macro.ss")
(all-from "test.ss")
(all-from "gui-utils.ss")
(all-from "decorated-editor-snip.ss"))
(provide exn:struct:unknown-preference
exn:struct:exn)
(define-syntax (provide/contract/docs stx)
(syntax-case stx ()
[(_ (name contract docs ...) ...)
(syntax (provide/contract (name contract) ...))]))
(define-values/invoke-unit/sig
framework^
framework@
#f
mred^)
(provide/contract/docs
(version:add-spec
(any? any? . -> . void?)
(spec revision)
"These two values are appended to the version string. \\rawscm{write} is"
"used to transform them to strings. For example:"
""
"\\rawscm{(version:add-spec 's 1)}"
""
"in version 205 will make the version string be \\rawscm{\"205s1\"}. The"
"symbols \\rawscm{'f} and \\rawscm{'d} are used internally for framework and"
"drscheme revisions.")
(version:version
(-> string?)
()
"This function returns a string describing the version of this"
"application. See also "
"@flink version:add-spec %"
".")
(exn:make-exn
(string? continuation-mark-set? . -> . exn?)
(message continuation-marks)
"Creates a framework exception.")
(exn:exn?
(any? . -> . boolean?)
(exn)
"Tests if a value is a framework exception.")
(exn:make-unknown-preference
(string? continuation-mark-set? . -> . exn:unknown-preference?)
(message continuation-marks)
"Creates an unknown preference exception.")
(exn:unknown-preference?
(any? . -> . boolean?)
(exn)
"Determines if a value is an unknown preference exn.")
(application:current-app-name
(case-> (-> string?)
(string? . -> . void?))
(() (name))
"This is a parameter specifying the name of the current application. It"
"is used in the help menu (see \\iscmclass{frame:standard-menus}) and in"
"frame titles (see \\iscmclass{frame:editor})."
""
"The first case in the case-lambda returns"
"the current name, and"
"the second case in the case-lambda sets"
"the name of the application to \\var{name}.")
(preferences:get
(symbol? . -> . any?)
(symbol)
"See also"
"@flink preferences:set-default %"
"."
""
"\\rawscm{preferences:get} returns the value for the preference"
"\\var{symbol}. It raises"
"\\scmindex{exn:unknown-preference}\\rawscm{exn:unknown-preference}"
"if the preference has not been set.")
(preferences:add-callback
(symbol? (symbol? any? . -> . any?) . -> . (-> void?))
(p f)
"This function adds a callback which is called with a symbol naming a"
"preference and it's value, when the preference changes."
"\\rawscm{preferences:add-callback} returns a thunk, which when"
"invoked, removes the callback from this preference."
""
"The callbacks will be called in the order in which they were added."
""
"If you are adding a callback for a preference that requires"
"marshalling and unmarshalling, you must set the marshalling and"
"unmarshalling functions by calling"
"\\iscmprocedure{preferences:set-un/marshall} before adding a callback."
""
"This function raises"
"\\scmindex{exn:unknown-preference}\\rawscm{exn:unknown-preference}"
"if the preference has not been set.")
(preferences:set
(symbol? any? . -> . void?)
(symbol value)
"\\rawscm{preferences:set-preference} sets the preference"
"\\var{symbol} to \\var{value}. This should be called when the"
"users requests a change to a preference.")
(preferences:set-default
(symbol? any? (any? . -> . any?) . -> . void?)
(symbol value test)
"This function must be called every time your application starts up, before any call to"
"@flink preferences:get %"
"."
""
"If you use"
"@flink preferences:set-un/marshall %"
", you must also call it before calling this function."
""
"This sets the default value of the preference \\var{symbol} to"
"\\var{value}. If the user has chosen a different setting,"
"the user's setting"
"will take precedence over the default value."
""
"The last argument, \\var{test} is used as a safeguard. That function is"
"called to determine if a preference read in from a file is a valid"
"preference. If \\var{test} returns \\rawscm{\\#t}, then the preference is"
"treated as valid. If \\var{test} returns \\rawscm{\\#f} then the default is"
"used."
"If there is a site-wide default preferences file, the default"
"preference in that file is used instead of \\var{value}.")
(preferences:set-un/marshall
(symbol? (any? . -> . printable?) (printable? . -> . any?) . -> . void?)
(symbol marshall unmarshall)
"\\rawscm{preference:set-un/marshall} is used to specify marshalling and"
"unmarshalling functions for the preference"
"\\var{symbol}. \\var{marshall} will be called when the users saves their"
"preferences to turn the preference value for \\var{symbol} into a"
"printable value. \\var{unmarshall} will be called when the user's"
"preferences are read from the file to transform the printable value"
"into it's internal representation. If \\rawscm{preference:set-un/marshall}"
"is never called for a particular preference, the values of that"
"preference are assumed to be printable."
""
"If the unmarshalling function returns a value that does not meet the"
"guard passed to "
"@flink preferences:set-default"
"for this preference, the default value is used."
""
"\\rawscm{preference:set-un/marshall} must be called before calling"
"@flink preferences:get "
"or "
"@flink preferences:set-default %"
".")
(preferences:save
(-> boolean?)
()
"\\rawscm{(preferences:save-user-preferences)} saves the user's preferences to disk,"
"potentially marshalling some of the preferences."
""
"Returns \\scm{\\#f} if saving the preferences fails and \\scm{\\#t} otherwise.")
(preferences:read
(-> void?)
()
"Reads the preferences from the preferences file and installs their values.")
(preferences:restore-defaults
(-> void?)
()
"\\rawscm{(preferences:restore-defaults)} restores the users's configuration to the"
"default preferences.")
(preferences:add-panel
((union string? (cons/p string? (listof string?)))
((is-a?/c area-container-window<%>)
. ->d .
(lambda (parent)
(let ([children (map (lambda (x) x) (send parent get-children))])
(lambda (child)
(and (is-a? child area-container-window<%>)
(andmap eq?
(append children (list child))
(send parent get-children)))))))
. -> .
void?)
(labels f)
"\\rawscm{preferences:add-preference-panel} adds the result of"
"\\var{f} with name \\var{labels} to the preferences dialog"
"box."
""
"The labels determine where this preference panel is placed"
"in the dialog. If the list is just one string, the"
"preferences panel is placed at the top level of the dialog."
"If there are more strings, a hierarchy of nested panels is"
"created and the new panel is added at the end."
"If multiple calls to \\rawscm{preferences:add-preference-panel}"
"pass the same prefix of strings, those panels are placed in the"
"same children."
""
"When the preference dialog is opened for the first"
"time, the function \\var{f} is called with a panel, and"
"\\var{f} is expected to add a new child panel to it and add"
"whatever preferences configuration controls it wants to that"
"panel. Then, \\var{f}'s should return the panel it added.")
(preferences:add-editor-checkbox-panel
(-> void?)
()
"Adds a preferences panel for configuring options"
"related to editing.")
(preferences:add-warnings-checkbox-panel
(-> void?)
()
"Adds a preferences panel for configuring"
"options relating to warnings")
(preferences:add-scheme-checkbox-panel
(-> void?)
()
"Adds a preferences panel for configuring"
"options related to Scheme.")
(preferences:add-to-warnings-checkbox-panel
(((is-a?/c vertical-panel%) . -> . void?) . -> . void?)
(proc)
"Saves \\var{proc} until the preferences panel is"
"created, when it is called with the Misc. panel to"
"add new children to the panel.")
(preferences:add-to-scheme-checkbox-panel
(((is-a?/c vertical-panel%) . -> . void?) . -> . void?)
(proc)
"Saves \\var{proc} until the preferences panel is "
"created, when it is called with the Scheme "
"preferences panel to "
"add new children to the panel.")
(preferences:add-to-editor-checkbox-panel
(((is-a?/c vertical-panel%) . -> . void?) . -> . void?)
(proc)
"Saves \\var{proc} until the preferences panel is "
"created, when it is called with the Echeme "
"preferences panel to "
"add new children to the panel.")
(preferences:add-font-panel
(-> void?)
()
"Adds a font selection preferences panel to the preferences dialog.")
(preferences:show-dialog
(-> void?)
()
"Shows the preferences dialog.")
(preferences:hide-dialog
(-> void?)
()
"Hides the preferences dialog.")
(preferences:add-on-close-dialog-callback
((-> void?) . -> . void?)
(cb)
"Registers \\var{cb}. Next time the"
"user clicks the OK button the preferences"
"dialog, all of the \\var{cb} functions"
"are called, assuming that each of the callbacks"
"passed to"
"@flink preferences:add-can-close-dialog-callback"
"succeed.")
(preferences:add-can-close-dialog-callback
((-> boolean?) . -> . void?)
(cb)
"Registers \\var{cb}. Next time the"
"user clicks the OK button the preferences"
"dialog, all of the \\var{cb} functions"
"are called. If any of them return \\scm{\\#f},"
"the dialog is not closed."
""
"See also"
"@flink preferences:add-on-close-dialog-callback %"
".")
(autosave:register
((and/c (is-a?/c autosave:autosavable<%>)
(is-a?/c editor<%>))
. -> .
void?)
(obj)
"Adds \\var{obj} to the list of objects to be autosaved. When it is time"
"to autosave, the \\rawscm{do-autosave} method of the object is"
"called. This method is responsible for performing the autosave."
""
"There is no need to"
"de-register an object because the autosaver keeps a ``weak'' pointer"
"to the object; i.e., the autosaver does not keep an object from"
"garbage collection.")
(autosave:restore-autosave-files/gui
(-> void?)
()
"Opens a GUI to ask the user about recovering any autosave files"
"left around from crashes and things."
""
"This function doesn't return until the user has finished"
"restoring the autosave files. (It uses yield to handle events"
"however).")
(exit:exiting?
(-> boolean?)
()
"Returns \\rawscm{\\#t} to indicate that an exit"
"operation is taking place. Does not indicate that the"
"app will actually exit, since the user may cancel"
"the exit."
""
"See also"
"@flink exit:insert-on-callback"
"and"
"@flink exit:insert-can?-callback %"
".")
(exit:set-exiting
(boolean? . -> . void?)
(exiting?)
"Sets a flag that affects the result of"
"@flink exit:exiting? %"
".")
(exit:insert-on-callback
((-> void?) . -> . (-> void?))
(callback)
"Adds a callback to be called when exiting. This callback must not"
"fail. If a callback should stop an exit from happening, use"
"@flink exit:insert-can?-callback %"
".")
(exit:insert-can?-callback
((-> boolean?) . -> . (-> void?))
(callback)
"Use this function to add a callback that determines if an attempted"
"exit can proceed. This callback should not clean up any state, since"
"another callback may veto the exit. Use"
"@flink exit:insert-on-callback"
"for callbacks that clean up state.")
(exit:can-exit?
(-> boolean?)
()
"Calls the ``can-callbacks'' and returns their results."
"See"
"@flink exit:insert-can?-callback"
"for more information.")
(exit:on-exit
(-> void?)
()
"Calls the ``on-callbacks''. See"
"@flink exit:insert-on-callback"
"for more information.")
(exit:exit
(-> any)
()
"\\rawscm{exit:exit} performs four actions:"
"\\begin{itemize}"
"\\item sets the result of the"
"@flink exit:exiting?"
"function to \\rawscm{\\#t}."
"\\item invokes the exit-callbacks, with "
"@flink exit:can-exit? %"
"If none of the ``can?'' callbacks return \\rawscm{\\#f}, "
"\\item"
"invokes"
"@flink exit:on-exit %"
"and then "
"\\item"
"queues a callback that calls"
"\\rawscm{exit} (a mzscheme procedure)"
"and (if \\rawscm{exit} returns) sets the"
"result of"
"@flink exit:exiting?"
"back to \\rawscm{\\#t}."
"\\end{itemize}")
(exit:user-oks-exit
(-> boolean?)
()
"Opens a dialog that queries the user"
"about exiting. Returns the user's decision.")
(path-utils:generate-autosave-name
(string? . -> . string?)
(filename)
"Generates a name for an autosave file from \\var{filename}.")
(path-utils:generate-backup-name
(string? . -> . string?)
(filename)
"Generates a name for an backup file from \\var{filename}.")
(finder:dialog-parent-parameter
(case->
((union false? (is-a?/c top-level-window<%>)) . -> . void?)
(-> (union false? (is-a?/c top-level-window<%>))))
((parent) ())
"This is a parameter (see "
"\\Mzhyperref{parameters}{mz:parameters} for information about parameters)"
"which determines the parent of the dialogs created by"
"@flink finder:get-file %"
", "
"@flink finder:put-file %"
","
"@flink finder:common-get-file %"
","
"@flink finder:common-put-file %"
","
"@flink finder:common-get-file-list %"
","
"@flink finder:std-get-file %"
", and"
"@flink finder:std-put-file %"
".")
(finder:default-extension
(case-> (-> string?)
(string? . -> . void?))
(() (extension))
"This parameter controls the default extension for the framework's "
"@flink finder:put-file"
"dialog. Its value gets passed as the"
"\\var{default-extension} argument to"
"@flink put-file %"
"."
""
"Its default value is \\rawscm{\"\"}.")
(finder:default-filters
(case->
((listof (list/p string? string?)) . -> . void?)
(-> (listof (list/p string? string?))))
((filters) ())
"This parameter controls the default extension for the framework's "
"@flink finder:put-file"
"dialog. Its value gets passed as the"
"\\var{default-filters} argument to"
"@flink put-file %"
"."
""
"Its default value is \\rawscm{'((\"Any\" \"*.*\"))}.")
(finder:common-put-file
(opt->
()
(string?
(union false? string?)
boolean?
string?
(union false? regexp?)
string?
(union (is-a?/c top-level-window<%>) false?))
(union false? string?))
(()
((name "Untitled")
(directory #f)
(replace? #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent (finder:dialog-parent-parameter))))
"This procedure queries the user for a single filename, using a"
"platform-independent dialog box. Consider using"
"@flink finder:put-file "
"instead of this function."
""
"See section \\ref{selecting-a-filename} for more information.")
(finder:common-get-file
(opt->
()
((union string? false?)
string?
(union regexp? false?)
string?
(union false? (is-a?/c top-level-window<%>)))
(union string? false?))
(()
((directory #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent #f)))
"This procedure queries the user for a single filename, using a"
"platform-independent dialog box. Consider using"
"@flink finder:get-file "
"instead of this function."
""
"See section \\ref{selecting-a-filename} for more information.")
(finder:std-put-file
(opt->
()
(string?
(union false? string?)
boolean?
string?
(union false? regexp?)
string?
(union (is-a?/c top-level-window<%>) false?))
(union false? string?))
(()
((name "Untitled")
(directory #f)
(replace? #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent (finder:dialog-parent-parameter))))
"This procedure queries the user for a single filename, using a"
"platform-dependent dialog box. Consider using"
"@flink finder:put-file "
"instead of this function."
""
"See section \\ref{selecting-a-filename} for more information.")
(finder:std-get-file
(opt->
()
((union string? false?)
string?
(union regexp? false?)
string?
(union false? (is-a?/c top-level-window<%>)))
(union string? false?))
(()
((directory #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent #f)))
"This procedure queries the user for a single filename, using a"
"platform-dependent dialog box. Consider using"
"@flink finder:get-file "
"instead of this function."
""
"See section \\ref{selecting-a-filename} for more information.")
(finder:put-file
(opt->
()
(string?
(union false? string?)
boolean?
string?
(union false? regexp?)
string?
(union (is-a?/c top-level-window<%>) false?))
(union false? string?))
(()
((name "Untitled")
(directory #f)
(replace? #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent (finder:dialog-parent-parameter))))
"Queries the user for a filename."
""
"If the result of \\rawscm{(%"
"@flink preferences:get"
"'framework:file-dialogs)}"
"is \\rawscm{'std} this calls "
"@flink finder:std-put-file %"
", and if it is \\rawscm{'common}, "
"@flink finder:common-put-file"
"is called.")
(finder:get-file
(opt->
()
((union string? false?)
string?
(union regexp? string? false?)
string?
(union false? (is-a?/c top-level-window<%>)))
(union string? false?))
(()
((directory #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent #f)))
"Queries the user for a filename."
""
"If the result of \\rawscm{(%"
"@flink preferences:get"
"'framework:file-dialogs)}"
"is \\rawscm{'std} this calls "
"@flink finder:std-get-file %"
", and if it is \\rawscm{'common}, "
"@flink finder:common-get-file"
"is called.")
(finder:common-get-file-list
(opt->
()
((union false? string?)
string?
(union false? regexp?)
string?
(union false? (is-a?/c top-level-window<%>)))
(union string? false?))
(()
((directory #f)
(prompt "Select File")
(filter #f)
(filter-msg "That filename does not have the right form.")
(parent #f)))
"This procedure queries the user for a list of filenames, using a"
"platform-independent dialog box."
""
"See section \\ref{selecting-a-filename} for more information.")
(frame:add-snip-menu-items
((is-a?/c menu%) (subclass?/c menu-item%) . -> . void?)
(menu menu-item%)
"Inserts three menu items into \\var{menu},"
"one that inserts a text box, one that inserts a"
"pasteboard box, and one that inserts an image"
"into the currently focused editor (if there is one)."
"Uses \\var{menu-item\\%} as the class for"
"the menu items.")
(frame:reorder-menus
((is-a?/c frame%) . -> . void?)
(frame)
"Re-orders the menus in a frame. It moves the ``File'' and ``Edit'' menus to"
"the front of the menubar and moves the ``Windows'' and ``Help'' menus"
"to the end of the menubar."
""
"This is useful in conjunction with the "
"frame classes. After instantiating the class and adding ones own menus,"
"the menus will be mis-ordered. This function fixes them up.")
(group:get-the-frame-group
(-> (is-a?/c group:%))
()
"This returns the frame group.")
(handler:handler?
(any? . -> . boolean?)
(obj)
"This predicate determines if its input is a handler")
(handler:handler-name
(handler:handler? . -> . string?)
(handler)
"Extracts the name from a handler.")
(handler:handler-extension
(handler:handler? . -> . string?)
(handler)
"Extracts the extension from a handler.")
(handler:handler-handler
(handler:handler? . -> . (string? . -> . (is-a?/c frame:editor<%>)))
(handler)
"Extracs the handler's handling function")
(handler:insert-format-handler
(string?
(union string? (listof string?) (string? . -> . boolean?))
(string? . -> . (union false? (is-a?/c frame:editor<%>)))
. -> .
void?)
(name pred handler)
"This function inserts a format handler."
""
"The string, \\var{name} names the format handler for use with"
"@flink handler:find-named-format-handler %"
". If \\var{pred} is a string, it is matched with the extension of a filename by"
"@flink handler:find-format-handler %"
". If \\var{pred} is a list of strings, they are each matched with the extension of a filename by"
"@flink handler:find-format-handler %"
". If it is a function, the filename is applied to the function and the"
"functions result determines if this is the handler to use.")
(handler:find-named-format-handler
(string? . -> . (string? . -> . (is-a?/c frame:editor<%>)))
(name)
"This function selects a format handler. See also"
"@flink handler:insert-format-handler %"
"."
""
"It finds a handler based on \\var{name}.")
(handler:find-format-handler
(string? . -> . (string? . -> . (is-a?/c frame:editor<%>)))
(filename)
"This function selects a format handler. See also"
"@flink handler:insert-format-handler %"
"."
""
"It finds a handler based on \\var{filename}.")
(handler:edit-file
(opt->
((union string? false?))
((-> (is-a?/c frame:editor<%>)))
(union false? (is-a?/c frame:editor<%>)))
((filename)
((make-default (lambda () ((handler:current-create-new-window) filename)))))
"This function creates a frame or re-uses an existing frame to edit a file. "
""
"If the preference \\scheme{'framework:open-here} is set to \\scheme{#t},"
"and (send ("
"@flink group:get-the-frame-group %"
") "
"@link group: get-open-here-frame %"
") returns a frame, the "
"@ilink frame:open-here open-here "
"method of that frame is used to load"
"the file in the existing frame."
""
"Otherwise, it invokes the appropriate format"
"handler to open the file (see"
"@flink handler:insert-format-handler %"
")."
""
"\\begin{itemize}"
"\\item If \\var{filename} is a string, this function checks the result of"
"@flink group:get-the-frame-group"
"to see if the \\var{filename} is already open by a frame in the"
"group. "
"\\begin{itemize}"
"\\item If so, it returns the frame. "
"\\item If not, this function calls "
"@flink handler:find-format-handler"
"with \\var{filename}. "
"\\begin{itemize}"
"\\item"
"If a handler is found, it is applied to"
"\\var{filename} and it's result is the final result. "
"\\item"
"If not, \\var{make-default} is used."
"\\end{itemize}"
"\\end{itemize}"
"\\item"
"If \\var{filename} is \\rawscm{\\#f}, \\var{make-default} is used."
"\\end{itemize}")
(handler:current-create-new-window
(case->
(((union false? string?) . -> . (is-a?/c frame%)) . -> . void)
(-> ((union false? string?) . -> . (is-a?/c frame%))))
((new-window-handler) ())
"This is a parameter that controls how the framework"
"creates new application windows."
""
"The default setting is this:"
"\\begin{schemedisplay}"
"(lambda (filename)"
" (let ([frame (make-object frame:text-info-file% filename)])"
" (send frame show #t)"
" frame))"
"\\end{schemedisplay}")
(handler:open-file
(-> (union false? (is-a?/c frame:basic<%>)))
()
"This function queries the user for a filename and opens the file for"
"editing. It uses "
"@flink handler:edit-file"
"to open the file, once the user has chosen it."
""
"Calls"
"@flink finder:get-file"
"and"
"@flink handler:edit-file %"
".")
(handler:install-recent-items
((is-a?/c menu%) . -> . void?)
(menu)
"This function deletes all of the items in the given menu and"
"adds one menu item for each recently opened file. These menu"
"items, when selected, call"
"@flink handler:edit-file"
"with the filename of the recently opened file."
""
"The menu's size is limited to 10.")
(handler:set-recent-items-frame-superclass
((implementation?/c frame:standard-menus<%>) . -> . void?)
(frame)
"Sets the superclass for the recently opened files frame."
"It must be derived from"
"@ilink frame:standard-menus %"
".")
(handler:add-to-recent
(string? . -> . void?)
(filename)
"Adds a filename to the list of recently opened files.")
(handler:set-recent-position
(string? number? number? . -> . void?)
(filename start end)
"Sets the selection of the recently opened file to"
"\\var{start} and \\var{end}.")
(handler:size-recently-opened-files
(number? . -> . void?)
(num)
"Sizes the 'framework:recently-opened-files/pos preference"
"list length to \\var{num}.")
(icon:get-paren-highlight-bitmap
(-> (is-a?/c bitmap%))
()
"This returns the parenthesis highlight "
"@link bitmap %"
". It is only used on black and white screens.")
(icon:get-autowrap-bitmap
(-> (is-a?/c bitmap%))
()
"This returns the autowrap's "
"@link bitmap %"
"."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method.")
(icon:get-lock-bitmap
(-> (is-a?/c bitmap%))
()
"This returns the lock's "
"@link bitmap %"
"."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method.")
(icon:get-unlock-bitmap
(-> (is-a?/c bitmap%))
()
"This returns the reset unlocked"
"@link bitmap %"
"."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method."
"")
(icon:get-anchor-bitmap
(-> (is-a?/c bitmap%))
()
"This returns the anchor's "
"@link bitmap %"
"."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method.")
(icon:get-left/right-cursor
(-> (is-a?/c cursor%))
()
"This function returns a "
"@link cursor"
"object that indicates left/right sizing is possible,"
"for use with columns inside a window."
""
"The cursor may not respond \\scm{\\#t} to the"
"@link cursor ok?"
"method.")
(icon:get-up/down-cursor
(-> (is-a?/c cursor%))
()
"This function returns a "
"@link cursor"
"object that indicates up/down sizing is possible,"
"for use with columns inside a window."
""
"The cursor may not respond \\scm{\\#t} to the"
"@link cursor ok?"
"method.")
(icon:get-gc-on-bitmap
(-> (is-a?/c bitmap%))
()
"This returns a bitmap to be displayed in an"
"@ilink frame:info"
"frame when garbage collection is taking place."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method.")
(icon:get-gc-off-bitmap
(-> (is-a?/c bitmap%))
()
"This returns a bitmap to be displayed in an"
"@ilink frame:info"
"frame when garbage collection is {\\em not\\/} taking place."
""
"The bitmap may not respond \\scm{\\#t} to the"
"@link bitmap ok?"
"method.")
(keymap:add-to-right-button-menu
(case->
(((is-a?/c popup-menu%) (is-a?/c editor<%>) (is-a?/c event%) . -> . void?) . -> . void?)
(-> ((is-a?/c popup-menu%) (is-a?/c editor<%>) (is-a?/c event%) . -> . void?)))
((func) ())
"When the keymap that "
"@flink keymap:get-global"
"returns is installed into an editor, this parameter's value"
"is used for right button clicks. "
""
"Before calling this procedure, the "
"function"
"@flink append-editor-operation-menu-items"
"is called."
""
"See also"
"@flink keymap:add-to-right-button-menu/before %"
".")
(keymap:add-to-right-button-menu/before
(case->
(((is-a?/c popup-menu%) (is-a?/c editor<%>) (is-a?/c event%) . -> . void?)
. -> .
void?)
(-> ((is-a?/c popup-menu%) (is-a?/c editor<%>) (is-a?/c event%) . -> . void?)))
((func) ())
"When the keymap that "
"@flink keymap:get-global"
"returns is installed into an editor, this function is called"
"for right button clicks. "
""
"After calling this procedure, the "
"function"
"@flink append-editor-operation-menu-items"
"is called."
""
"See also"
"@flink keymap:add-to-right-button-menu %"
".")
(keymap:call/text-keymap-initializer
((-> any?) . -> . any?)
(thunk-proc)
"Thus function parameterizes the call to \\var{thunk-proc} by"
" setting the keymap-initialization procedure (see"
"%"
"@flink current-text-keymap-initializer %"
"%"
") to install the framework's standard text bindings.")
(keymap:canonicalize-keybinding-string
(string? . -> . string?)
(keybinding-string)
"Returns a string that denotes the same keybindings as the input"
"string, except that it is in canonical form; two canonical keybinding"
"strings can be compared with \\rawscm{string=?}.")
(keymap:get-editor
(-> (is-a?/c keymap%))
()
"This returns a keymap for handling standard editing operations. It"
"binds these keys:"
"\\begin{itemize}"
"\\item {\\bf z}: undo"
"\\item {\\bf y}: redo"
"\\item {\\bf x}: cut"
"\\item {\\bf c}: copy"
"\\item {\\bf v}: paste"
"\\item {\\bf a}: select all"
"\\end{itemize}"
"where each key is prefixed with the menu-shortcut key, based on the"
"platform. Under unix, the shortcut is scm{\"a:\"}; under windows the"
"shortcut key is \\rawscm{\"c:\"} and under MacOS, the shortcut key is"
"\\rawscm{\"d:\"}.")
(keymap:get-file
(-> (is-a?/c keymap%))
()
"This returns a keymap for handling file operations.")
(keymap:get-global
(-> (is-a?/c keymap%))
()
"This returns a keymap for general operations. See"
"@flink keymap:setup-global"
"for a list of the bindings this keymap contains.")
(keymap:get-search
(-> (is-a?/c keymap%))
()
"This returns a keymap for searching operations")
(keymap:make-meta-prefix-list
(string? . -> . (listof string?))
(key)
"This prefixes a key with all of the different meta prefixes and"
"returns a list of the prefixed strings."
""
"takes a keymap, a base key specification, and a function name; it"
"prefixes the base key with all ``meta'' combination prefixes, and"
"installs the new combinations into the keymap. For example,"
"\\rawscm{(\\iscmprocedure{keymap:send-map-function-meta} \\var{keymap} \"a\""
"\\var{func})} maps all of ``m:a'' and ``ESC;a'' to"
"\\var{func}.")
(keymap:send-map-function-meta
((is-a?/c keymap%) string? string? . -> . void?)
(keymap key func)
"\\index{Meta}"
"Most keyboard and mouse mappings are inserted into a keymap by calling"
"the keymap's \\rawscm{map-function} method. However, ``meta'' combinations"
"require special attention. The ``m:'' prefix recognized by"
"\\rawscm{map-function} applies only to the Meta key that exists on"
"some keyboards. By convention, however, ``meta'' combinations can also be"
"accessed by using ``ESC'' as a prefix."
""
"This procedure binds all of the key-bindings obtained by prefixing"
"\\var{key} with a meta-prefix to \\var{func} in \\var{keymap}.")
(keymap:setup-editor
((is-a?/c keymap%) . -> . void?)
(keymap)
"This sets up the input keymap with the bindings described in "
"@flink keymap:get-editor %"
".")
(keymap:setup-file
((is-a?/c keymap%) . -> . void?)
(keymap)
"This extends a "
"@link keymap"
"with the bindings for files.")
(keymap:setup-global
((is-a?/c keymap%) . -> . void?)
(keymap)
"This extends a "
"@link keymap"
"with the general bindings."
""
"This function extends a \\iscmclass{keymap} with the following functions:"
"\\begin{itemize}"
"\\CloseLines"
"\\item \\mapdesc{ring-bell}{any} --- Rings the bell (using \\iscmprocedure{bell}) and"
"removes the search panel from the frame, if there."
"\\item \\mapdesc{save-file}{key} --- Saves the buffer. If the buffer has "
"no name, then \\scmfirst{finder:put-file} is invoked."
"\\item \\mapdesc{save-file-as}{key} --- Calls \\scmfirst{finder:put-file} to save"
"the buffer."
"\\item \\mapdesc{load-file}{key} --- Invokes \\scmfirst{finder:open-file}."
"\\item \\mapdesc{find-string}{key} --- Opens the search buffer at the bottom"
"of the frame, unless it is already open, in which case it searches for the"
"text in the search buffer."
"\\item \\mapdesc{find-string-reverse}{key} --- Same a ``find-string'', but in"
"the reverse direction."
"\\item \\mapdesc{find-string-replace}{key} --- Opens a replace string dialog"
"box. "
"\\item \\mapdesc{toggle-anchor}{key} --- Turns selection-anchoring on or off."
"\\item \\mapdesc{center-view-on-line}{key} --- Centers the buffer in its"
"display using the currently selected line."
"\\item \\mapdesc{collapse-space}{key} --- Collapses all non-return whitespace"
"around the caret into a single space."
"\\item \\mapdesc{remove-space}{key} --- Removes all non-return whitespace"
"around the caret."
"\\item \\mapdesc{collapse-newline}{key} --- Collapses all empty lines"
"around the caret into a single empty line. If there is only"
"one empty line, it is removed."
"\\item \\mapdesc{open-line}{key} --- Inserts a new line."
"\\item \\mapdesc{transpose-chars}{key} --- Transposes the characters before"
"and after the caret and moves forward one position."
"\\item \\mapdesc{transpose-words}{key} --- Transposes words before"
"and after the caret and moves forward one word."
"\\item \\mapdesc{capitalize-word}{key} --- Changes the first character"
"of the next word to a capital letter and moves to the end of the"
"word."
"\\item \\mapdesc{upcase-word}{key} --- Changes all characters"
"of the next word to capital letters and moves to the end of the"
"word."
"\\item \\mapdesc{downcase-word}{key} --- Changes all characters"
"of the next word to lowercase letters and moves to the end of the"
"word."
"\\item \\mapdesc{kill-word}{key} --- Kills the next word."
"\\item \\mapdesc{backward-kill-word}{key} --- Kills the previous word."
"\\item \\mapdesc{goto-line}{any} --- Queries the user for a line number and moves"
"the caret there."
"\\item \\mapdesc{goto-position}{any} --- Queries the user for a position number "
"and moves the caret there."
"\\item \\mapdesc{copy-clipboard}{mouse} --- Copies the current selection to the"
"clipboard."
"\\item \\mapdesc{cut-clipboard}{mouse} --- Cuts the current selection to the"
"clipboard."
"\\item \\mapdesc{paste-clipboard}{mouse} --- Patses the clipboard to the current"
"selection."
"\\item \\mapdesc{copy-click-region}{mouse} --- Copies the region between the"
"caret and the input mouse event."
"\\item \\mapdesc{cut-click-region}{mouse} --- Cuts the region between the"
"caret and the input mouse event."
"\\item \\mapdesc{paste-click-region}{mouse} --- Pastes the clipboard into the"
"position of the input mouse event."
"\\item \\mapdesc{select-click-word}{mouse} --- Selects the word under the"
"input mouse event."
"\\item \\mapdesc{select-click-line}{mouse} --- Selects the line under the"
"input mouse event."
"\\item \\mapdesc{start-macro}{key} -- Starts building a keyboard macro"
"\\item \\mapdesc{end-macro}{key} --- Stops building a keyboard macro"
"\\item \\mapdesc{do-macro}{key} --- Executes the last keyboard macro"
"\\item \\mapdesc{toggle-overwrite}{key} --- Toggles overwriting mode"
"\\end{itemize}"
""
"These functions are bound to the following keys (C = control, S ="
"shift, A = alt, M = ``meta'', D = command):"
"\\begin{itemize}"
"\\CloseLines"
"\\item C-g : ``ring-bell''"
"\\item M-C-g : ``ring-bell''"
"\\item C-c C-g : ``ring-bell''"
"\\item C-x C-g : ``ring-bell''"
"\\item C-p : ``previous-line''"
"\\item S-C-p : ``select-previous-line''"
"\\item C-n : ``next-line''"
"\\item S-C-n : ``select-next-line''"
"\\item C-e : ``end-of-line''"
"\\item S-C-e : ``select-to-end-of-line''"
"\\item D-RIGHT : ``end-of-line''"
"\\item S-D-RIGHT : ``select-to-end-of-line''"
"\\item M-RIGHT : ``end-of-line''"
"\\item S-M-RIGHT : ``select-to-end-of-line''"
"\\item C-a : ``beginning-of-line''"
"\\item S-C-a : ``select-to-beginning-of-line''"
"\\item D-LEFT : ``beginning-of-line''"
"\\item D-S-LEFT : ``select-to-beginning-of-line''"
"\\item M-LEFT : ``beginning-of-line''"
"\\item M-S-LEFT : ``select-to-beginning-of-line''"
"\\item C-h : ``delete-previous-character''"
"\\item C-d : ``delete-next-character''"
"\\item C-f : ``forward-character''"
"\\item S-C-f : ``select-forward-character''"
"\\item C-b : ``backward-character''"
"\\item S-C-b : ``select-backward-character''"
"\\item M-f : ``forward-word''"
"\\item S-M-f : ``select-forward-word''"
"\\item A-RIGHT : ``forward-word''"
"\\item A-S-RIGHT : ``forward-select-word''"
"\\item M-b : ``backward-word''"
"\\item S-M-b : ``select-backward-word''"
"\\item A-LEFT : ``backward-word''"
"\\item A-S-LEFT : ``backward-select-word''"
"\\item M-d : ``kill-word''"
"\\item M-DELETE : ``backward-kill-word''"
"\\item M-c : ``capitalize-word''"
"\\item M-u : ``upcase-word''"
"\\item M-l : ``downcase-word''"
"\\item M-$<$ : ``beginning-of-file''"
"\\item S-M-$<$ : ``select-to-beginning-of-file''"
"\\item M-$>$ : ``end-of-file''"
"\\item S-M-$>$ : ``select-to-end-of-file''"
"\\item C-v : ``next-page''"
"\\item S-C-v : ``select-next-page''"
"\\item M-v : ``previous-page''"
"\\item S-M-v : ``select-previous-page''"
"\\item C-l : ``center-view-on-line''"
"\\item C-k : ``delete-to-end-of-line''"
"\\item C-y : ``paste-clipboard'' (Except Windows)"
"\\item A-v : ``paste-clipboard''"
"\\item D-v : ``paste-clipboard''"
"\\item C-\\_ : ``undo''"
"\\item C-x u : ``undo''"
"\\item C-+ : ``redo''"
"\\item C-w : ``cut-clipboard''"
"\\item M-w : ``copy-clipboard''"
"\\item C-x C-s : ``save-file''"
"\\item C-x C-w : ``save-file-as''"
"\\item C-x C-f : ``load-file''"
"\\item C-s : ``find-string''"
"\\item C-r : ``find-string-reverse''"
"\\item M-\\% : ``find-string-replace''"
"\\item SPACE : ``collapse-space''"
"\\item M-{\\Backslash} : ``remove-space''"
"\\item C-x C-o : ``collapse-newline''"
"\\item C-o : ``open-line''"
"\\item C-t : ``transpose-chars''"
"\\item M-t : ``transpose-words''"
"\\item C-SPACE : ``toggle-anchor''"
"\\item M-g : ``goto-line''"
"\\item M-p : ``goto-position''"
"\\item LEFTBUTTONTRIPLE : ``select-click-line''"
"\\item LEFTBUTTONDOUBLE : ``select-click-word''"
"\\item RIGHTBUTTON : ``copy-click-region''"
"\\item RIGHTBUTTONDOUBLE : ``cut-click-region''"
"\\item MIDDLEBUTTON : ``paste-click-region''"
"\\item C-RIGHTBUTTON : ``copy-clipboard''"
"\\item INSERT : ``toggle-overwrite''"
"\\item M-o : ``toggle-overwrite''"
"\\end{itemize}")
(keymap:setup-search
((is-a?/c keymap%) . -> . void?)
(keymap)
"This extends a "
"@link keymap"
"with the bindings for searching.")
(keymap:set-chained-keymaps
((is-a?/c keymap:aug-keymap<%>)
(listof (is-a?/c keymap%))
. -> .
void?)
(keymap children-keymaps)
"Sets \\var{keymap}'s chained keymaps to \\var{children-keymaps},"
"unchaining any keymaps that are currently chained to \\var{keymap}.")
(keymap:remove-chained-keymap
((is-a?/c editor<%>)
(is-a?/c keymap:aug-keymap<%>)
. -> .
void?)
(editor keymap)
"Removes \\var{keymap} from the keymaps chained to \\var{editor}."
"Also (indirectly) removes all keymaps chained to \\var{keymap} from \\var{editor},"
"since they are removed when unchaining \\var{keymap} itself."
""
"Each of the keymaps chained to \\var{editor} must be an"
"@ilink keymap:aug-keymap"
"and \\var{keymap} cannot be the result of"
"\\begin{schemedisplay}"
"(send editor get-keymap)"
"\\end{schemedisplay}"
"That is, \\var{keymap} must be chained to some keymap attached"
"to the editor.")
(scheme-paren:backward-containing-sexp
(opt->
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?))
((union false? (is-a?/c match-cache:%)))
(union false? (and/c integer? exact?)))
((text start end)
((cache #f)))
"Returns the beginning of the interior of the (non-atomic) S-expression"
"containing \\var{start}.")
(scheme-paren:backward-match
(opt->
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?))
((union false? (is-a?/c match-cache:%)))
(union false? (and/c integer? exact?)))
((text start end)
((cache #f)))
"Specializes "
"@flink paren:backward-match"
"to Scheme.")
(scheme-paren:balanced?
((is-a?/c text%) (and/c integer? exact?) (and/c integer? exact?) . -> . boolean?)
(text start end)
"Specializes "
"@flink paren:balanced?"
"to Scheme.")
(scheme-paren:forward-match
(opt->
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?))
((union false? (is-a?/c match-cache:%)))
(union false? (and/c integer? exact?)))
((text start end)
((cache #f)))
"Specializes"
"@flink paren:forward-match"
"to Scheme.")
(scheme-paren:get-comments
(-> (listof string?))
()
"Returns the comment characters for Scheme.")
(scheme-paren:get-paren-pairs
(-> (listof (cons/p string? string?)))
()
"Returns the paren pairs for Scheme.")
(scheme-paren:get-quote-pairs
(-> (listof (cons/p string? string?)))
()
"Returns the quote pairs for Scheme.")
(scheme:add-preferences-panel
(-> void?)
()
"Adds a tabbing preferences panel to the preferences dialog.")
(scheme:get-keymap
(-> (is-a?/c keymap%))
()
"Returns a keymap with binding suitable for Scheme.")
(editor:set-standard-style-list-pref-callbacks
(-> any)
()
"Installs the font preference callbacks that"
"update the style list returned by"
"@flink editor:get-standard-style-list"
"based on the font preference symbols.")
(editor:get-fixed-faces
(-> (listof string?))
()
"Returns a list of the fixed width fonts available on this system,"
"except on unix, where it returns a list of all of the fonts."
""
"It finds the fixed width fonts by making a dummy canvas object,"
"and computes the width of both `i' and `w'. If they are the same,"
"the font is fixed width and if not, the font is not fixed width."
""
"This is very expensive under X Windows, which is why the function"
"just returns all fonts.")
(editor:get-standard-style-list
(-> (is-a?/c style-list%))
()
"Returns a style list that is used for all instances of \\iscmintf{editor:standard-style-list}.")
(scheme:get-wordbreak-map
(-> (is-a?/c editor-wordbreak-map%))
()
"This method returns a"
"@link editor-wordbreak-map"
"that is suitable for Scheme.")
(scheme:init-wordbreak-map
((is-a?/c keymap%) . -> . void?)
(key)
"Initializes the workdbreak map for \\var{keymap}.")
(scheme:setup-keymap
((is-a?/c keymap%) . -> . void?)
(keymap)
"Initializes \\var{keymap} with Scheme-mode keybindings.")
(paren:backward-match
(opt->
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?)
(listof (cons/p string? string?))
(listof (cons/p string? string?))
(listof string?))
(boolean?
(union false? (is-a?/c match-cache:%)))
(union false? (and/c integer? exact?)))
((text start end parens quotes comments)
((containing? #f) (cache #f)))
"Returns the position in \\var{text} that ``opens'' the text ending at "
"\\var{start}, or \\rawscm{\\#f} if no opening position is found (either because a "
"parenthesis mis-match is discovered or the \\var{end} boundary was"
"reached). The match must occur before \\var{end} (inclusive). Note that"
"\\var{start} $>$ \\var{end}, since \\var{start} specifies the starting position"
"of the search, not the earliest buffer position to be considered."
""
"Spaces immediately preceding \\var{start} are skipped. If the text at"
"\\var{start} is a close parenthesis or close quote, then the matching"
"position is the opening parenthesis or quote. If a comment immediately"
"precedes \\var{start}, then the comment is skipped as whitespace. If an"
"opening parenthesis immediately precedes \\var{start}, then the"
"matching position is \\var{start} - 1. Otherwise, the matching position"
"is the first whitespace or parenthesis character before"
"\\var{start}."
""
"If \\var{containing?} is not \\rawscm{\\#f}, then the matching procedure"
"is modified as follows:"
"\\begin{itemize}"
"\\item Searching iterates backwards until some search fails. Then, the"
" location of the last successful search is returned."
"\\item If a mis-match is detected, then \\rawscm{\\#f} is returned."
"\\item If there are no matches (and no mis-matches) before \\var{start},"
" \\var{start} itself is returned. "
"\\end{itemize}"
""
"If \\var{cache} is not \\rawscm{\\#f}, it must be an instance of "
"\\iscmclass{match-cache:}. A cache"
"object can be used to speed up successive calls to "
"\\iscmprocedure{paren:backward-match}. However, a buffer using a cache"
"must call the cache's"
"@link match-cache: invalidate"
"method when the buffer is"
"modified. Different caches should be used for forward and backward"
"matching. See"
"\\hyperref{the match cache section}{section~}{}{fw:matchcache}"
"for more information.")
(paren:balanced?
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?)
(listof (cons/p string? string?))
(listof (cons/p string? string?))
(listof string?)
. -> .
boolean?)
(text start end parens quotes comments)
"Returns \\rawscm{\\#t} if the text in \\var{text} between positions"
"\\var{start} and \\var{end} is \\defterm{balanced}. The text is balanced"
"if there are no unclosed parenthses or quotes, there are no closing"
"parentheses that do not match an open parenthesis, and there are no"
"mis-matched parentheses."
""
"This uses "
"@flink paren:forward-match %"
".")
(paren:forward-match
(opt->
((is-a?/c text%)
(and/c integer? exact?)
(and/c integer? exact?)
(listof (cons/p string? string?))
(listof (cons/p string? string?))
(listof string?))
((union false? (is-a?/c match-cache:%)))
(union false? (and/c integer? exact?)))
((text start end parens quotes comments)
((cache #f)))
"This function returns the position in \\var{text} that ``closes'' the"
"text at \\var{start}, or \\rawscm{\\#f} if no closing position is found"
"(either because a parenthesis mis-match is discovered or the \\var{end}"
"boundary was reached). The match must occur before \\var{end}"
"(inclusive)."
""
"Spaces immediately following \\var{start} are skipped. If the text at"
"\\var{start} is an open parenthesis or open quote, then the matching"
"position is the closing parenthesis or quote. If a comment immediately"
"follows \\var{start}, it is skipped over as whitespace. If a closing"
"parenthesis immediately follows \\var{start} (after skipping"
"whitespace), then \\rawscm{\\#f} is returned. Otherwise, the matching"
"position is the position before the first whitespace, parenthesis,"
"quote, or comment character after \\var{start}."
""
"If \\var{cache} is not \\rawscm{\\#f}, it must be an instance of "
"\\iscmclass{match-cache:}. "
"\\scmclassindex{match-cache:} A cache"
"object can be used to speed up successive calls to "
"\\rawscm{paren:forwardward-match}. However, a buffer using a cache"
"must call the cache's \\rawscm{forward-invalidate} method when the buffer is"
"modified. Different caches should be used for forward and backward"
"matching. See "
"\\hyperref{the match cache section}{section~}{}{fw:matchcache}"
"for more information."
"")
(paren:skip-whitespace
((is-a?/c text%) (and/c integer? exact?) (symbols 'forward 'backward)
. -> .
(and/c integer? exact?))
(text pos dir)
"If \\var{dir} is \\rawscm{'forward}, this returns the position of the first"
"non-whitespace character in \\var{text} after \\var{pos}. If \\var{dir}"
"is \\rawscm{'backward}, it returns the first non-whitespace character before"
"\\var{pos}.")
(color-model:rgb->xyz
(number? number? number? . -> . color-model:xyz?)
(r g b)
"Converts a color represented as a red-green-blue tuple (each value"
"from 0 to 255) into an XYZ tuple. This describes a point in the"
"CIE XYZ color space.")
(color-model:rgb-color-distance
(number? number? number? number? number? number? . -> . number?)
(red-a green-a blue-a red-b green-b blue-b)
"This calculates a distance between two colors. The smaller the"
"distance, the closer the colors should appear to the human eye. A"
"distance of 10 is reasonably close that it could be called the same"
"color."
""
"This function is not symmetric in red, green, and blue, so it is"
"important to pass red, green, and blue components of the colors in the"
"the proper order. The first three arguments are red, green and blue"
"for the first color, respectively, and the second three arguments are"
"red green and blue for the second color, respectively.")
(color-model:xyz->rgb
(number? number? number? . -> . (list/p number? number? number?))
(x y z)
"Converts an XYZ-tuple (in the CIE XYZ colorspace) into a list of"
"values representing an RGB-tuple.")
(color-model:xyz?
(any? . -> . boolean?)
(val)
"Determines if \\var{val} an xyz color record.")
(color-model:xyz-x
(color-model:xyz? . -> . number?)
(xyz)
"Extracts the x component of \\var{xyz}.")
(color-model:xyz-y
(color-model:xyz? . -> . number?)
(xyz)
"Extracts the y component of \\var{xyz}.")
(color-model:xyz-z
(color-model:xyz? . -> . number?)
(xyz)
"Extracts the z component of \\var{xyz}.")))