(send an-editor add-canvas canvas) → void? canvas : (is-a?/c editor-canvas%)
Normally, this method is called only by set-editor in editor-canvas%.
The system automatically installs undo records to undo built-in editor operations, such as inserts, deletes, and font changes. Install an undoer only when it is necessary to maintain state or handle operations that are not built-in. For example, in a program where the user can assign labels to snips in a pasteboard, the program should install an undoer to revert a label change. Thus, when a user changes a snip’s label and then selects Undo (from a standard menu bar), the snip’s label will revert as expected. In contrast, there is no need to install an undoer when the user moves a snip by dragging it, because the system installs an appropriate undoer automatically.
After an undoer returns, the undoer is popped off the editor’s undo (or redo) stack; if the return value is true, then the next undoer is also executed as part of the same undo (or redo) step. The undoer should return true if the action being undone was originally performed as part of a begin-edit-sequence and end-edit-sequence sequence. The return value should also be true if the undone action was implicitly part of a sequence. To extend the previous example, if a label change is paired with a move to realign the snip, then the label-change undoer should be added to the editor after the call to move, and it should return #t when it is called. As a result, the move will be undone immediately after the label change is undone. (If the opposite order is needed, use begin-edit-sequence and end-edit-sequence to create an explicit sequence.)
The system adds undoers to an editor (in response to other method calls) without calling this method.
(send an-editor adjust-cursor event) → (or/c (is-a?/c cursor%) #f) event : (is-a?/c mouse-event%)
See also set-cursor.
Default implementation: If an overriding cursor has been installed with set-cursor, then the installed cursor is returned.
Otherwise, if the event is a dragging event, a snip in the editor has the focus, and the snip’s adjust-cursor method returns a cursor, that cursor is returned.
Otherwise, if the cursor is over a snip and the snip’s adjust-cursor method returns a cursor, that cursor is returned.
Otherwise, if a cursor has been installed with set-cursor, then the installed cursor is returned.
Otherwise, if the cursor is over a clickback region in an editor, an arrow cursor is returned.
Finally, if none of the above cases apply, a default cursor is returned. For a text editor, the default cursor is an I-beam. For a pasteboard editor, the default cursor is an arrow.
(send an-editor after-edit-sequence) → void?
See also on-edit-sequence.
Default implementation: Does nothing.
(send an-editor after-load-file success?) → void? success? : any/c
See also can-load-file? and on-load-file.
Default implementation: Does nothing.
(send an-editor after-save-file success?) → void? success? : any/c
See also can-save-file? and on-save-file.
Default implementation: Does nothing.
(send an-editor auto-wrap) → boolean? (send an-editor auto-wrap auto-wrap?) → void? auto-wrap? : any/c
When the wrapping mode is changed, the on-display-size method is called immediately to update the editor’s maximum width.
Auto-wrapping is initially disabled.
(send an-editor begin-edit-sequence [ undoable? interrupt-streak?]) → void? undoable? : any/c = #t interrupt-streak? : any/c = #t
When an editor contains other editors, using begin-edit-sequence and end-edit-sequence on the main editor brackets some changes to the sub-editors as well, but it is not as effective when a sub-editor changes as calling begin-edit-sequence and end-edit-sequence for the sub-editor.
See also refresh-delayed? and in-edit-sequence?, and see Editors and Threads for information about edit sequences and refresh requests.
If the undoable? flag is #f, then the changes made in the sequence cannot be reversed through the undo method. This flag is only effective for the outermost begin-edit-sequence when nested sequences are used. Note that, for a text% object, the character-inserting version of insert interferes with sequence-based undo groupings.
If the interrupt-streak? flag is #f and the sequence is outermost, then special actions before and after the sequence count as consecutive actions. For example, kills just before and after the sequence are appended in the copy buffer.
Default implementation: Starts a sequence.
(send an-editor begin-write-header-footer-to-file f name buffer) → void? f : (is-a?/c editor-stream-out%) name : string? buffer : (box/c exact-integer?)
The name string must be a unique name that can be used by a header reader to recognize the data. This method will store a value in buffer that should be passed on to end-write-header-footer-to-file.
(send an-editor blink-caret) → void?
Default implementation: Propagates the request to any snip with the editor-local focus.
(send an-editor can-do-edit-operation? op [ recursive?]) → boolean?
op :
(or/c 'undo 'redo 'clear 'cut 'copy 'paste 'kill 'select-all 'insert-text-box 'insert-pasteboard-box 'insert-image) recursive? : any/c = #t
Default implementation: Allows the operation depending on the selection, whether the editor is locked, etc.
(send an-editor can-load-file? filename format) → boolean? filename : path?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr)
The filename argument is the name the file will be loaded from. See load-file for information about format.
Note that the filename argument cannot be a string; it must be a path value.
Default implementation: Returns #t.
(send an-editor can-save-file? filename format) → boolean? filename : path?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr)
The filename argument is the name the file will be saved to. See load-file for information about format.
Note that the filename argument cannot be a string; it must be a path value.
Default implementation: Returns #t.
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-delete in text% or on-delete in pasteboard% to monitor content deletions changes.
(send an-editor clear-undos) → void?
(send an-editor copy [extend? time]) → void? extend? : any/c = #f time : exact-integer? = 0
The system may execute a copy (in response to other method calls) without calling this method. To extend or re-implement copying, override the do-copy in text% or do-copy in pasteboard% method of an editor.
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
(send an-editor copy-self-to dest) → void? dest : (or/c (is-a?/c text%) (is-a?/c pasteboard%))
Each snip in an-editor is copied and inserted into dest. In addition, an-editor’s filename, maximum undo history setting, keymap, interactive caret threshold, and overwrite-styles-on-load settings are installed into dest. Finally, an-editor’s style list is copied and the copy is installed as the style list for dest.
(send an-editor cut [extend? time]) → void? extend? : any/c = #f time : exact-integer? = 0
The system may execute a cut (in response to other method calls) without calling this method. To extend or re-implement the copying portion of the cut, override the do-copy in text% or do-copy in pasteboard% method of an editor. To monitor deletions in an editor, override on-delete in text% or on-delete in pasteboard%.
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
See also editor-location-to-dc-location.
(send an-editor default-style-name) → string?
(send an-editor do-edit-operation op [ recursive? time]) → void?
op :
(or/c 'undo 'redo 'clear 'cut 'copy 'paste 'kill 'select-all 'insert-text-box 'insert-pasteboard-box 'insert-image) recursive? : any/c = #t time : exact-integer? = 0
'undo —
undoes the last operation 'redo —
undoes the last undo 'clear —
deletes the current selection 'cut —
cuts 'copy —
copies 'paste —
pastes 'kill —
cuts to the end of the current line, or cuts a newline if there is only whitespace between the selection and end of line 'select-all —
selects everything in the editor 'insert-text-box —
inserts a text editor as an item in this editor; see also on-new-box . 'insert-pasteboard-box —
inserts a pasteboard editor as an item in this editor; see also on-new-box . 'insert-image —
gets a filename from the user and inserts the image as an item in this editor; see also on-new-image-snip .
If recursive? is not #f, then the command is passed on to any active snips of this editor (i.e., snips which own the caret).
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
See also dc-location-to-editor-location.
(send an-editor end-edit-sequence) → void?
(send an-editor end-write-header-footer-to-file f buffer-value) → void? f : (is-a?/c editor-stream-out%) buffer-value : exact-integer?
See File Format and write-headers-to-file for more information.
(send an-editor find-first-snip) → (or/c (is-a?/c snip%) #f)
The first snip in a text editor is the one at position 0. The first snip in a pasteboard is the frontmost snip. (See Editor Structure and Terminology for information about snip order in pasteboards.)
(send an-editor find-scroll-line location) → exact-nonnegative-integer? location : real?
For text% objects: Calling this method may force the recalculation of location information, even if the editor currently has delayed refreshing (see refresh-delayed?). The result is only valid when the editor is displayed (see Editor Structure and Terminology).
(send an-editor get-active-canvas) → (or/c (is-a?/c editor-canvas%) #f)
(send an-editor get-admin) → (or/c (is-a?/c editor-admin%) #f)
(send an-editor get-canvas) → (or/c (is-a?/c editor-canvas%) #f)
(send an-editor get-canvases) → (listof (is-a?/c editor-canvas%))
The result is only valid when the editor is displayed (see Editor Structure and Terminology). For text% objects, calling this method may force the recalculation of location information if a maximum width is set for the editor, even if the editor currently has delayed refreshing (see refresh-delayed?).
(send an-editor get-extent w h) → void? w : (or/c (box/c (and/c real? (not/c negative?))) #f) h : (or/c (box/c (and/c real? (not/c negative?))) #f)
The result is only valid when the editor is displayed (see Editor Structure and Terminology). For text% objects, calling this method may force the recalculation of location information if a maximum width is set for the editor, even if the editor currently has delayed refreshing (see refresh-delayed?).
Note that the directory argument cannot be a string; it must be a path value or #f.
Default implementation: Calls the global get-file procedure.
If the editor is displayed in a single canvas, then the canvas’s top-level frame is used as the parent for the file dialog. Otherwise, the file dialog will have no parent.
(send an-editor get-filename [temp]) → (or/c path-string? #f) temp : (box/c (or/c any/c #f)) = (box #f)
The temp box is filled with #t if the filename is temporary or #f otherwise.
(send an-editor get-flattened-text) → string?
(send an-editor get-focus-snip) → (or/c (is-a?/c snip%) #f)
The returned snip might be an editor-snip% object. In that case, the embedded editor might delegate the focus to one of its own snips. However, the get-focus-snip method returns only the editor-snip% object, because it is the focus-owning snip within the immediate editor.
See also set-caret-owner.
(send an-editor get-inactive-caret-threshold) → (or/c 'no-caret 'show-inactive-caret 'show-caret)
See also set-inactive-caret-threshold and Caret Ownership.
(send an-editor get-keymap) → (or/c (is-a?/c keymap%) #f)
(send an-editor get-load-overwrites-styles) → boolean?
See also set-load-overwrites-styles.
(send an-editor get-max-undo-history) → (or/c (integer-in 0 100000) 'forever)
(send an-editor get-max-view-size) →
real? real?
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
If the display is an editor canvas, see also reflow-container.
(send an-editor get-paste-text-only) → boolean?
(send an-editor get-snip-data thesnip) → (or/c (is-a?/c editor-data%) #f) thesnip : (is-a?/c snip%)
Default implementation: Returns #f.
(send an-editor get-snip-location thesnip [ x y bottom-right?]) → boolean? thesnip : (is-a?/c snip%) x : (or/c (box/c real?) #f) = #f y : (or/c (box/c real?) #f) = #f bottom-right? : any/c = #f
The x box is filled with the x-coordinate of the snip’s location, unless x is #f. The y box is filled with the y-coordinate of the snip’s location, unless y is #f.
If bottom-right? is not #f, the values in the x and y boxes are for the snip’s bottom right corner instead of its top-left corner.
Obtaining the location if the bottom-right corner may trigger delayed size calculations (including snips other than the one whose location was requested).
The result is only valid when the editor is displayed (see Editor Structure and Terminology). As a special case, however, a pasteboard% object always reports valid answers when bottom-right? is #f. For text% objects, calling this method may force the recalculation of location information if a maximum width is set for the editor, even if the editor currently has delayed refreshing (see refresh-delayed?).
The result is only valid when the editor is displayed (see Editor Structure and Terminology). For text% objects, calling this method may force the recalculation of location information if a maximum width is set for the editor, even if the editor currently has delayed refreshing (see refresh-delayed?).
(send an-editor get-style-list) → (is-a?/c style-list%)
(send an-editor get-view-size w h) → void? w : (or/c (box/c (and/c real? (not/c negative?))) #f) h : (or/c (box/c (and/c real? (not/c negative?))) #f)
The w box is filled with the visible area width, unless w is #f. The h box is filled with the visible area height, unless h is #f.
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
If the display is an editor canvas, see also reflow-container.
(send an-editor global-to-local x y) → void? x : (or/c (box/c real?) #f) y : (or/c (box/c real?) #f)
The x box is filled with the translated x-coordinate of the value initially in x, unless x is #f. The y box is filled with the translated x-coordinate of the value initially in y, unless y is #f.
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
See also local-to-global.
(send an-editor in-edit-sequence?) → boolean?
See also refresh-delayed?.
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-insert in text% or on-insert in pasteboard% to monitor content additions changes.
(send an-editor insert-box [type]) → void? type : (or/c 'text 'pasteboard) = 'text
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-insert in text% or on-insert in pasteboard% to monitor content additions changes.
(send an-editor insert-file filename [ format show-errors?]) → boolean? filename : path-string?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr) = 'guess show-errors? : any/c = #t
For information on format, see load-file. The show-errors? argument is no longer used.
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-insert in text% or on-insert in pasteboard% to monitor content additions changes.
(send an-editor insert-image [ filename type relative-path? inline?]) → void? filename : (or/c path-string? #f) = #f
type :
(or/c 'unknown 'unknown/mask 'unknown/alpha 'gif 'gif/mask 'gif/alpha 'jpeg 'png 'png/mask 'png/alpha 'xbm 'xpm 'bmp 'pict) = 'unknown/alpha relative-path? : any/c = #f inline? : any/c = #t
If filename is #f, then the user is queried for a filename. The kind must one of the symbols that can be passed to load-file.
After the filename has been determined, an image is created by calling on-new-image-snip. See also image-snip%.
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-insert in text% or on-insert in pasteboard% to monitor content additions changes.
(send an-editor insert-port port [ format replace-styles?]) → (or/c 'standard 'text 'text-force-cr) port : input-port?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr) = 'guess replace-styles? : any/c = #t
The port must support position setting with file-position.
For information on format, see load-file.
if replace-styles? is true, then styles in the current style list are replaced by style specifications in port’s stream.
See also insert-file.
(send an-editor invalidate-bitmap-cache [ x y width height]) → void? x : real? = 0.0 y : real? = 0.0
width : (or/c (and/c real? (not/c negative?)) 'end 'display-end) = 'end
height : (or/c (and/c real? (not/c negative?)) 'end 'display-end) = 'end
The x, y, width, and height arguments specify the area that needs repainting in editor coordinates. If width/height is 'end, then the total height/width of the editor (as reported by get-extent) is used. Note that the editor’s size can be smaller than the visible region of its display. If width/height is 'display-end, then the largest height/width of the editor’s views (as reported by get-max-view) is used. If width/height is not 'display-end, then the given width/height is constrained to the editor’s size.
The default implementation triggers a redraw of the editor, either immediately or at the end of the current edit sequence (if any) started by begin-edit-sequence.
See also size-cache-invalid.
(send an-editor is-locked?) → boolean?
(send an-editor is-modified?) → boolean?
(send an-editor is-printing?) → boolean?
(send an-editor kill [time]) → void? time : exact-integer? = 0
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
See also cut.
The content of an editor can be changed by the system in response to other method calls, and such changes do not go through this method; use on-delete in text% or on-delete in pasteboard% to monitor content deletions changes.
(send an-editor load-file [ filename format show-errors?]) → boolean? filename : (or/c path-string? #f) = #f
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr) = 'guess show-errors? : any/c = #t
Loads a file into the editor and returns #t. If an error occurs, an exception is raised.
If filename is #f, then the internally stored filename will be used; if filename is "" or if the internal name is unset or temporary, then the user will be prompted for a name.
The possible values for format are listed below. A single set of format values are used for loading and saving files:
'guess —
guess the format based on extension and/or contents; when saving a file, this is the same as 'standard 'same —
read in whatever format was last loaded or saved 'standard —
read/write a standard file (binary format) 'copy —
write using whatever format was last loaded or saved, but do not change the modification flag or remember filename (saving only) 'text —
read/write a text file (text% only); file writing uses the platform’s text-mode conventions (e.g., newlines as return–linefeed combinations on Windows) when not specifically disabled via use-file-text-mode 'text-force-cr —
read/write a text file (text% only); when writing, change automatic newlines (from word-wrapping) into real carriage returns
In a text% instance, the format returned from get-file-format is always one of 'standard, 'text, or 'text-force-cr.
The show-errors? argument is no longer used.
The filename used to load the file can be retrieved with get-filename. For a text% instance, the format can be retrieved with get-file-format. However, if an error occurs while loading the file, the filename is set to #f.
See also on-load-file, after-load-file, can-load-file?, and set-load-overwrites-styles.
(send an-editor local-to-global x y) → void? x : (or/c (box/c real?) #f) y : (or/c (box/c real?) #f)
The x box is filled with the translated x-coordinate of the value initially in x, unless x is #f. The y box is filled with the translated x-coordinate of the value initially in y, unless y is #f.
The result is only valid when the editor is displayed (see Editor Structure and Terminology).
See also global-to-local.
(send an-editor locations-computed?) → boolean?
Location information is often computed on demand, and begin-edit-sequence tends to delay the computation.
When the editor is locked for reflowing, location information cannot be recomputed. See also Internal Editor Locks.
See also is-locked?.
This method does not affect internal locks, as discussed in Internal Editor Locks.
(send an-editor locked-for-flow?) → boolean?
(send an-editor locked-for-read?) → boolean?
(send an-editor locked-for-write?) → boolean?
(send an-editor needs-update snip localx localy w h) → void? snip : (is-a?/c snip%) localx : real? localy : real? w : (and/c real? (not/c negative?)) h : (and/c real? (not/c negative?))
The localx, localy, width, and height arguments specify the area that needs repainting in the coordinate system of snip.
For text% objects, calling this method may force the recalculation of location information if a maximum width is set for the editor, even if the editor currently has delayed refreshing (see refresh-delayed?).
(send an-editor num-scroll-lines) → exact-nonnegative-integer?
For text% objects: Calling this method may force the recalculation of location information, even if the editor currently has delayed refreshing (see refresh-delayed?). If the editor is not displayed and the editor has a maximum width, line breaks are calculated as for line-start-position (which handles specially the case of no display when the editor has a maximum width).
The editor is locked for writing and reflowing during the call to on-change.
Default implementation: Does nothing.
(send an-editor on-char event) → void? event : (is-a?/c key-event%)
Consider overriding on-local-char or on-default-char instead of this method.
Default implementation: Either passes this event on to a caret-owning snip or calls on-local-char. In the latter case, text% first calls hide-cursor-until-moved.
(send an-editor on-default-char event) → void? event : (is-a?/c key-event%)
Default implementation: Does nothing.
(send an-editor on-default-event event) → void? event : (is-a?/c mouse-event%)
Default implementation: Does nothing. See also on-default-event in text% and on-default-event in pasteboard%.
(send an-editor on-display-size) → void?
Default implementation: If automatic wrapping is enabled (see auto-wrap ) then set-max-width is called with the maximum width of all of the editor’s canvases (according to the administrators; call-as-primary-owner in editor-canvas% is used with each canvas to set the administrator and get the view size). If the editor is displayed but not in a canvas, the unique width is obtained from the editor’s administrator (there is only one). If the editor is not displayed, the editor’s maximum width is not changed.
(send an-editor on-display-size-when-ready) → void?
(send an-editor on-edit-sequence) → void?
During an edit sequence, all callbacks methods are invoked normally, but it may be appropriate for these callbacks to delay computation during an edit sequence. The callbacks must manage this delay manually. Thus, when overriding other callback methods, such as on-insert in text%, on-insert in pasteboard%, after-insert in text%, or after-insert in pasteboard%, consider overriding on-edit-sequence and after-edit-sequence as well.
“Top-level edit sequence” refers to an outermost pair of begin-edit-sequence and end-edit-sequence calls. The embedding of an editor within another editor does not affect the timing of calls to on-edit-sequence, even if the embedding editor is in an edit sequence.
Pairings of on-edit-sequence and after-edit-sequence can be nested if an after-edit-sequence starts a new edit sequence, since after-edit-sequence is called after an edit sequence ends. However, on-edit-sequence can never start a new top-level edit sequence (except through an unpaired end-edit-sequence), because it is called after a top-level edit sequence starts.
Default implementation: Does nothing.
(send an-editor on-event event) → void? event : (is-a?/c mouse-event%)
Consider overriding on-local-event or on-default-event instead of this method.
Default implementation: Either passes this event on to a caret-owning snip, selects a new caret-owning snip (text% only) and passes the event on to the selected snip, or calls on-local-event. A new caret-owning snip is selected in a text% object when the click is on an event-handling snip, and not too close to the space between snips (see get-between-threshold ).
(send an-editor on-load-file filename format) → void? filename : path?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr)
The filename argument is the name the file will be loaded from. See load-file for information about format.
Note that the filename argument cannot be a string; it must be a path value.
Default implementation: Does nothing.
(send an-editor on-local-char event) → void? event : (is-a?/c key-event%)
Consider overriding on-default-char instead of this method.
Default implementation: Either lets the keymap handle the event or calls on-default-char.
(send an-editor on-local-event event) → void? event : (is-a?/c mouse-event%)
Consider overriding on-default-event instead of this method.
Default implementation: Either lets the keymap handle the event or calls on-default-event.
(send an-editor on-new-box type) → (is-a?/c snip%) type : (or/c 'text 'pasteboard)
Default implementation: Creates a editor-snip% with either a sub-editor from text% or sub-pasteboard from pasteboard%, depending on whether type is 'text or 'pasteboard. The keymap (see keymap%) and style list (see style-list%) for of the new sub-editor are set to the keymap and style list of this editor.
(send an-editor on-new-image-snip filename kind relative-path? inline?) → (is-a?/c image-snip%) filename : path?
kind :
(or/c 'unknown 'unknown/mask 'unknown/alpha 'gif 'gif/mask 'gif/alpha 'jpeg 'png 'png/mask 'png/alpha 'xbm 'xpm 'bmp 'pict) relative-path? : any/c inline? : any/c
Note that the filename argument cannot be a string; it must be a path value.
Default implementation: Returns (make-object image-snip% filename kind relative-path? inline?).
(send an-editor on-paint before? dc left top right bottom dx dy draw-caret) → void? before? : any/c dc : (is-a?/c dc<%>) left : real? top : real? right : real? bottom : real? dx : real? dy : real?
draw-caret :
(or/c 'no-caret 'show-inactive-caret 'show-caret (cons/c exact-nonnegative-integer? exact-nonnegative-integer?))
The before? argument is #t when the method is called just before a painting the contents of the editor or #f when it is called after painting. The left, top, right, and bottom arguments specify which region of the editor is being repainted, in editor coordinates. To get the coordinates for dc, offset editor coordinates by adding (dx, dy). See Caret Ownership for information about draw-caret.
The on-paint method, together with the snips’ draw methods, must be able to draw the entire state of an editor. Never paint directly into an editor’s display canvas except from within on-paint or draw. Instead, put all extra drawing code within on-paint and call invalidate-bitmap-cache when part of the display needs to be repainted.
If an on-paint method uses cached location information, then the cached information should be recomputed in response to a call of invalidate-bitmap-cache.
The on-paint method must not make any assumptions about the state of the drawing context (e.g., the current pen), except that the clipping region is already set to something appropriate. Before on-paint returns, it must restore any drawing context settings that it changes.
The editor is internally locked for writing and reflowing during a call to this method (see also Internal Editor Locks).
See also invalidate-bitmap-cache.
Default implementation: Does nothing.
(send an-editor on-save-file filename format) → void? filename : path?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr)
The filename argument is the name the file will be saved to. See load-file for information about format.
Note that the filename argument cannot be a string; it must be a path value.
Default implementation: Does nothing.
See also set-modified.
Default implementation: If modified? is true and the editor was not already modified (i.e., its is-modified? method reports #f), then the set-modified method is called with #t. If the editor was already modified, then the internal modify-counter is incremented.
If modified? is #f, and if the modify-counter is 1, then the set-modified method is called with #f (on the assumption that the modify-counter was set to 1 by an earlier call to this method for the same snip).
The focus state of an editor can be changed by by the system, and such changes do not go through this method; use on-focus to monitor focus changes.
Default implementation: Propagates the flag to any snip with the editor-local focus. If no sub-editors are active, the editor assumes the caret ownership.
(send an-editor paste [time]) → void? time : exact-integer? = 0
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
The system may execute a paste (in response to other method calls) without calling this method. To extend or re-implement copying, override the do-paste in text% or do-paste in pasteboard% method.
See also get-paste-text-only.
(send an-editor paste-x-selection [time]) → void? time : exact-integer? = 0
See Cut and Paste Time Stamps for a discussion of the time argument. If time is outside the platform-specific range of times, an exn:fail:contract exception is raised.
To extend or re-implement copying, override the do-paste-x-selection in text% or do-paste-x-selection in pasteboard% method.
(send an-editor print [ interactive? fit-on-page? output-mode parent force-ps-page-bbox? as-eps?]) → void? interactive? : any/c = #t fit-on-page? : any/c = #t output-mode : (or/c 'standard 'postscript 'pdf) = 'standard
parent : (or/c (or/c (is-a?/c frame%) (is-a?/c dialog%)) #f) = #f force-ps-page-bbox? : any/c = #t as-eps? : any/c = #f
If interactive? is true and a PostScript file is created, the is given a dialog for adjusting printing parameters; see also get-ps-setup-from-user. Otherwise, if a PostScript file is created, the settings returned by current-ps-setup are used. (The user may still get a dialog to select an output file name; see post-script-dc% for more details.)
If fit-on-page? is a true value, then during printing for a text% editor, the editor’s maximum width is set to the width of the page (less margins) and the autowrapping bitmap is removed.
The output-mode setting determines whether the output is generated directly as a PostScript file, generated directly as a PDF file, or generated using the platform-specific standard printing mechanism. The possible values are
'standard —
print using the platform-standard mechanism (via a printer-dc%) 'postscript —
print to a PostScript file (via a post-script-dc%) 'pdf —
print to a PDF file (via a pdf-dc%)
If parent is not #f, it is used as the parent window for configuration dialogs (for either PostScript or platform-standard printing). If parent is #f and if the editor is displayed in a single canvas, then the canvas’s top-level frame is used as the parent for configuration dialogs. Otherwise, configuration dialogs will have no parent.
The force-ps-page-bbox? argument is used for PostScript and PDF printing, and is used as the third initialization argument when creating the post-script-dc% or pdf-dc% instance. Unless it is #f, the bounding-box of the resulting PostScript/PDF file is set to the current paper size.
The as-eps? argument is used for PostScript and PDF printing, and is used as the fourth initialization argument when creating the post-script-dc% or pdf-dc% instance. Unless it is #f, a resulting PostScript file is identified as Encapsulated PostScript (EPS).
The printing margins are determined by get-editor-margin in the current ps-setup% object (as determined by current-ps-setup), but they are ignored when as-eps? is true.
(send an-editor print-to-dc dc [page-number]) → void? dc : (is-a?/c dc<%>) page-number : exact-integer? = -1
If page-number is a positive integer, then just the indicated page is printed, where pages are numbered from 1. If page-number is 0, then the entire content of the editor is printed on a single page. When page-number is negative, then the editor content is split across pages as needed to fit, and the start-page and end-page methods of dc<%> are called for each page.
(send an-editor put-file directory default-name) → (or/c path-string? #f) directory : (or/c path? #f) default-name : (or/c path? #f)
Note that the directory and filename arguments cannot be strings; each must be a path value.
Default implementation: Calls the global put-file procedure.
If the editor is displayed in a single canvas, then the canvas’s top-level frame is used as the parent for the file dialog. Otherwise, the file dialog will have no parent.
(send an-editor read-footer-from-file stream name) → boolean? stream : (is-a?/c editor-stream-in%) name : string?
(send an-editor read-from-file stream [ overwrite-styles?]) → boolean? stream : (is-a?/c editor-stream-in%) overwrite-styles? : any/c = #f
The stream provides either new mappings for names in the editor’s style list, or it indicates that the editor should share a previously-read style list (depending on how style lists were shared when the editor was written to the stream; see also write-to-file).
In the former case, if the overwrite-styles? argument is #f, then each style name in the loaded file that is already in the current style list keeps its current style. Otherwise, existing named styles are overwritten with specifications from the loaded file.
In the latter case, the editor’s style list will be changed to the previously-read list.
(send an-editor read-header-from-file stream name) → boolean? stream : (is-a?/c editor-stream-in%) name : string?
Override this method only to embellish the file format with new header information. Always call the inherited method if the derived reader does not recognize the header.
See also File Format.
The system may perform a redo without calling this method in response to other method calls. Use methods such as on-change to monitor editor content changes.
See also add-undo.
(send an-editor refresh x y width height draw-caret background) → void? x : real? y : real? width : (and/c real? (not/c negative?)) height : (and/c real? (not/c negative?))
draw-caret :
(or/c 'no-caret 'show-inactive-caret 'show-caret (cons/c exact-nonnegative-integer? exact-nonnegative-integer?)) background : (or/c (is-a?/c color%) #f)
See Caret Ownership for information about draw-caret.
The background color corresponds to the background of the display; if it is #f, then the display is transparent. An editor should use the given background color as its own background (or not paint the background of background is #f).
See Editors and Threads for information about edit sequences and refresh requests.
(send an-editor refresh-delayed?) → boolean?
See also in-edit-sequence?.
(send an-editor release-snip snip) → boolean? snip : (is-a?/c snip%)
See also release-snip in snip-admin% .
(send an-editor remove-canvas canvas) → void? canvas : (is-a?/c editor-canvas%)
Normally, this method is called only by set-editor in editor-canvas%.
If redraw-now? is #f, the editor will require another message to repaint itself. (See also needs-update.)
(send an-editor save-file [ filename format show-errors?]) → boolean? filename : (or/c path-string? #f) = #f
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr) = 'same show-errors? : any/c = #t
If filename is #f, then the internally stored filename will be used; if filename is "" or if the internal name is unset or temporary, then the user will be prompted for a name. The possible values for format are described at load-file.
The filename and format used to save the file can be retrieved with get-filename. In a text% instance, the format can be retrieved with get-file-format.
See also on-save-file, after-save-file, and can-save-file?.
On Mac OS X, the file’s type signature is set to "TEXT" for a text-format file or "WXME" for a standard-format (binary) file.
The show-errors? argument is no longer used.
(send an-editor save-port port [ format show-errors?]) → boolean? port : output-port?
format :
(or/c 'guess 'same 'copy 'standard 'text 'text-force-cr) = 'same show-errors? : any/c = #t
The possible values for format are described at load-file.
The show-errors? argument is no longer used.
(send an-editor scroll-editor-to localx localy width height refresh? bias) → boolean? localx : real? localy : real? width : (and/c real? (not/c negative?)) height : (and/c real? (not/c negative?)) refresh? : any/c bias : (or/c 'start 'end 'none)
This method is normally called indirectly by scroll-to or scroll-to-position in text% to implement scrolling.
The default implementation forwards the request to the scroll-to method of the current administrator, if any (see get-admin). If a text editor has padding (see set-padding), then the padding is added to the given location before forwarding to the administrator. If the editor has no administrator, #f is returned.
(send an-editor scroll-line-location pos) → (and/c real? (not/c negative?)) pos : exact-nonnegative-integer?
For text% objects: Calling this method may force the recalculation of location information, even if the editor currently has delayed refreshing (see refresh-delayed?). If the editor is not displayed and the editor has a maximum width, line breaks are calculated as for line-start-position (which handles specially the case of no display when the editor has a maximum width).
(send an-editor scroll-to snip localx localy width height refresh? [ bias]) → boolean? snip : (is-a?/c snip%) localx : real? localy : real? width : (and/c real? (not/c negative?)) height : (and/c real? (not/c negative?)) refresh? : any/c bias : (or/c 'start 'end 'none) = 'none
If refreshing is delayed (see refresh-delayed?), then the scroll request is saved until the delay has ended. The scroll is performed (immediately or later) by calling scroll-editor-to.
The localx, localy, width, and height arguments specify the area that needs to be visible in snip’s coordinate system.
When the specified region cannot fit in the visible area, bias indicates which end of the region to display. When bias is 'start, then the top-left of the region is displayed. When bias is 'end, then the bottom-right of the region is displayed. Otherwise, bias must be 'none.
(send an-editor select-all) → void?
(send an-editor set-active-canvas canvas) → void? canvas : (is-a?/c editor-canvas%)
Normally, this method is called only by on-focus in editor-canvas% in an editor canvas that is displaying an editor.
The administrator of an editor can be changed by by the system, and such changes do not go through this method. A program cannot detect when the administrator changes except by polling get-admin.
(send an-editor set-caret-owner snip [ domain]) → void? snip : (or/c (is-a?/c snip%) #f) domain : (or/c 'immediate 'display 'global) = 'immediate
If the keyboard focus is moved to snip and the editor has the real keyboard focus, the own-caret method of the snip will be called.
If #f is provided as the new owner, then the local focus is moved to the editor itself. Otherwise, the local focus is moved to the specified snip.
The domain of focus-setting is one of:
'immediate —
only set the focus owner within the editor 'display —
make this editor or the new focus owner get the keyboard focus among the editors in this editor’s display (if this is an embedded editor) 'global —
make this editor or the new focus owner get the keyboard focus among all elements in the editor’s frame
The focus state of an editor can be changed by by the system, and such changes do not go through this method; use on-focus to monitor focus changes.
See also get-focus-snip.
(send an-editor set-cursor cursor [ override?]) → void? cursor : (or/c (is-a?/c cursor%) #f) override? : any/c = #t
If the custom cursor is #f, the current cursor is removed, and a cursor is selected automatically by the editor (depending on whether the cursor is pointing at a clickback). See adjust-cursor for more information about the default selection.
An embedding editor’s custom cursor can override the cursor of an
embedded editor—
(send an-editor set-filename filename [ temporary?]) → void? filename : (or/c path-string? #f) temporary? : any/c = #f
This method is also called when the filename changes through any method (such as load-file).
(send an-editor set-inactive-caret-threshold threshold) → void? threshold : (or/c 'no-caret 'show-inactive-caret 'show-caret)
(send an-editor set-load-overwrites-styles overwrite?) → void? overwrite? : any/c
See also get-load-overwrites-styles and read-from-file.
Setting the height is disallowed when the editor is internally locked for reflowing (see also Internal Editor Locks).
(send an-editor set-max-undo-history count) → void? count : (or/c exact-nonnegative-integer? 'forever)
Setting the width is disallowed when the editor is internally locked for reflowing (see also Internal Editor Locks).
Setting the height is disallowed when the editor is internally locked for reflowing (see also Internal Editor Locks).
Setting the width is disallowed when the editor is internally locked for reflowing (see also Internal Editor Locks).
(send an-editor set-modified modified?) → void? modified? : any/c
See also is-modified? and on-snip-modified.
When modified? is true, then an internal modify-counter is set to 1.
When modified? is #f and the editor’s undo or redo stack contains a system-created undoer that resets the modified state (because the preceding undo or redo action puts the editor back to a state where the modification state was #f), the undoer is disabled.
Regardless of the value of modified?, the editor’s adminstrator’s modified method is called.
Finally, if modified? is #f and the internal modify-counter is set to 0, then the set-unmodified method is called on every snip within the editor.
(send an-editor set-paste-text-only text-only?) → void? text-only? : any/c
See also get-paste-text-only.
(send an-editor set-snip-data thesnip data) → void? thesnip : (is-a?/c snip%) data : (is-a?/c editor-data%)
(send an-editor set-style-list style-list) → void? style-list : (is-a?/c style-list%)
Setting the style list is disallowed when the editor is internally locked for reflowing (see also Internal Editor Locks).
(send an-editor size-cache-invalid) → void?
The default implementation eventually propagates the message to snips, and, more generally, causes location information to be recalculated on demand.
See also invalidate-bitmap-cache.
See notify-on-change in style-list% for more information.
If the editor is currently performing an undo or redo, the method call is ignored.
The user may enable Emacs-style undo for editors; see Preferences. Normally, undo operations add to the redo stack (see redo), and any undoable (non-undo) operation clears the redo stack. With Emacs-style undo, the redo stack is added back to the undo stack, along with the original undos, so that a complete history is kept in the undo stack.
The system may perform an undo without calling this method in response to other method calls. Use methods such as on-change to monitor editor content changes.
See also add-undo .
(send an-editor use-file-text-mode) → boolean? (send an-editor use-file-text-mode on?) → void? on? : any/c
The setting is consulted by save-file after on-save-file is called.
Overriding this method is a reliable way to detect changes to the internal boolean.
(send an-editor write-footers-to-file stream) → boolean? stream : (is-a?/c editor-stream-out%)
(send an-editor write-headers-to-file stream) → boolean? stream : (is-a?/c editor-stream-out%)
To write a header item, call begin-write-header-footer-to-file, passing a box for an integer. Then write the header data and end by calling end-write-header-footer-to-file, passing back the integer that was put into the box. Follow this procedure correctly or the file will be corrupted.
Default implementation: Does nothing.
(send an-editor write-to-file stream) → boolean? stream : (is-a?/c editor-stream-out%)