racket/collects/scribblings/gui/combo-field-class.scrbl
Diogo F. S. Ramos 54ab1bfbfa Add a Widget Gallery to Racket GUI documentation
It's very helpful to have a visual aid when dealing with a graphical
interface toolkit.

This patch adds an overview of the widgets available in the library
consisting of screen shots of the main ones and the snippets used to
produce them.

Each widget image link back to the full documentation.
2012-09-18 14:17:36 -04:00

105 lines
3.5 KiB
Racket

#lang scribble/doc
@(require "common.rkt")
@centered{@image[#:suffixes @list[".png"]]{image/combo-field}}
@defclass/title[combo-field% text-field% ()]{
A @racket[combo-field%] object is a @racket[text-field%]
object that also resembles a @racket[choice%] object, because it
has a small popup button to the right of the text field. Clicking
the button pops up a menu, and selecting a menu item typically copies
the item into the text field.
@defconstructor[([label (or/c label-string? #f)]
[choices (listof label-string?)]
[parent (or/c (is-a?/c frame%) (is-a?/c dialog%)
(is-a?/c panel%) (is-a?/c pane%))]
[callback ((is-a?/c combo-field%) (is-a?/c control-event%)
. -> . any)
(lambda (c e) (void))]
[init-value string ""]
[style (listof (or/c 'horizontal-label 'vertical-label
'deleted))
null]
[font (is-a?/c font%) normal-control-font]
[enabled any/c #t]
[vert-margin (integer-in 0 1000) 2]
[horiz-margin (integer-in 0 1000) 2]
[min-width (integer-in 0 10000) _graphical-minimum-width]
[min-height (integer-in 0 10000) _graphical-minimum-height]
[stretchable-width any/c #t]
[stretchable-height any/c #f])]{
If @racket[label] is not @racket[#f], it is used as the combo label.
Otherwise, the combo does not display its label.
@labelstripped[@racket[label]
@elem{} @elem{move the keyboard focus to the combo}]
The @racket[choices] list specifies the initial list of items for the
combo's popup menu. The
@method[combo-field% append] method adds a new item to the menu with a callback to install the
appended item into the combo's text field. The
@method[combo-field% get-menu] method returns a menu that can be changed to
adjust the content and actions of the combo's menu.
The @racket[callback] procedure is called when the user changes the text
in the combo or presses the Enter key (and Enter is not handled by
the combo's frame or dialog; see
@xmethod[top-level-window<%> on-traverse-char] ). If the user presses Enter, the type of event passed to the callback
is @indexed-racket['text-field-enter], otherwise it is
@indexed-racket['text-field].
If @racket[init-value] is not @racket[""], the minimum width of the text item
is made wide enough to show @racket[init-value]. Otherwise, a built-in
default width is selected.
@HVLabelNote[@racket[style]]{combo} @DeletedStyleNote[@racket[style] @racket[parent]]{combo}.
@FontKWs[@racket[font]] @WindowKWs[@racket[enabled]] @SubareaKWs[] @AreaKWs[]
}
@defmethod[(append [l label-string?])
void?]{
Adds a new item to the combo's popup menu. The given label is used for
the item's name, and the item's callback installs the label into the
combo's text field.
}
@defmethod[(get-menu)
(is-a?/c popup-menu%)]{
Returns a @racket[popup-menu%] that is effectively copied into the
combo's popup menu when the combo is clicked. Only the labels and
callbacks of the menu's items are used; the enable state, submenus,
or separators are ignored.
}
@defmethod[(on-popup [event (is-a?/c control-event%)])
void?]{
@methspec{
Called when the user clicks the combo's popup button. Override this method
to adjust the content of the combo menu on demand.
}
@methimpl{
Does nothing.
}}
}