All Manuals > CAPI Reference Manual > 1 CAPI Reference Entries




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.


Returns an image for an item, on Microsoft Windows.


A plist of keywords and image-list objects, on Microsoft Windows.






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 .

If image-lists is specified, it should be a plist containing the keyword :normal as a key. The corresponding value should be an image-list object. No other keys are supported at the present time. The image-list associated with the :normal key is used with the image-function to specify an image to display in each tab.

The image-function is called on an item to return an image associated with the item. It can return one of the following:

A pathname or string

This specifies the filename of a file suitable for loading with load-image. Currently this must be a bitmap file.

A symbol

The symbol must have been previously registered by means of a call to register-image-translation .

An image object, as returned by load-image.

An image locator object

This allowing a single bitmap to be created which contains several button images side by side. See make-image-locator for more information. On Microsoft Windows, it also allows access to bitmaps stored as resources in a DLL.

An integer

This is a zero-based index into the tab-layout's image-list. This is generally only useful if the image list is created explicitly. See image-list for more details.


image-lists and image-function are implemented only on Microsoft Windows.


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
                    :background :red))
         (blue-pane (make-instance
                     :background :blue))
         (tl (make-instance
              (list (list "Red" red-pane)
                    (list "Blue" blue-pane))
              :print-function 'car
              :visible-child-function 'second)))
    (capi:contain tl)))

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 
         (tl (make-instance 
              :description (list gp)
              :items tabs
              :visible-child-function nil
              :key-function nil
              (lambda (x) 
                (format nil "~R" x))
              :callback-type :data
              #'(lambda (data) 
                  (setf (capi:graph-pane-roots gp)
                        (list data))))))
    (capi:contain tl)))
(non-switchable-tab-layout '(1 2 4 5 6))
See also


CAPI Reference Manual - 15 Dec 2011