280 lines
12 KiB
Racket
280 lines
12 KiB
Racket
#lang at-exp scheme/base
|
|
|
|
(require scribble/struct
|
|
scribble/manual
|
|
scribble/scheme
|
|
scribble/decode
|
|
(for-label scheme/gui/base
|
|
scheme/base)
|
|
(for-syntax scheme/base)
|
|
(only-in scribblings/draw/blurbs
|
|
res-sym
|
|
boxisfill
|
|
boxisfillnull
|
|
MismatchExn))
|
|
|
|
(provide (except-out (all-defined-out) p define-inline)
|
|
(all-from-out scribblings/draw/blurbs))
|
|
|
|
(define-syntax-rule (define-inline (name) body)
|
|
(define-syntax (name stx)
|
|
(datum->syntax stx 'body stx)))
|
|
|
|
(define (p . l)
|
|
(decode-paragraph l))
|
|
|
|
(define (labelsimplestripped where what)
|
|
@elem{If @litchar{&} occurs in @|where|, it is specially parsed;
|
|
under Windows and X, the character
|
|
following @litchar{&} is underlined in the displayed control to
|
|
indicate a keyboard mnemonic. (Under Mac OS X, mnemonic underlines are
|
|
not shown.) The mnemonic is meaningless for a @|what| (as far as
|
|
@xmethod[top-level-window<%> on-traverse-char] is concerned),
|
|
but it is supported for consistency with other control types. A
|
|
programmer may assign a meaning to the mnemonic (e.g., by overriding
|
|
@method[top-level-window<%> on-traverse-char]).})
|
|
|
|
(define (labelstripped where detail what)
|
|
@elem{If @litchar{&} occurs in @|where|@|detail|, it
|
|
is specially parsed as for @racket[button%].})
|
|
|
|
(define (bitmapuseinfo pre what thing and the)
|
|
@elem{@|pre| @|what| is @|thing|,@|and| if @|the|
|
|
bitmap has a mask (see @xmethod[bitmap% get-loaded-mask])
|
|
that is the same size as the bitmap, then the mask is used for the
|
|
label. Modifying a bitmap while it is used as a label has
|
|
an unspecified effect on the displayed label.})
|
|
|
|
(define-syntax bitmaplabeluse
|
|
(syntax-rules ()
|
|
[(_ id) @bitmapuseinfo["If" @racket[id] "a bitmap" " and" "the"]]))
|
|
(define-syntax bitmaplabelusearray
|
|
(syntax-rules ()
|
|
[(_ id) @bitmapuseinfo["If" @racket[id] "a list of bitmaps" " and" "a"]]))
|
|
(define-syntax bitmaplabeluseisbm
|
|
(syntax-rules ()
|
|
[(_ id) @bitmapuseinfo["Since" @racket[id] "a bitmap" "" "the"]]))
|
|
|
|
(define bitmapiforiglabel
|
|
@elem{The bitmap label is installed only
|
|
if the control was originally created with a bitmap label.})
|
|
|
|
(define (popupmenuinfo what other more)
|
|
(make-splice
|
|
(list*
|
|
@p{Pops up the given @racket[popup-menu%] object at the specified
|
|
coordinates (in this window's coordinates), and returns after
|
|
handling an unspecified number of events; the menu may still be
|
|
popped up when this method returns. If a menu item is selected from
|
|
the popup-menu, the callback for the menu item is called. (The
|
|
eventspace for the menu item's callback is the @|what|'s eventspace.)}
|
|
|
|
@p{While the menu is popped up, its target is set to the @|other|. See
|
|
@method[popup-menu% get-popup-target]
|
|
for more information.}
|
|
|
|
(if (equal? more "")
|
|
null
|
|
(list @p{@|more|})))))
|
|
|
|
(define insertcharundos
|
|
@elem{Multiple calls to the character-inserting method are grouped together
|
|
for undo purposes, since this case of the method is typically used
|
|
for handling user keystrokes. However, this undo-grouping feature
|
|
interferes with the undo grouping performed by
|
|
@method[editor<%> begin-edit-sequence] and
|
|
@method[editor<%> end-edit-sequence], so the string-inserting
|
|
method should be used instead during undoable edit sequences.})
|
|
|
|
(define (insertscrolldetails what)
|
|
@elem{@|what| editor's display is scrolled to show the new selection
|
|
@techlink{position}.})
|
|
|
|
(define (insertmovedetails what)
|
|
@elem{If the insertion @techlink{position} is before
|
|
or equal to the selection's start/end @techlink{position}, then the
|
|
selection's start/end @techlink{position} is incremented by @|what|.})
|
|
|
|
(define OVD
|
|
@elem{The result is only valid when the editor is displayed
|
|
(see @secref["tb:miaoverview"]). Editors are displayed when
|
|
@method[editor<%> get-admin] returns an administrator (not @racket[#f]).})
|
|
|
|
(define (FCAX c details)
|
|
@elem{
|
|
@|c|alling this method may force the recalculation of @techlink{location}
|
|
information@|details|, even if the editor currently has delayed
|
|
refreshing (see @method[editor<%> refresh-delayed?]).})
|
|
|
|
(define FCA (FCAX "C" ""))
|
|
(define FCAMW (FCAX "C" " if a maximum width is set for the editor"))
|
|
(define (FCAME) (FCAX @elem{For @racket[text%] objects, c} " if a maximum width is set for the editor"))
|
|
|
|
(define EVD
|
|
@elem{If the editor is not displayed and the editor has a
|
|
maximum width, line breaks are calculated as for
|
|
@method[text% line-start-position] (which handles specially
|
|
the case of no display when the editor has a maximum width).})
|
|
|
|
(define (LineToPara what)
|
|
@elem{See also @method[text% paragraph-start-position], which
|
|
operates on paragraphs (determined by explicit newline characters)
|
|
instead of lines (determined by both explicit newline
|
|
characters and automatic line-wrapping).})
|
|
|
|
(define admindiscuss @secref["editoradministrators"])
|
|
(define ateoldiscuss @secref["editoreol"])
|
|
(define textdiscuss @secref["editorflattened"])
|
|
(define clickbackdiscuss @secref["editorclickback"])
|
|
(define stylediscuss @secref["editorstyles"])
|
|
(define timediscuss @secref["editorcutandpastetime"])
|
|
(define filediscuss @secref["editorfileformat"])
|
|
(define editordatadiscuss @secref["editordata"])
|
|
(define snipclassdiscuss @secref["editorsnipclasses"])
|
|
(define togglediscuss @secref["styledeltatoggle"])
|
|
(define drawcaretdiscuss @secref["drawcaretinfo"])
|
|
(define eventspacediscuss @secref["eventspaceinfo"])
|
|
(define lockdiscuss @secref["lockinfo"])
|
|
(define mousekeydiscuss @secref["mouseandkey"])
|
|
(define globaleditordatadiscuss @secref["globaleditordata"])
|
|
|
|
(define geomdiscuss @secref["containeroverview"])
|
|
|
|
(define mrprefsdiscuss @secref["mredprefs"])
|
|
|
|
(define seesniporderdiscuss
|
|
@elem{See @secref["tb:miaoverview"] for information about snip order in pasteboards.})
|
|
|
|
(define PrintNote
|
|
(make-splice
|
|
(list
|
|
@p{Be sure to use the following methods to start/end drawing:}
|
|
@itemize[@item{@method[dc<%> start-doc]}
|
|
@item{@method[dc<%> start-page]}
|
|
@item{@method[dc<%> end-page]}
|
|
@item{@method[dc<%> end-doc]}]
|
|
@p{Attempts to use a drawing method outside of an active page raises an exception.})))
|
|
|
|
(define reference-doc '(lib "scribblings/reference/reference.scrbl"))
|
|
|
|
(define SeeMzParam @elem{(see @secref[#:doc reference-doc "parameters"])})
|
|
|
|
(define DrawSizeNote "")
|
|
|
|
(define LineNumbering @elem{Lines are numbered starting with @racket[0].})
|
|
(define ParagraphNumbering @elem{Paragraphs are numbered starting with @racket[0].})
|
|
|
|
(define (italicptyStyleNote style)
|
|
@elem{The @|style| argument is provided for future extensions. Currently, @|style| must be the empty list.})
|
|
|
|
(define (HVLabelNote style what)
|
|
@elem{If @|style| includes @racket['vertical-label], then the @|what| is
|
|
created with a label above the control; if @|style| does not include
|
|
@racket['vertical-label] (and optionally includes @racket['horizontal-label]), then the
|
|
label is created to the left of the @|what|.})
|
|
|
|
(define (DeletedStyleNote style parent what)
|
|
@elem{If @|style| includes @racket['deleted], then the @|what| is created as hidden,
|
|
and it does not affect its parent's geometry; the @|what| can be made active later by calling
|
|
@|parent|'s @method[area-container<%> add-child] method.})
|
|
|
|
(define (InStyleListNote style)
|
|
@elem{The editor's style list must contain @style, otherwise
|
|
the style is not changed. See also @xmethod[style-list% convert].})
|
|
|
|
(define (FontKWs font)
|
|
@elem{The @|font| argument determines the font for the control.})
|
|
(define (FontLabelKWs font label-font)
|
|
@elem{The @|font| argument determines the font for the control content,
|
|
and @|label-font| determines the font for the control label.})
|
|
|
|
(define (WindowKWs enabled)
|
|
@elem{For information about the @|enabled| argument, see @racket[window<%>].})
|
|
(define-inline (SubareaKWs)
|
|
@elem{For information about the @racket[horiz-margin] and @racket[vert-margin]
|
|
arguments, see @racket[subarea<%>].})
|
|
(define-inline (AreaContKWs)
|
|
@elem{For information about the @racket[border], @racket[spacing], and @racket[alignment]
|
|
arguments, see @racket[area-container<%>].})
|
|
|
|
(define-inline (AreaKWs)
|
|
@elem{For information about the
|
|
@racket[min-width], @racket[min-height], @racket[stretchable-width], and
|
|
@racket[stretchable-height] arguments, see @racket[area<%>].})
|
|
|
|
(define AFM @elem{Adobe Font Metrics})
|
|
|
|
(define (MonitorMethod what by-what method whatsit)
|
|
@elem{@|what| can be changed
|
|
by @|by-what|, and such changes do not go through this method; use @|method| to
|
|
monitor @|whatsit| changes.})
|
|
|
|
(define (MonitorCallbackX a b c d)
|
|
(MonitorMethod a b @elem{the @|d| callback procedure (provided as an initialization argument)} c))
|
|
|
|
(define (MonitorCallback a b c)
|
|
(MonitorCallbackX a b c "control"))
|
|
|
|
(define (Unmonitored what by-what the-what method)
|
|
@elem{@|what| can be changed
|
|
by @|by-what|, and such changes do not go through this method. A program
|
|
cannot detect when @|the-what| except by polling @|method|.})
|
|
|
|
(define OnInsertNote
|
|
(MonitorMethod @elem{The content of an editor}
|
|
@elem{the system in response to other method calls}
|
|
@elem{@xmethod[text% on-insert] or @xmethod[pasteboard% on-insert]}
|
|
@elem{content additions}))
|
|
|
|
(define OnDeleteNote
|
|
(MonitorMethod @elem{The content of an editor}
|
|
@elem{the system in response to other method calls}
|
|
@elem{@xmethod[text% on-delete] or @xmethod[pasteboard% on-delete]}
|
|
@elem{content deletions}))
|
|
|
|
(define OnSelectNote
|
|
(MonitorMethod @elem{The selection in a pasteboard}
|
|
@elem{the system in response to other method calls}
|
|
@elem{@method[pasteboard% on-select]}
|
|
@elem{selection}))
|
|
|
|
(define OnMoveNote
|
|
(MonitorMethod @elem{Snip @techlink{location}s in a pasteboard}
|
|
@elem{the system in response to other method calls}
|
|
@elem{@method[pasteboard% on-move-to]}
|
|
@elem{snip @techlink{position}}))
|
|
|
|
(define (colorName name name2 r g b)
|
|
(make-element #f
|
|
(list (make-element `(bg-color ,r ,g ,b)
|
|
(list (hspace 5)))
|
|
(hspace 1)
|
|
(bytes->string/latin-1 name))))
|
|
|
|
(define (edsnipsize a b c)
|
|
@elem{An @racket[editor-snip%] normally stretches to wrap around the size
|
|
of the editor it contains. This method @|a| of the snip
|
|
(and if the editor is @|b|, @|c|).})
|
|
(define (edsnipmax n)
|
|
(edsnipsize @elem{limits the @|n|}
|
|
@elem{larger}
|
|
@elem{only part of the editor is displayed}))
|
|
(define (edsnipmin a b)
|
|
(edsnipsize @elem{sets the minimum @|a|}
|
|
"smaller"
|
|
@elem{the editor is @|b|-aligned in the snip}))
|
|
|
|
(define (slant . s)
|
|
(make-element "slant" (decode-content s)))
|
|
|
|
(define (Resource s)
|
|
@elem{@to-element[`(quote ,(res-sym s))]
|
|
preference})
|
|
(define (ResourceFirst s) ; fixme -- add index
|
|
(let ([r (Resource s)])
|
|
(index* (list (format "~a preference" (res-sym s)))
|
|
(list r)
|
|
r)))
|
|
|
|
|