Controlli ExpandableComposite e Section

ExpandableComposite ha un funzionamento simile al controllo Group con la possibilità di comprimere una parte di una pagina con un controllo di attivazione/disattivazione:

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

Il controllo ExpandableComposite accetta numerosi stili che ne determinano l'aspetto e il comportamento. Lo stile TREE_NODE crea il controllo di attivazione/disattivazione utilizzato in un widget ad albero per espandere e comprimere i nodi, mentre TWISTIE crea un'attivazione con stile triangolare. Utilizzando EXPANDED viene creato il controllo con lo stato iniziale espanso. Se si utilizza lo stile COMPACT, il controllo presenta una larghezza nello stato compresso sufficiente solo a rientrare nella riga del titolo (se compresso, è ristretto al massimo in orizzontale). Infine, CLIENT_INDENT fa rientrare il client per allinearlo al titolo (altrimenti, il client viene allineato al controllo di attivazione/disattivazione).

ExpandableComposite è responsabile del rendering del controllo di attivazione/disattivazione e del titolo. Il controllo per espandere e comprimere è impostato come client. Notare che come prerequisito il client deve essere un elemento secondario diretto di ExpandableComposite.

ExpandableComposite attiva gli oggetti ExpansionEvent quando si modifica lo stato di espansione. L'aggiunta di un listener di espansione è richiesta per poter ridisegnare il modulo alla modifica di stato. L'espansione provoca modifiche nella dimensione di ExpandableComposite, ma la modifica non ha effetto fino a quando l'elemento principale non viene tracciato la prossima volta (pertanto, è necessario forzare la modifica).

Section è una sottoclasse di ExpandableComposite che aggiunge ulteriori funzioni. Generalmente viene utilizzato per suddividere un modulo in più sezioni, ognuna con il proprio titolo e una descrizione facoltativa. Quando si utilizzano gli stili Section.TITLE_BAR o Section.SHORT_TITLE_BAR, una decorazione intorno all'area del titolo migliora ulteriormente il raggruppamento.

A differenza di ExpandableComposite, Section gestisce automaticamente il ridisegno alla modifica dello stato di espansione. Altri usi interessanti della notifica dello stato di espansione sono la creazione lenta del contenuto di sezione, che viene ritardato fino a quando si espande la sezione.