Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Greenpeace
Un tutorial su XUL: alberi dinamici (19/25)
Scritto da Christian Bencivenni il 23-04-2009 ore 07:45
Intel Parallel Studio XE
Come visto nell’articolo precedente XUL possiede un elemento specifico per la creazione di strutture ad albero dinamiche, che può essere o meno utilizzato anche per la generazione di tabelle. Approfondiamo ora l’argomento con alcuni esempi più specifici e alcune varianti. Abbiamo detto che potrebbe capitare di fare un po’ di confusione tra alberi e tabelle, considerato che gli strumenti per realizzarli sono gli stessi.

Abbiamo visto che per creare una struttura ad albero è necessario inserire elementi treechildren all’interno di elementi treeitem. Se per esempio vogliamo simulare la struttura gerarchica del contenuto di un hard disk possiamo ragionare in questo modo: l’elemento treechildren corrisponde ad una subdirectory, l’elemento treerow contiene il nome della subdirectory, per ogni file nella directory avremo un elemento treeitem che conterrà una treerow che a sua volta conterrà una treecell.

Quindi ogni treechildren contiene una lista di treeitem e ogni treeitem contiene una treerow con all’interno una treecell, con la possibilità di un altro elemento treechildren e così via. Quando poi un treeitem contiene un treechildren deve avere due attributi: container che indica se l’elemento contiene un ulteriore ramo, e open che indica se è aperto all’inizio dell’esecuzione o meno.
  1. <treeitem container="true" open="true" />

Un ramo avrà quindi una struttura del tipo:
  1. <treeitem container="true" open="true">
  2.     <treerow 
  3.         <treecell label="" />
  4.     <treerow>
  5.     <treechildren>
  6.         <treeitem>
  7.             ....
  8.         </treeitem>
  9.         <treeitem>
  10.              ...
  11.         </treeitem>
  12.     </treechildren>
  13. </treeitem>

Se combinassimo la struttura ad albero con quella a tabelle risulterebbe, come unica differenza fondamentale, quella di avere due o più treecol e ovviamente un ugual numero di treecell all’interno di un elemento treerow. Se ad esempio abbiamo tre colonne la struttura sarà:
  1. <treeitem container="true" open="true">
  2.     <treerow 
  3.         <treecell label="" />
  4.         <treecell label="" />
  5.         <treecell label="" />
  6.     <treerow>
  7.     <treechildren>
  8.         <treeitem>
  9.             ....
  10.         </treeitem>
  11.         <treeitem>
  12.              ...
  13.         </treeitem>
  14.     </treechildren>
  15. </treeitem>

A questo punto possiamo dare un’occhiata al lato dinamico della struttura, ad esempio potremmo volere che l’utente avvii dei comportamenti cliccando sugli elementi dell’albero. Anche in questo caso ricorriamo all’event handler onselect di JavaScript e all’attributo currentindex:
  1. <tree onselect="selecting(currentIndex);" >
  1. <?xml version='1.0'?>
  2. <window 
  3.    id="hello"  
  4.    title="Tree" 
  5.    width="500" 
  6.   height="300" 
  7.   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" >
  8.  
  9. <tree flex="1" onselect="selecting(currentIndex);" >
  10. 	<treecols >
  11. 		<treecol label="Albero" primary="true" width="320" />
  12. 	</treecols>
  13. 	<treechildren>
  14. 		<treeitem container="true" open="true" >
  15. 			<treerow>
  16. 				<treecell label="Bullock" />
  17. 			</treerow>
  18. 			<treechildren>
  19. 				<treeitem container="true" open="true">
  20. 					<treerow>
  21. 						<treecell label="Last name" />
  22. 					</treerow>					
  23. 					<treechildren>
  24. 						<treeitem>
  25. 							<treerow>
  26. 								<treecell label="Sandra" />
  27. 							</treerow>
  28. 						</treeitem>
  29. 					</treechildren>
  30. 				</treeitem>
  31. 				<treeitem container="true" open="true">
  32. 					<treerow>
  33. 						<treecell label="Address" />
  34. 					</treerow>
  35. 					<treechildren>
  36. 						<treeitem>
  37. 							<treerow>
  38. 								<treecell label="Rue" />
  39. 							</treerow>	
  40. 						</treeitem>		
  41. 						<treeitem>	
  42. 							<treerow>
  43. 								<treecell label="City" />
  44. 							</treerow>	
  45. 						</treeitem>		
  46. 						<treeitem>	
  47. 							<treerow>
  48. 								<treecell label="name@domain" />
  49. 							</treerow>
  50. 						</treeitem>	
  51. 					</treechildren>	
  52. 				</treeitem>
  53. 			</treechildren>
  54. 		</treeitem>
  55. 	</treechildren>
  56. </tree>
  57. <script>
  58.  
  59. function selecting(idx)
  60. {
  61. 	alert("Selected " + idx);
  62. }
  63. </script>
  64. </window>
Precedente: Moodle, il Learning Management System più diffuso (3/3)
Successiva: Un metodo più semplice per costruire un circuito spintronico
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.312 secondi.