Controlos compósito expansível e secção

ExpandableComposite funciona de modo semelhante ao controlo Group com a capacidade de contrair uma parte de uma página como controlo de comutação:

	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);
		}
	});

O controlo ExpandableComposite aceita vários estilos que afectam a sua aparência e o seu comportamento. O estilo TREE_NODE cria o controlo de comutação utilizado num widget em árvore para expandir e contrair nós, ao passo que TWISTIE cria uma comutação ao estilo triângulo. EXPANDED cria um controlo no estado expandido inicial. Se for usado o estilo COMPACT, o controlo emprega largura no estado contraído suficiente para encaixar na linha de título somente (ou seja, quando contraído será tão compacto horizontalmente quanto possível). Por fim, CLIENT_INDENT faz a indentação do cliente para alinhar com o título (caso contrário, o cliente ficará alinhado com o controlo de comutação).

O próprio compósito expansível é responsável pela apresentação do controlo de comutação e do título. O controlo para expandir ou contrair está definido como cliente. Repare no requisito de o cliente ser descendente directo do compósito expansível.

O compósito expansível desencadeia objectos ExpansionEvent quando o estado de extensão se altera. É necessário adicionar um ouvinte de extensão ao controlo para reapresentar o formulário na alteração de estado. Isto porque a extensão causa alterações no tamanho do compósito expansível, mas a alteração só entra em vigor na ocasião seguinte em que o ascendente seja esquematizado (ou seja, temos de a forçar).

Section é uma subclasse do compósito expansível que adiciona mais capacidades. Regra geral, utiliza-se para particionar um formulário em várias secções, cada qual com título próprio e descrição opcional. Quando se o usa o estilo Section.TITLE_BAR ou Section.SHORT_TITLE_BAR, a decoração em torno da área de título aperfeiçoa mais o agrupamento.

Ao invés de ExpandableComposite, Section trata automaticamente reapresentações na alteração do estado de extensão. Outras utilizações interessantes da notificação de estado de extensão são a criação ociosa do conteúdo da secção, a qual é diferida até a secção ser expandida.