Tree avec recherche pour afficher un xml.

Soyez le premier à donner votre avis sur cette source.

Vue 11 609 fois - Téléchargée 2 160 fois

Description

En plein développement du site communautaire wiki.media-box.net, on inclus le dictionnaire ActionScript. Voici donc un Arbre, utilisant le composant Tree de Flash MX 2004 pro affichant la structure d'un fichier XML.

J'ai aussi créé une fonction permettant d'afficher uniquement les noeuds dont le nom contient un mot entré par l'utilisateur.

Source / Exemple :


/**

  • Classe com.wikimb.TreeDoc
  • Auteur: SuperDevy ( www.tibulle.com )
  • Version: alpha 1.0
  • Date: 29 mai 2005
  • Flash MX 2004 pro requis
  • Classe applicative crée pour le wiki media-box.
  • Trois composants doivent être déposés : Tree, TextInput, CheckBox.
    • /
import mx.controls.Tree import mx.controls.TextInput import mx.controls.CheckBox class com.wikimb.TreeDoc { public var datasXML:XML; public var searchXML:XML; public var tree:Tree; public var input:TextInput; public var checkbox:CheckBox; public var onSelect:Function; //---o Constructeur public function TreeDoc (tree:Tree, input:TextInput, checkbox:CheckBox) { //---< Enregistrement des composants this.tree = tree; this.input = input; this.checkbox = checkbox; //---< Accessibilité input.tabIndex = 0; checkbox.tabIndex = 1; tree.tabIndex = 2; input._accProps.name = "Recherche"; //---< Alignement resize(); Stage.align = "TL"; Stage.scaleMode = "noScale"; } //---o Initialisation une fois le chargement effectué public function initialize (Void) :Void { trace("Initialisation"); var local = this; //---< Tree (Liste) tree.dataProvider = datasXML.cloneNode(true); var event_tree:Object = new Object(); event_tree.change = function () { var item:XMLNode = local.tree.selectedNode; if (!item.hasChildNodes()) { local.onSelect(item); } } tree.addEventListener("change", event_tree); //---< TextInbox (Recherche) var event_input:Object = new Object(); event_input.enter = function () { local.search(local.input.text); } event_input.change = function () { if (local.checkbox.selected) { local.search(local.input.text); } } input.addEventListener("enter", event_input); input.addEventListener("change", event_input); //---< Stage (Redimentionnement) var event_stage:Object = new Object(); event_stage.onResize = function () { local.resize(); } Stage.addListener(event_stage); } //---o Chargement des données XML function load (url:String) :Void { var local = this; datasXML = new XML(); datasXML.ignoreWhite = true; datasXML.onLoad = function() { trace("Chargement terminé"); local.initialize(); } datasXML.load(url); } //---o Recherche (initialisation) public function search (text:String) :Void { trace("Recherche pour le mot " + text); var t = getTimer(); var local = this; if (text!="") { local.searchXML = new XML(); var addNode = function (child) { local.searchXML.appendChild(child.cloneNode(false)); }; rec_search(datasXML, text, addNode); tree.dataProvider = local.searchXML; } else { local.searchXML = null; tree.dataProvider = local.datasXML.cloneNode(true); } trace("Temps de la recherche " + (getTimer()-t) + " ms"); } //---o Recherche (exploration récursive) private function rec_search (node:XMLNode, text:String, action:Function) :Void { var childs = node.childNodes; var i:Number = 0; while (childs[i]!=undefined) { if (childs[i].hasChildNodes()) { rec_search(childs[i], text, action); } else { if (containText(childs[i].attributes.label, text)) { action(childs[i]); } } i++; } } //---o Regarde si un mot est présent dans une phrase. public function containText (sentence:String, word:String) :Boolean { return (sentence.toLowerCase().split(word.toLowerCase(), 2).length > 1); } //---o Redimentionnement pour coller aux bords public function resize (Void) :Void { trace("Redimentionnement"); this.tree.setSize(Stage.width, Stage.height-24); this.input.setSize(Stage.width-22, 22); } } // ---> by SuperDevy <---

Conclusion :


Source à paufiner...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
36
Date d'inscription
vendredi 12 juin 2009
Statut
Membre
Dernière intervention
12 juillet 2009

Félicitation :

Bonjour, même si le code date un peu (2005) il reste très utile comme en témoigne les messages qui datent, eux, de 2009. Pour ma part, je ne suis pas développeur professionnel, et mes questions ne sont pas au niveau ,je tente ma chance quand même...

Question :

Comme plusieurs internautes je souhaiterais savoir comment intégrer des liens à un nœud, ou éventuellement des animations type chargement de swf sur la scène principale...

Contexte :

J'ai Flash CS3, mais le code fonctionne très bien si on on édite le fla en As2 et player 7...

En faisant mes excuses de ne pas pouvoir pour le moment contribuer à l'amélioration de ce code,

Bonne continuation à tous,

Tristan
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

punaise j'y reviens à cette source, elle est top !!
Messages postés
745
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015

Super bô. Est-il possible d'afficher une image pour chaque contenu de dossier? Si on clique sur le premier "fichier" du dossier "A", afficher une image pour illustrer etc... ?
Messages postés
358
Date d'inscription
dimanche 8 février 2004
Statut
Modérateur
Dernière intervention
9 octobre 2017
1
très belle source, bien documentée.
Messages postés
18
Date d'inscription
lundi 6 août 2007
Statut
Membre
Dernière intervention
14 juin 2009

c'est quoi "tree"?
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.