389 lines
9.9 KiB
Racket
389 lines
9.9 KiB
Racket
#lang scribble/doc
|
|
@(require "common.ss")
|
|
|
|
@defclass/title[snip-admin% object% ()]{
|
|
|
|
See @|admindiscuss| for information about the role of administrators.
|
|
The @scheme[snip-admin%] class is never instantiated directly. It
|
|
is not even instantiated through derived classes by most programmers;
|
|
each @scheme[text%] or @scheme[pasteboard%] object
|
|
creates its own administrator. However, it may be useful to derive a
|
|
new instance of this class to display snips in a new context. Also,
|
|
it may be useful to call the methods of an existing administrator
|
|
from an owned snip.
|
|
|
|
To create a new @scheme[snip-admin%] class, all methods described here
|
|
must be overridden. They are all invoked by the administrator's snip.
|
|
|
|
Because a @scheme[snip-admin%] object typically owns more than one
|
|
snip, many methods require a @scheme[snip%] object as an argument.
|
|
|
|
|
|
|
|
@defconstructor[()]{
|
|
|
|
Creates a (useless) editor administrator.
|
|
|
|
}
|
|
|
|
@defmethod[(get-dc)
|
|
(or/c (is-a?/c dc<%>) false/c)]{
|
|
|
|
Gets a drawing context suitable for determining display size
|
|
information. If the snip is not displayed, @scheme[#f] is returned.
|
|
|
|
}
|
|
|
|
@defmethod[(get-editor)
|
|
(or/c (is-a?/c text%) (is-a?/c pasteboard%))]{
|
|
|
|
Returns the editor that this administrator reports to (directly or
|
|
indirectly).
|
|
|
|
}
|
|
|
|
@defmethod[(get-view [x (or/c (box/c real?) false/c)]
|
|
[y (or/c (box/c real?) false/c)]
|
|
[w (or/c (box/c (and/c real? (not/c negative?))) false/c)]
|
|
[h (or/c (box/c (and/c real? (not/c negative?))) false/c)]
|
|
[snip (or/c (is-a?/c snip%) false/c) #f])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Gets the @techlink{location} and size of the visible region of a snip in snip
|
|
coordinates. The result is undefined if the given snip is not managed
|
|
by this administrator.
|
|
|
|
If @scheme[snip] is not @scheme[#f], the current visible region of the
|
|
snip is installed in the boxes @scheme[x], @scheme[y], @scheme[w],
|
|
and @scheme[h]. The @scheme[x] and @scheme[y] values are relative to
|
|
the snip's top-left corner. The @scheme[w] and @scheme[h] values may
|
|
be larger than the snip itself.
|
|
|
|
If @scheme[snip] is @scheme[#f], the total visible region of the
|
|
snip's top-level @techlink{display} is returned in editor
|
|
coordinates. Using @scheme[#f] for @scheme[snip] is analogous to
|
|
using @scheme[#t] for @scheme[full?] in @xmethod[editor-admin%
|
|
get-view].
|
|
|
|
If no snip is specified, then the @techlink{location} and size of the snip's
|
|
editor are returned, instead, in editor coordinates.
|
|
|
|
See also @xmethod[editor-admin% get-view].
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Fills all boxes with @scheme[0.0].
|
|
|
|
}}
|
|
|
|
@defmethod[(get-view-size [h (or/c (box/c (and/c real? (not/c negative?))) false/c)]
|
|
[w (or/c (box/c (and/c real? (not/c negative?))) false/c)])
|
|
void?]{
|
|
|
|
@methspec{
|
|
|
|
Gets the visible size of the administrator's @techlink{display} region.
|
|
|
|
If the @techlink{display} is an editor canvas, see also
|
|
@method[area-container<%> reflow-container].
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Fills all boxes with @scheme[0.0].
|
|
|
|
}
|
|
}
|
|
|
|
@defmethod[(modified [snip (is-a?/c snip%)]
|
|
[modified? any/c])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Called by a snip to report that its modification state has changed to
|
|
either modified or unmodified.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
@defmethod[(needs-update [snip (is-a?/c snip%)]
|
|
[localx real?]
|
|
[localy real?]
|
|
[w (and/c real? (not/c negative?))]
|
|
[h (and/c real? (not/c negative?))])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Called by the snip to request that the snip's display needs to be
|
|
updated. The administrator determines when to actually update the
|
|
snip; the snip's @method[snip% draw] method is eventually called.
|
|
|
|
The @scheme[localx], @scheme[localy], @scheme[w], and @scheme[h]
|
|
arguments specify a region of the snip to be refreshed (in snip
|
|
coordinates).
|
|
|
|
No update occurs if the given snip is not managed by this
|
|
administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
@defmethod[(popup-menu [menu (is-a?/c popup-menu%)]
|
|
[snip (is-a?/c snip%)]
|
|
[x real?]
|
|
[y real?])
|
|
boolean?]{
|
|
@methspec{
|
|
|
|
Opens a popup menu in the @techlink{display} for this snip's editor. The result
|
|
is @scheme[#t] if the popup succeeds, @scheme[#f] otherwise (independent
|
|
of whether the user selects an item in the popup menu).
|
|
|
|
The menu is placed at @scheme[x] and @scheme[y] in @scheme[snip]
|
|
coordinates.
|
|
|
|
While the menu is popped up, its target is set to the top-level editor
|
|
in the @techlink{display} for this snip's editor. See
|
|
@method[popup-menu% get-popup-target] for more information.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Returns @scheme[#f].
|
|
|
|
}}
|
|
|
|
@defmethod[(recounted [snip (is-a?/c snip%)]
|
|
[refresh? any/c])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Called by a snip to notify the administrator that the specified snip
|
|
has changed its @techlink{count}. The snip generally needs to be updated after
|
|
changing its @techlink{count}, but the snip decides whether the update should
|
|
occur immediately.
|
|
|
|
If @scheme[refresh?] is not @scheme[#f], then the snip is requesting
|
|
to be updated immediately. Otherwise, @method[snip-admin%
|
|
needs-update] must eventually be called as well.
|
|
|
|
The method call is ignored if the given snip is not managed by this
|
|
administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
@defmethod[(release-snip [snip (is-a?/c snip%)])
|
|
boolean?]{
|
|
|
|
@methspec{
|
|
|
|
Requests that the specified snip be released. If this administrator is
|
|
not the snip's owner or if the snip cannot be released, then
|
|
@scheme[#f] is returned. Otherwise, @scheme[#t] is returned and the
|
|
snip is no longer owned.
|
|
|
|
See also @xmethod[editor<%> release-snip] .
|
|
|
|
The result is @scheme[#f] if the given snip is not managed by this
|
|
administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Returns @scheme[#f].
|
|
|
|
}}
|
|
|
|
|
|
@defmethod[(resized [snip (is-a?/c snip%)]
|
|
[refresh? any/c])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Called by a snip to notify the administrator that the specified snip
|
|
has changed its display size. The snip generally needs to be updated
|
|
after a resize, but the snip decides whether the update should occur
|
|
immediately.
|
|
|
|
If @scheme[refresh?] is not @scheme[#f], then the snip is requesting
|
|
to be updated immediately, as if calling @method[snip-admin%
|
|
needs-update]. Otherwise, @method[snip-admin% needs-update] must
|
|
eventually be called as well.
|
|
|
|
|
|
The method call is ignored if the given snip is not managed by this
|
|
administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
|
|
@defmethod[(scroll-to [snip (is-a?/c snip%)]
|
|
[localx real?]
|
|
[localy real?]
|
|
[w (and/c real? (not/c negative?))]
|
|
[h (and/c real? (not/c negative?))]
|
|
[refresh? any/c]
|
|
[bias (one-of/c 'start 'end 'none) 'none])
|
|
boolean?]{
|
|
@methspec{
|
|
|
|
Called by the snip to request scrolling so that the given region is
|
|
visible. The snip generally needs to be updated after a scroll, but
|
|
the snip decides whether the update should occur immediately.
|
|
|
|
The @scheme[localx], @scheme[localy], @scheme[w], and @scheme[h] arguments specify
|
|
a region of the snip to be made visible by the scroll (in snip
|
|
coordinates).
|
|
|
|
If @scheme[refresh?] is not @scheme[#f], then the editor is requesting to
|
|
be updated immediately.
|
|
|
|
The @scheme[bias] argument is one of:
|
|
@itemize[
|
|
|
|
@item{@scheme['start] --- if the range doesn't fit in the visible area, show the top-left region}
|
|
|
|
@item{@scheme['none] --- no special scrolling instructions}
|
|
|
|
@item{@scheme['end] --- if the range doesn't fit in the visible area, show the bottom-right region}
|
|
|
|
]
|
|
|
|
The result is @scheme[#t] if the editor is scrolled, @scheme[#f]
|
|
otherwise.
|
|
|
|
The method call is ignored (and the result is @scheme[#f]) if the given
|
|
snip is not managed by this administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Returns @scheme[#f].
|
|
|
|
}}
|
|
|
|
@defmethod[(set-caret-owner [snip (is-a?/c snip%)]
|
|
[domain (one-of/c 'immediate 'display 'global)])
|
|
void?]{
|
|
@methspec{
|
|
|
|
Requests that the keyboard focus is assigned to the specified snip.
|
|
If the request is granted, the @method[snip% own-caret] method of the
|
|
snip is called.
|
|
|
|
See @method[editor<%> set-caret-owner] for information about the
|
|
possible values of @scheme[domain].
|
|
|
|
|
|
The method call is ignored if the given snip is not managed by this
|
|
administrator.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
|
|
@defmethod[(update-cursor)
|
|
void?]{
|
|
|
|
@methspec{
|
|
|
|
Queues an update for the cursor in the @techlink{display} for this
|
|
snip's editor. The actual cursor used will be determined by calling
|
|
the snip's @method[snip% adjust-cursor] method as appropriate.
|
|
|
|
}
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
|
|
}}
|
|
|
|
|
|
@defmethod[(get-line-spacing)
|
|
(and/c real? (not/c negative?))]{
|
|
|
|
@methspec{
|
|
|
|
Returns the spacing inserted by the snip's editor between each
|
|
line.
|
|
}
|
|
@methimpl{
|
|
|
|
Returns @scheme[0.0]
|
|
|
|
}}
|
|
|
|
@defmethod[(get-selected-text-color)
|
|
void?]{
|
|
|
|
@methspec{
|
|
|
|
Returns the color that is used to draw selected text or @scheme[#f] if
|
|
selected text is drawn with its usual color.
|
|
}
|
|
@methimpl{
|
|
|
|
Returns @scheme[#f].
|
|
}}
|
|
|
|
|
|
@defmethod[(call-with-busy-cursor [thunk (-> any)])
|
|
any]{
|
|
|
|
@methspec{
|
|
|
|
Calls @scheme[thunk] while changing the cursor to a watch cursor for
|
|
all windows in the current eventspace.
|
|
|
|
}
|
|
|
|
@methimpl{
|
|
|
|
Does nothing.
|
|
}}
|
|
|
|
@defmethod[(get-tabs [length (or/c (box/c exact-nonnegative-integer?) #f) #f]
|
|
[tab-width (or/c (box/c real?) #f) #f]
|
|
[in-units (or/c (box/c any/c) #f) #f])
|
|
(listof real?)]{
|
|
|
|
@methspec{
|
|
Returns the current tab-position array as a list.
|
|
|
|
@boxisfillnull[(scheme length) @elem{the length of the tab array (and therefore the returned
|
|
list)}]
|
|
@boxisfillnull[(scheme tab-width) @elem{the width used for tabs past the
|
|
end of the tab array}]
|
|
@boxisfillnull[(scheme in-units) @elem{@scheme[#t] if the tabs are specified in
|
|
canvas units or @scheme[#f] if they are specified in space-widths}]
|
|
}
|
|
|
|
@methimpl{
|
|
Returns @scheme[null].
|
|
}
|
|
}
|
|
} |