A subclass of
simple-layout
that displays only one of its children at a time, and provides functionality for switching the displayed child to one of the other children.
The
switchable-layout
has a
description
which is its list of children. The argument
visible-child
specifies the initially visible child (which defaults to the first of the children).
switchable-layout
inherits most of its layout behavior from simple-layout as it only ever lays out one child at a time.
combine-child-constraints
influences the initial size of the layout. When
combine-child-constraints
is
nil
the constraints of the switchable layout depend only on its currently visible child pane. Switching to a different child pane might cause the layout to resize. When
combine-child-constraints
is non-nil, the constraints depend on all of the child panes, including those that are not visible. This might increase the time taken to create the switchable layout initially, but can prevent unexpected resizing later. The default value of
combine-child-constraints
is
nil
.
(setq children (list
(make-instance 'capi:push-button
:text "Press Me")
(make-instance 'capi:list-panel
:items '(1 2 3 4 5))))
(setq layout (capi:contain
(make-instance
'capi:switchable-layout
:description children)))
(capi:apply-in-pane-process
layout #'(setf capi:switchable-layout-visible-child)
(second children) layout)
(capi:apply-in-pane-process
layout #'(setf capi:switchable-layout-visible-child)
(first children) layout)
There is a further example in the file
examples/capi/layouts/switchable.lisp
.