Tree avec recherche pour afficher un xml.

Soyez le premier à donner votre avis sur cette source.

Vue 11 571 fois - Téléchargée 2 142 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

tristancoindet
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
vegetalain
Messages postés
746
Date d'inscription
mardi 25 mars 2003
Statut
Membre
Dernière intervention
14 juillet 2015
-
punaise j'y reviens à cette source, elle est top !!
vegetalain
Messages postés
746
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... ?
tempusus
Messages postés
363
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.
cs_jojoo
Messages postés
18
Date d'inscription
lundi 6 août 2007
Statut
Membre
Dernière intervention
14 juin 2009
-
c'est quoi "tree"?

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.