




A function of one argument. The default is identity.
A function of one argument, or a list of such functions.
A list of column specifications.
The class multi-column-list-panel is a list panel which displays multiple columns of text. The columns can each have a title.
Note that this is a subclass of list-panel, and hence of choice, and inherits the behavior of those classes.
Each item in a multi-column-list-panel is displayed in a line of multiple objects. The corresponding objects of each line are aligned in a column.
The
column-function
generates the objects for each item. It should take an item as its single argument and return a list of objects to be displayed. The default
column-function
is identity, which works if each item is a list.
column-function can also be a list of function designators. In this case the length has to match the length of the columns . Each function is called with the item to generate the object for the corresponding column.
The item-print-functions argument determines how to calculate the text to display for each element. If item-print-functions is a single function, it is called on each object, and must return a string. Otherwise item-print-functions should be a sequence of length no less than than the number of columns. The text to display for each object is the result (again, a string) of calling the corresponding element of item-print-functions on that object.
The columns argument specifies the number of columns, and whether the columns have titles and callbacks on these titles.
Each element of columns is a specification for a column. Each column specification is a plist of keyword and values, where the allowed keywords are as follows:
Specifies the title to use for the column. If any of the columns has a title, a header object is created which displays the titles. The values of the :title keywords are passed as the
items
of the header, unless
header-args
specifies :items.
Specifies how to adjust the column. The value can be one of :right, :left, or :center.
Specifies a fixed width of the column.
Specifies the default initial width of the column. The user can resize it. If :width is supplied it overrides :default-width.
Specifies an additional gap alongside the text in the column. :gap is not supported consistently across platforms (see Notes below).
The values of :width, :visible-min-width and :gap are interpreted as standard geometric hints. See element for information about these hints.
columns
should indicate how many columns to display. At a minimum the value needs to be (() ()) for two columns without any titles
header-args is a plist of initargs passed to the header which displays the titles of the columns. The header object is a collection. The following collection initargs are useful to pass in header-args :
A callback function for clicking on the header, or the keyword :sort which specifies sorting as described below.
Defines the arguments of the selection-callback .
The items of the header object, that is the titles. Note that :items overrides :title if that is supplied in
columns
.
Controls how each of items is printed, providing the title of each column.
header-args
may also contain the keyword :alignments. The value should be a list of alignment keywords, each of which is interpreted like an :adjust value in
columns
. The alignment is applied to the title only.
When the callback is :sort, clicking on a header causes a call to sorted-object-sorted-by on the pane, with
sort-type
the title of the column, as given either by :items or :title in the columns. To make it work, you also need to define the
sort-definitions
, by making the pane with
sort-descriptions
with types that match the
titles
(see sorted-object and make-sorting-description).
If
auto-reset-column-widths
is true, then the widths of the columns are recomputed when the items of the multi-column-list-panel are set.
:width in a column specification does not actually make the column width be fixed, though it does supply the initial width.:gap in a column specification adds the gap on both sides of the text. On Motif it adds the gap only on the right side of the text. On GTK+ and Cocoa :gap is ignored.multi-column-list-panel, their titles and what they show can be changed after the pane is displayed using modify-multi-column-list-panel-columns.This example uses the columns initarg:
(capi:contain
(make-instance
'capi:multi-column-list-panel
:visible-min-width 300
:visible-min-height :text-height
:columns '((:title "Fruits"
:adjust :right
:width (character 15))
(:title "Vegetables"
:adjust :left
:visible-min-width (character 30)))
:items '(("Apple" "Artichoke")
("Pomegranate" "Pumpkin"))))
This example uses header-args to add callbacks and independent alignment on the titles:
(defun mclp-header-callback (interface item)
(declare (ignorable interface))
(capi:display-message "Clicked on ~a" item))
(capi:contain
(make-instance
'capi:multi-column-list-panel
:visible-min-width 300
:visible-min-height :text-height
:columns '((:adjust :right
:width (character 15))
(:adjust :left
:visible-min-width (character 30)))
:header-args '(:items ( "Fruits" "Vegetables")
:selection-callback
mclp-header-callback
:alignments (:left :right))
:items '(("Apple" "Artichoke")
("Pomegranate" "Pumpkin"))))
This example file illustrates the use of the header's
selection-callback
:sort to implement sorting of the columns:
(example-edit-file "capi/choice/multi-column-list-panels")
This example uses column-function to implement a primitive process browser:
(defun get-process-elements (process)
(list (mp:process-name process)
(mp:process-whostate process)
(mp:process-priority process)))
(capi:contain
(make-instance
'capi:multi-column-list-panel
:visible-min-width '(character 70)
:visible-min-height '(character 15)
:items (mp:list-all-processes)
:columns '((:title "Name" :adjust :left
:visible-min-width (character 30))
(:title "State" :adjust :center
:visible-min-width (character 20))
(:title "Priority" :adjust :center
:visible-min-width (character 12)))
:column-function 'get-process-elements))
There are further examples in Self-contained examples.
collection
list-panel
list-view
make-sorting-description
modify-multi-column-list-panel-columns
sorted-object-sorted-by
Multi-column list panels
CAPI User Guide and Reference Manual (Macintosh version) - 25 Feb 2015