The class
button-panel
is a pane containing a number of buttons that are laid out in a particular style, and that have group behavior.
The type of layout for the buttons.
Initialization arguments for the layout.
The selection callbacks for each button.
The class of the buttons.
A list.
A list.
A list.
The following initargs controlling mnemonics apply only on Microsoft Windows:
A list specifying mnemonics for the buttons.
A list of strings, each specifying the text and a mnemonic.
A character specifying the mnemonic escape. The default value is
#\&
.
The class
button-panel
inherits most of its behavior from choice, which is an abstract class providing support for handling items and selections. By default, a button panel has single selection interaction style (meaning that only one of the buttons can be selected at any one time), but this can be changed by specifying an
interaction
.
The subclasses push-button-panel, radio-button-panel
and check-button-panel are provided as convenience classes, but they are just button panels with different interactions (
:no-selection
,
:single-selection
and
:multiple-selection
respectively).
The layout of the buttons is controlled by a layout of class
layout-class
(which defaults to row-layout) but this can be changed to be any other CAPI layout. When the layout is created, the list of initargs
layout-args
is passed to
make-instance
.
Each button uses the callbacks specified for the button panel itself, unless the argument
callbacks
is specified.
callbacks
should be a list (one element per button). Each element of
callbacks
, if non-
nil,
will be used as the selection callback of the corresponding button.
button-class , if supplied, determines the class used for each of the buttons. This should be the class appropriate for the interaction , or a subclass of it. The default behavior is to create buttons of the class appropriate for the interaction .
Each of
images
,
disabled-images
,
armed-images
,
selected-images
,
selected-disabled-images
and
help-keys
, if supplied, should be a list of the same length as
items
. The values are passed to the corresponding item, and interpreted as described for button. The
button-panel
images
values map to
button
image
arguments, and so on.
For
button-panel
and its subclasses, the
items
supplied to the
:items
initarg and
(setf collection-items)
function can contain button objects. In this case, the button is used directly in the button panel rather than a button being created by the CAPI.
This allows button size and spacing to be controlled explicitly. Note that the button must be of the appropriate type for the subclass of
button-panel
being used, as shown in the following table:
push-button-panel
|
push-button
|
radio-button-panel
|
radio-button
|
check-button-panel
|
check-button
|
(let ((button1 (make-instance 'capi:push-button
:text "button1"
:internal-border 20
:visible-min-width 200))
(button2 (make-instance 'capi:push-button
:text "button2"
:internal-border 20
:visible-min-width 200)))
(capi:contain (make-instance 'capi:push-button-panel
:items (list button1 button2)
:layout-args '(:x-gap 30))))
default-button
specifies which button is the default (selected by pressing
Return
). It should be equal to a member of
items
when compared by
test-function
. If the items are non-immediate objects such as strings or button objects, you must ensure either that the same (
eq
) object is passed in
items
as in
default-button
, or that a suitable
test-function
is supplied.
cancel-button
specifies which button is selected by pressing
Escape
. The comparison with members of items is as for
default-button
.
mnemonics is a list of the same length as items . Each element is a character, integer or symbol specifying the mnemonic for the corresponding button in the same way as described for menu.
mnemonic-items is an alternate way to specify the mnemonics in a button panel. It is a list of the same length as items . Each element is a string which is interpreted for the corresponding button as its mnemonic-text initarg.
mnemonic-title and mnemonic-escape are interpreted as for menu. mnemonic-escape specifies the escape character for mnemonics both in the buttons and in the pane's title.
Button panels now default to having a maximum size constrained to their minimum size as this is useful when attempting to layout button panels into arbitrary spaces without them changing size. To get the old behavior, specify
:visible-max-width nil
in the
make-instance
.
(capi:contain (make-instance
'capi:button-panel
:items '(:red :green :blue)
:print-function 'string-capitalize))
(setq buttons
(capi:contain
(make-instance
'capi:button-panel
:items '(:red :green :blue)
:print-function 'string-capitalize
:interaction :multiple-selection)))
(capi:apply-in-pane-process
buttons #'(setf capi:choice-selected-items)
'(:red :green) buttons)
(capi:contain (make-instance
'capi:button-panel
:items '(1 2 3 4 5 6 7 8 9)
:layout-class 'capi:grid-layout
:layout-args '(:columns 3)))
This example illustrates use of default-button and test-function :
(capi:contain
(make-instance 'capi:push-button-panel
:items '("one" "two" "three")
:default-button "two"
:test-function 'equalp
:selection-callback
'capi:display-message))
Also see the example in the directory
examples/capi/buttons/
.