Prompts the user to select an item or items from a choice.
prompt-with-list items message &key choice-class interaction value-function pane-args popup-args continuation buttons callbacks all-button none-button => result, successp
A sequence.
A string.
A class name.
One of :single-selection
, :multiple-selection
, or :extended-selection
.
A function, or nil
.
Arguments to pass to the pane.
Arguments to pass to the confirmer.
A function or nil
.
A list of strings or the keyword :none
.
A list of callback specs.
A string, nil
or t
.
A string, nil
or t
.
The function prompt-with-list
prompts the user with a choice. The user's selection is normally returned by the prompter.
items supplies the items of the choice.
message supplies a title for the choice.
choice-class determines the type of choice used in the dialog. choice-class defaults to list-panel, and must be a subclass of choice.
interaction
determines the interaction style of the choice in the dialog. By default
interaction
is :single-selection
. For single selection, the dialog has an
OK
and a
Cancel
button, while for other selection styles it has
Yes
,
No
and
Cancel
buttons where
Yes
means accept the selection,
No
means accept a null selection and
Cancel
behaves as normal. Note that
interaction
:multiple-selection
is not supported for lists on Mac OS X.
The primary returned value is usually the selected items, but a
value-function
can be supplied that gets passed the result and can then return a new result. If
value-function
is nil
(this is the default), then
result
is simply the selection.
If
continuation
is non-nil, then it must be a function with a lambda list that accepts two arguments. The
continuation
function is called with the values that would normally be returned by prompt-with-list
. On Cocoa, passing
continuation
causes the dialog to be made as a window-modal sheet and prompt-with-list
returns immediately, leaving the dialog on the screen. The with-dialog-results macro provides a convenient way to create a
continuation
function.
In addition to the choice showing the items, prompt-with-list
can also display a panel of push buttons (the "action buttons") which perform actions related to the choice. Note that these buttons are separated from the "dialog buttons" such as
OK
and
Cancel
. The dialog buttons are controlled separately by keywords in
popup-args
.
By default, prompt-with-list
does not display action buttons. However, if
interaction
is :multiple-selection
, the default behavior is to display two action buttons,
All
and
None
. These change the selection to all of the items or none of the items respectively.
When
buttons
is :none
, it specifies no action buttons in any case (including no
All
and
None
buttons). Otherwise
buttons
must be a list of strings specifying additional action buttons. Each of the strings specifies a button, and the string is displayed in the button.
callbacks
specifies the callbacks of the buttons. It should be a list of callback specifiers matching the list in
buttons
. Each callback specifier is either a callable (a function or a symbol) which takes one argument, the choice, or a list where the car
is a callable which is called as follows:
(apply (car
callback-spec
) choice (cdr
callback-spec
))
When
all-button
and
none-button
are supplied they override the default behavior of the
All
and
None
buttons. If
all-button
(
none-button
) is nil
, then
All
(
None
) is not displayed. If
all-button
(
none-button
) is non-nil and
buttons
is not :none
, the
All
(
None
) button is displayed, and if the value is string, that string is used instead of the default string.
The prompter is created by passing an appropriate pane (in this case an instance of class
choice-class
) to popup-confirmer. Arguments can be passed to the make-instance
of the pane and the call to popup-confirmer using
pane-args
and
popup-args
respectively. The initial selection can be specified using choice initargs :selection
, :selected-item
or :selected-items
in
pane-args
.
(capi:prompt-with-list
'(1 2 3 4 5) "Select an item:")
(capi:prompt-with-list
'(1 2 3 4 5) "Select some items:"
:interaction :multiple-selection
:selection '(0 2 4))
(capi:prompt-with-list
'(1 2 3 4 5) "Select an item:"
:interaction :multiple-selection
:choice-class 'capi:button-panel)
(capi:prompt-with-list
'(1 2 3 4 5) "Select an item:"
:interaction :multiple-selection
:choice-class 'capi:button-panel
:pane-args
'(:layout-class capi:column-layout))
There is a more complex example in
(example-edit-file "capi/choice/prompt-with-buttons")
CAPI User Guide and Reference Manual (Macintosh version) - 3 Aug 2017