The class
tab-layout
has two distinct modes. Switchable mode lays a number of panes in a switchable layout. Each pane has an associated tab which, when clicked on, pulls the pane to the front. In callback mode the tabs are linked to a
selection-callback
as for button-panel.
The main layout description.
Specifies the tabs of the tab layout.
Returns the visible child for a given selection in switchable mode.
A generalized boolean which influences the initial size of the layout.
Specifies a function to use in referring to items in the items list.
The function used to print a name on each tab.
The type of data passed to the callback function in callback mode.
The function called when a tab is selected, in callback mode.
A
tab-layout
has one of two distinct modes. It is in switchable mode if
visible-child-function
is supplied and non-nil. It is in callback mode otherwise.
In switchable mode, the tab layout consists of a number of panes, each with its own tab. Clicking on a tab pulls the corresponding pane to the front. In this mode the tab layout is like a switchable-layout with the switching performed by the user selecting a tab. In this mode the visible-child-function is used to specify which child to make visible for a given tab selection.
In callback mode the tab layout does not work as a switchable layout, and the result of any selection is specified using a callback specified by selection-callback , in a similar way to a button-panel callback. In this mode the description slot is used to describe the main layout of the tab pane.
In either mode
combine-child-constraints
influences the initial size of the layout. When
combine-child-constraints
is
nil
the constraints of the tab layout depend only on its currently visible tab. Switching to a different tab might cause the layout to resize. When
combine-child-constraints
is non-nil, the constraints depend on all of the tabs, including those that are not visible. This might increase the time taken to create the tab layout initially, but can prevent unexpected resizing later. The default value of
combine-child-constraints
is
nil
.
The following example shows the use of the switchable mode of
tab-layout
. Each tab is linked to an output pane by pairing them in the
items
list.
(defun switchable-tab-layout ()
(let* ((red-pane (make-instance
'capi:output-pane
:background :red))
(blue-pane (make-instance
'capi:output-pane
:background :blue))
(tl (make-instance
'capi:tab-layout
:items
(list (list "Red" red-pane)
(list "Blue" blue-pane))
:print-function 'car
:visible-child-function 'second)))
(capi:contain tl)))
(switchable-tab-layout)
Here is an example of the callback mode of
tab-layout
, which uses the selection of a tab to change the nodes of a graph pane through the
selection-callback
.
(defun non-switchable-tab-layout (tabs)
(let* ((gp (make-instance
'capi:graph-pane))
(tl (make-instance
'capi:tab-layout
:description (list gp)
:items tabs
:visible-child-function nil
:key-function nil
:print-function
(lambda (x)
(format nil "~R" x))
:callback-type :data
:selection-callback
#'(lambda (data)
(setf (capi:graph-pane-roots gp)
(list data))))))
(capi:contain tl)))
(non-switchable-tab-layout '(1 2 4 5 6))