




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.
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.
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))