Écrit par Neil Deakin
,
mise à jour par les contributeurs à MDC
.
Traduit par Durandal (13/08/2004), mise à jour par Alain B. (04/04/2007) .
Page originale :
http://developer.mozilla.org/en/docs/XUL_Tutorial/Styling_a_Tree
Attention : Ce tutoriel est ancien et n'est pas mis à jour. Bien que beaucoup d'informations soient encore valables pour les dernières versions de gecko, beaucoup sont aussi obsolètes. Il est préférable d'aller consulter cette page sur la version française de ce tutoriel sur developer.mozilla.org.
Cette section explique comment styler un arbre.
Vous pouvez styler la bordure de l'arbre et les en-têtes de colonnes de la
même manière que pour d'autres éléments. Les styles ajoutés à l'élément tree
seront appliqués à l'arbre entier. L'ajout d'un style à l'élément treecol
ne l'applique
pas à la colonne mais seulement à son en-tête.
Le corps de l'arbre doit être stylé d'une manière un peu différente des
autres éléments, parce que le corps de l'arbre est stocké d'une manière
différente des autres éléments. Le treechildren
extérieur est le seul vrai élément du corps de l'arbre. Les éléments intérieurs
n'ont qu'un rôle de conteneurs.
Vous devez donc utiliser l'attribut properties
sur les lignes ou les cellules pour modifier une ou plusieurs propriétés
nommées. Cet attribut peut être utilisé avec des arbres à contenu statique, produit
par RDF ou avec des arbres à vue personnalisée. Supposons que nous voulions
donner une couleur de fond bleue à une ligne particulière, comme il est
possible de le remarquer sur les libellés dans la messagerie de Mozilla. Nous allons utiliser une
propriété appelée makeItBlue. Vous pouvez utiliser le nom que vous voulez.
Vous pouvez modifier plusieurs propriétés en les séparant par des espaces.
Modifiez la propriété sur une ligne ou une cellule, comme dans l'exemple suivant :
<treerow properties="makeItBlue">
La feuille de styles peut récupérer cette propriété et l'utiliser pour changer l'apparence d'une ligne pour les messages non lus ou les libellés. Les propriétés fonctionnent en quelque sorte comme les classes de style, bien qu'elles nécessitent une syntaxe un peu plus complexe à utiliser dans une feuille de styles. En effet, il est possible de spécifier un style pour chaque partie d'une cellule. Vous pouvez styler non seulement la cellule et son texte, mais aussi le "twisty" (NdT : petit '+' ou '-' permettant de développer et replier l'arborescence) et l'indentation. La syntaxe à utiliser est la suivante :
treechildren::-moz-tree-row(makeItBlue)
{
background-color: blue;
}
Ce pseudo-style spécial est utilisé pour styler la couleur de fond des
lignes qui ont la propriété makeItBlue. Cette syntaxe spéciale est nécessaire
parce que les cellules elles-mêmes ne sont pas des éléments séparés. Tout le
contenu intérieur au corps de l'arbre obtient son rendu par l'élément
treechildren
.
Cependant, CSS dispose d'un concept pour accéder aux parties des éléments en les considérant comme des pseudo-éléments.
Ce sélecteur correspond à quelques lignes de l'arbre à l'intérieur de l'élément treechildren
comme pseudo-élément.
Le pseudo-style définit des règles de style pour des parties
particulières de ce qu'il affiche. Cette règle de style signifie, dans un
élément treechildren
:
mettre une couleur de fond bleue à toutes les lignes de
l'arbre qui ont la propriété makeItBlue.
Le texte ::-moz-tree-row spécifie quelle est la zone de contenu désirée, qui est dans ce cas une ligne. Vous pouvez aussi utiliser les valeurs suivantes :
::-moz-tree-cell
::-moz-tree-cell-text
::-moz-tree-twisty
::-moz-tree-image
list-style-image
.::-moz-tree-row
::-moz-tree-indentation
::-moz-tree-column
::-moz-tree-line
::-moz-tree-separator
::-moz-tree-progressmeter
type
de la colonne à progressmeter.::-moz-tree-drop-feedback
::-moz-tree-checkbox
Vous pouvez tester la présence de plusieurs propriétés en les séparant par des virgules. L'exemple ci-dessous met une couleur de fond grise aux lignes qui ont les propriétés readonly et unread. Pour les propriétés qui sont readonly, il ajoute une bordure rouge autour de la ligne. Notez que la première règle s'appliquera à toute ligne qui est readonly, peu importe la présence d'autres propriétés comme unread.
treechildren::-moz-tree-row(readonly)
{
border: 1px solid red;
}
treechildren::-moz-tree-row(readonly, unread)
{
background-color: rgb(80%, 80%, 80%);
}
La liste des propriétés des éléments tree
contient un petit nombre de
propriétés par défaut que vous pouvez aussi utiliser dans une feuille de styles.
Vous pouvez utiliser ces propriétés supplémentaires pour modifier l'apparence
des conteneurs ou des lignes sélectionnées. Les propriétés suivantes sont
modifiées automatiquement en cas de besoin :
focus
selected
current
container
leaf
open
closed
primary
sorted
even
odd
even
vous permettent, par exemple, d'alterner les
couleurs entre chaque ligne.dragSession
dropOn
dropBefore
dropAfter
progressNormal
progressUndetermined
progressNone
Les propriétés sont mises pour les lignes ou les cellules d'une ligne à
l'état correspondant. Pour les colonnes et les cellules, une propriété
additionnelle, l'id
de la colonne ou la colonne
dans laquelle est la cellule, sera mise.
Pour les arbres générés par RDF, vous pouvez utiliser la même syntaxe. Cependant, vous affecterez souvent les propriétés en vous basant sur des valeurs de la source de données.
Pour des arbres avec un script de vue personnalisée, vous pouvez modifier des
propriétés en fournissant les fonctions getRowProperties()
,
getColumnProperties()
et getCellProperties()
dans la vue. Elles renvoient des
informations à propos d'une ligne, d'une colonne et d'une cellule individuelle.
Les arguments à ces fonctions indiquent quelle ligne et/ou colonne. Le dernier
argument de chacune de ces fonctions est une liste de propriétés que la vue est
supposée remplir avec une liste de propriétés. La fonction getColumnProperties()
fournit aussi l'élément treecol
correspondant pour la colonne.
getRowProperties : function(row,prop){}
getColumnProperties : function(column,columnElement,prop){}
getCellProperties : function(row,column,prop){}
Regardons un exemple de modification d'une cellule spécifique. Rendons le
texte bleu une ligne sur quatre, en utilisant l'exemple d'une section
précédente. Nous allons avoir besoin d'ajouter du code à la fonction
getCellProperties()
pour ajouter une propriété makeItBlue aux cellules toutes les quatres lignes
(Nous n'utilisons pas getRowProperties()
puisque la couleur
du texte ne sera pas héritée dans chaque cellule).
L'objet properties
qui est passé en dernier argument de getCellProperties()
est
un objet XPCOM qui implémente nslSupportsArray
. Il s'agit en fait une version
XPCOM d'un tableau. Il contient une fonction AppendElement()
qui peut être
utilisée pour ajouter un élément au tableau. Nous pouvons utiliser l'interface
nslAtomService
pour construire des atomes de chaînes pour les propriétés.
getCellProperties: function(row,col,props){
if ((row %4) == 0){
var aserv=Components.classes["@mozilla.org/atom-service;1"].
getService(Components.interfaces.nsIAtomService);
props.AppendElement(aserv.getAtom("makeItBlue"));
}
}
Cette fonction sera définie comme partie d'un objet de vue. Elle vérifie
d'abord quelle ligne est demandée et affecte une propriété pour les cellules toutes les quatres lignes.
La liste des propriétés nécessite un tableau d'objets atom
qui peuvent être considérés comme des chaînes de caractères constantes. Nous les
créons en utilisant l'interface XPCOM nslAtomService
et nous les ajoutons au
tableau en utilisant la fonction AppendElement()
. Ici, nous créons un atome
makeItBlue. Vous pouvez appeler AppendElement()
à nouveau pour ajouter des
propriétés additionnelles.
treechildren::-moz-tree-row(selected) { background-color: #FFFFAA; }
treechildren::-moz-tree-row(odd) { background-color: #EEEEEE; }
treechildren::-moz-tree-row(odd, selected) { background-color: #FFFFAA; }
treechildren::-moz-tree-cell-text(selected) { color: #000000; }
treechildren::-moz-tree-cell-text(odd, selected) { color: #000000; }
Dans la suite, nous allons voir comment modifier le thème par défaut.
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.