extends Tree, Faire disparaître la disclosureOpenIcon si un noeud n’a pas d’enfants
February 11th, 2009
Une fois n’est pas coutume, pour obtenir le résultat voulu avec un composant flex, il est nécessaire de l’étendre.
Le composant Tree affiche par défaut une flèche devant chaque dossier, cette flêche est dirrigée vers la droite quand le dossier est fermé et vers le bas quand le dossier est ouvert. Malhereusement, si le dossier est vide, la flèche vers la droite s’affiche quand même.
Voici ma version de la classe Tree qui permet de remédier à ce problème :
Making the disclosureOpenIcon of an empty node ( of an mx:Tree ) disappear if children is empty :
package org.plpage.uicontrol.tree { import mx.controls.Tree; import mx.controls.treeClasses.TreeListData; import mx.core.mx_internal; use namespace mx_internal; public class PlpageTree extends Tree { public function PlpageTree() { super(); } override protected function initListData(item:Object, treeListData:TreeListData):void { if (item == null) return; var open:Boolean = isItemOpen(item); var branch:Boolean = dataDescriptor.isBranch(item); var uid:String = itemToUID(item); // this is hidden by non-branches but kept so we know how wide it is so things align if ( item.children.length < 1 ) { treeListData.disclosureIcon = InvisibleDisclosureItem; } else { treeListData.disclosureIcon = getStyle(open ? "disclosureOpenIcon" : "disclosureClosedIcon"); } treeListData.open = open; treeListData.hasChildren = branch; treeListData.depth = mx_internal::getItemDepth(item, treeListData.rowIndex); treeListData.indent = (treeListData.depth - 1) * getStyle("indentation"); treeListData.item = item; treeListData.icon = itemToIcon(item); } } } import mx.controls.Button; class InvisibleDisclosureItem extends Button { public function InvisibleDisclosureItem() { super(); width = 15; height = 0; visible = false; } }