L’oggetto tree è un componente pensato per visualizzare dinamicamente i dati; il contenuto e la struttura varia fin dall’inizio e durante le varie fasi del processo lavorativo. Esso può assomigliare a una lista, a una tabella o, appunto, a una struttura ad albero. Contrariamente alla
listbox però la struttura dell’oggetto è divisa tra la parte visualizzata, l’oggetto
tree, e il contenuto dinamico,
treeview.
Cominciamo ad analizzare l’elemento
tree:
treecols e treecol sono sostanzialmente simili a quanto visto per le tabelle: il primo definisce il raggruppamento di colonne mentre il secondo il numero effettivo di colonne e i loro parametri.
<tree>
<treecols>
<treecol label="Nome"/>
<treecol label="Cognome"/>
<treecol label="E-mail"/>
</treecols>
</tree>
Se la colonna è gerarchica, è necessario specificare un attributo primario:
<treecol primary="true" label="Name"/>
treechildren invece definisce il corpo della struttura dell’albero così come la sua parte dinamica; è posizionato dopo
treecols e contiene elementi
treeitems:
<?tree>
<treecols>
</treecols>
<treechildren>
<treeitem>
....
</treechildren>
</tree>
Un
treeitem contiene una linea della “tabella dell’albero” (o
treerow) e più specificatamente elementi
treechildren in un numero variabile. Il termine può sembrare una contraddizione, ma dovete pensare alla struttura ad albero come a una tabella dinamica, in cui il numero di righe, colonne ed elementi può variare in base alle esigenze di visualizzazione dell’utente. Una
treerow contiene sostanzialmente una linea della tabella formata da un numero variabile di
treeitem o un numero fisso di
treecell corrispondente al numero di colonne specificato da
treecols;
treecell è quindi un elemento indivisibile che contiene informazioni.
Proviamo ora a costruire una tabella utilizzando le arborescenze di
XUL. In una tabella, il numero delle celle all’interno di un oggetto
treeitem deve combaciare esattamente con il numero delle colonne in
treecols. Il dinamismo intrinseco, specificato all’inizio del capitolo, in questo caso è legato al numero di righe, che è variabile e può modificarsi durante l’uso del programma di interfaccia. In aggiunta è possibile modificare il numero delle colonne visualizzate, nascondendole e mostrandole a seconda delle esigenze. Vediamo un esempio:
<??xml version='1.0'?>
<window
id="hello"
title="Tree"
width="500"
height="300"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
<box flex="1">
<tree flex="1">
<treecols >
<treecol label="Nome" width="120" />
<treecol label="Cognome" width="120" />
<treecol label="E-mail" width="200" />
</treecols>
<treechildren>
<treeitem>
<treerow>
<treecell label="Bullock" />
<treecell label="Sandra" />
<treecell label="non disponibile" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="Roberts" />
<treecell label="Julia" />
<treecell label="non disponibile" />
</treerow>
</treeitem>
<treeitem>
<treerow>
<treecell label="Johanson" />
<treecell label="Scarlett" />
<treecell label="non disponibile" />
</treerow>
</treeitem>
</treechildren>
</tree>
</box>
</window>
Se visualizzate l’esempio precedente avrete una dimostrazione dell’utilizzo dell’albero come una tabella e della possibilità di visualizzare o meno delle colonne specifiche.