Voici un exemple de vue personnalisée qui affiche un arbre dont la forme est :
item 0
item 0.1
item 0.2
item 0.3
item 1
item 1.1
item 1.2
item 1.3
...
Pour chaque ligne à afficher dans l'arbre, il y a lieu de construire une structure de données qui comprend au minimum les champs suivants :
var item = {
uri : null,
index : null,
chld : new Array(),
isOpen : null,
isCntn : null,
level : null,
parent : null,
offSet : null
}
Pour reprendre l'exemple de départ limité aux trois premières lignes, il y a lieu de créer trois structures de données :
var item_0 = {
uri : "[[urn:item:0"]],
index : 0,
chld : new Array(),
isOpen : true,
isCntn : true,
level : 0,
parent : null,
offSet : 0
}
var item_0_1 = {
uri : "[[urn:item:0:1"]],
index : 1,
chld : new Array(),
isOpen : false,
isCntn : false,
level : 1,
parent : 0,
offSet : 0
}
var item_0_2 = {
uri : "[[urn:item:0:2"]],
index : 2,
chld : new Array(),
isOpen : false,
isCntn : false,
level : 1,
parent : 0,
offSet : 0
}
un tableau d'indices absolus :
var abslList = new Array();
et d'organiser le tout comme suit :
abslList[0] = item_0;
abslList[1] = item_0_1;
abslList[2] = item_0_2;
item_0.chld[0] = item_0_1;
item_0.chld[1] = item_0_2;
%%%
La fonction intl créée une structure de test du style de celle décrite ci-avant.
Les indices des lignes affichées dans un arbre changent dès qu'un élément contenant des fils est ouvert ou fermé. Ce changement est répercuté dans les structures en faisant varier leur offset. Ce sont les fonctions expand et collapse qui s'en chargent. Elles sont appelées au départ de la fonction toggleOpenState, c'est à dire chaque fois qu'un conteneur est ouvert ou fermé.
La fonction getItemAtIndex est chargée de récupérer un élément dans la liste abslList au départ de l'indice du même élément dans l'arbre.
Les fonctions getCellText et getCellValue reçoivent l'indice de la ligne d'un élément dans l'arbre. Elles font appel à la fonction getItemAtIndex pour retrouver la structure qui lui correspond dans le tableau abslList. Une fois cette structure trouvée, on peut appeler les fonctionnalités des datasources (ou autre) pour retrouver sur base de l'uri les informations que l'on veut afficher dans les différentes colonnes.
Enfin, les fonctions addChld et removeItem permettent d'ajouter ou de supprimer des éléments dans l'arbre. La fonction addChld ajoute un élément comme fils d'un autre élément. La fonction removeItem supprime l'élément sélectionné ainsi que tous ses fils.
<?xml version="1.0"?>
<?xml-stylesheet href="[[chrome://global/skin/]]" type="text/css"?>
<window width="500" height="500" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
onload="intl();">
<script type="application/x-javascript" src="[[chrome://test/test_view.js"/]]>
<tree id="treeTest"
flex="1">
<treecols>
<treecol id="col_0"
label="Col_0"
primary="true"
flex="1"/>
<splitter class="tree-splitter"/>
<treecol id="col_1"
label="Col_1"
flex="1"/>
<splitter class="tree-splitter"/>
<treecol id="col_2"
label="Col_2"
flex="1"/>
</treecols>
<treechildren/>
</tree>
</window>
%%%
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.