Expandable composite and Section controls
ExpandableComposite
acts similar to Group
control
with the ability to collapse a portion of a page a toggle control:
ExpandableComposite ec = toolkit.createExpandableComposite(form.getBody(),
ExpandableComposite.TREE_NODE|
ExpandableComposite.CLIENT_INDENT);
ec.setText("Expandable Composite title");
String ctext = "We will now create a somewhat long text so that "+
"we can use it as content for the expandable composite. "+
"Expandable composite is used to hide or show the text using the "+
"toggle control";
Label client = toolkit.createLabel(ec, ctext, SWT.WRAP);
ec.setClient(client);
ec.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});
The ExpandableComposite
control accepts a number of styles that
affect its appearance and behavior. Style TREE_NODE
will create the
toggle control used in a tree widget for expanding and collapsing nodes, while
TWISTIE
will create a triangle-style toggle. Using EXPANDED
will create the control in the initial expanded state. If style COMPACT
is used, control will report width in the collapsed state enough to fit in the
title line only (i.e. when collapsed, it will be as compact horizontally as
possible). Finally, CLIENT_INDENT
will indent the client to align
with the title (otherwise, client will be aligned with the toggle control).
Expandable composite itself is responsible for rendering the toggle control
and the title. The control to expand or collapse is set as a client. Note the
requirement that the client is a direct child of the expandable composite.
Expandable composite fires ExpansionEvent
objects when expansion
state changes. Adding an expansion listener to the control is needed in order to
reflow the form on state change. This is because expansion causes changes in
expandable composite size, but the change will not take effect until the next
time the parent is laid out (hence we need to force it).
Section
is a subclass of the expandable composite that adds
additional capabilities. It is typically used to partition a form into a number
of sections, each with its own title and optional description. When
Section.TITLE_BAR
or Section.SHORT_TITLE_BAR
styles are
used, decoration around the title area further enhances the grouping.
Unlike ExpandableComposite
, Section
automatically
handles reflows on expansion state change. Other interesting uses of the
expansion state notification are lazy creation of the Section content that is
delayed until the section is expaned.