Forums Développement Multimédia

Aller au contenu

Une alternative au composant Tree de FLEX

CODE Actionscript

2 réponses à ce sujet

#1 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 12 August 2007 - 14:32 PM

Hello tout le monde,

J'avais besoin d'utiliser le composant Tree dans un projet AS3. Malheur ! Celui ci n'existe plus, je me suis donc tourné tant bien que mal du coté de FLEX (ce qui m'a permis d'apprehender AIR mais c'est une autre histoire...) qui dispose du composant Tree. Et depuis, tout n'est qu'enervement !!! icon_evil.gif
Je trouve ce composant vraiment compliqué à utiliser (c'est surement moi qui l'utilise mal, mais tout de même...).
Bref, apres m'etre cassé les dents 4 jours sur ce fucking tree, j'ai décidé hier apres-midi d'en fabriquer un autre, plus simple.
Et bien ca y est ! J'ai mon Tree qui marche ! Youpi ! J'en sauterais de joie si je n'avais pas la flemme de me lever icon_mrgreen.gif
Evidemment, ce n'est pas exactement le meme Tree que macromedia, il n'y a pas d'animation quand on ouvre un dossier par exemple (c'est faisable cela dit), mais je considere qu'un outil d'admin n'a pas besoin de ce genre de froufrou. En contrepartie, il est tres facile de lister l'integralité des elements du tree, du fait que tout le composant repose sur un seul tableau a une seule dimension.


Voila la liste des propriétés/methode :
Citation
//PROPRIETES :

get --> treeContener : renvoi le root du Tree (considéré comme un folder);

get --> selectedItem : renvoi l'element actuellement selectionné (soit un TreeFile,
soit un TreeFolder);

get --> tabMc : renvoi un tableau qui contient l'integralité des elements du Tree


//METHODES :
- addFile(titre:String,parentMc:*,data:*=null):TreeFile
--> titre : le label affiché
--> parentMc : soit une occurence de TreeFolder, soit une occurence de treeContener(si on pose un element sur le root);
--> data : un objet quelconque;
La methode 'addFile' renvoit un objet TreeFile correspondant au fichier venant d'etre ajouté

- addFolder(titre:String,parentMc:*,data:*=null):TreeFolder
--> titre : le label affiché
--> parentMc : soit une occurence de TreeFolder, soit une occurence de treeContener(si on pose un element sur le root);
--> data : un objet quelconque;
La methode 'addFolder' renvoit un objet TreeFolder correspondant au dossier venant d'etre ajouté

- copy(element:*,folder:*):*
--> element : une occurence de TreeFile ou de TreeFolder;
--> folder : une occurence de TreeFolder ou de treeContener
La methode 'copy' renvoit un objet TreeFile ou TreeFolder correspondant à l'element copié (la copie, pas l'element de base)

- cutElementTo(element:*,folder:*):*
--> element : une occurence de TreeFile ou de TreeFolder;
--> folder : une occurence de TreeFolder ou de treeContener
La methode 'cutElementTo' renvoit un objet TreeFile ou TreeFolder correspondant à l'element déplacé

- remove(element:*):void
--> element : une occurence de TreeFile ou de TreeFolder;

- clearElements():void
La methode 'clearElements' correspond a removeChild de tout les élément du Tree.
Attention, les éléments ne sont pas effacés, ils sont juste invisibles.

- drawTree():void
La methode 'drawTree' effectue les addChilds necessaire pour afficher les éléments situé dans des folder ouvert (le root est necessairement ouvert);

- redraw():void
La methode 'redraw' contient la methode 'clearElement' suivi de la methode 'drawTree'


Voila un exemple d'utilisation :

Action Script


package {
import flash.display.Sprite;
import Tom.flashComponents.TreeTools;
import Tom.flashComponents.TreeContener;
import Tom.flashComponents.TreeFolder;
import Tom.flashComponents.TreeFile;
[SWF( backgroundColor='0xffffff', frameRate='30', width='800', height='600')]
public class treeComponent extends Sprite
{
private var tree:TreeTools;
public function treeComponent()
{
var large : Number = 200;
var haut : Number = 300;
//jai pas géré le masque ni la scrollbar
tree = new TreeTools(large,haut);
tree.x = Tree.y = 10
addChild(tree);
var contener : treeContener = Tree.TreeContener;
var folder:TreeFolder = Tree.addFolder("folder1",contener);
tree.addFile("file0",folder);
tree.addFile("file1",folder);
var folder2:TreeFolder = Tree.addFolder("folder2",folder);
tree.addFile("f0",folder2);
tree.addFile("f1",folder2);
var folder3 : TreeFolder = Tree.addFolder("folder3",folder2);
tree.addFile("f0",folder3);
var fichier : TreeFile = Tree.addFile("f1",folder3);
var folder4 : TreeFolder = Tree.addFolder("folder4",folder3);
tree.addFile("f0",folder4);
tree.addFile("f1",folder4);
tree.addFile("titre1",contener);

tree.copy(folder2,contener);
//tree.remove(fichier);
//tree.remove(folder);
tree.clearElements()
tree.drawTree();
tree.onSelectItem = onSelectItem;

}
private function onSelectItem():void{
trace("SELECT = "+tree.selectedItem);
}
}
}

En esperant que ca aide quelques personnes,
voici les sources :

Fichier(s) joint(s)

  • Fichier joint  Tom.zip   5.32 Ko   49 téléchargement(s)

Modifié par tlecoz, 18 May 2009 - 21:14 PM.


#2 programmeur_maniaque

    Ceinture Noire

  • Members
  • PipPipPipPipPipPipPip
  • 290 messages

Posté 12 August 2007 - 15:18 PM

pourquoi ne pas lui faire étendre la classe mx.core.UIComponent ?
ca te permettrait de disposer de méthodes/propriétés/évènements/styles beaucoup plus avancés car la classe UIComponent est la mère de tous les composants graphique.

par exemple ca t'éviterais de devoir passer la largeur/hauteur dans le constructeur de ta classe puisqu'un simple width/height ferait l'affaire.
pareil pour drawTree() et redraw() qui existe déjà dans UIComponent -> drawNow() ou validateNow()

Modifié par programmeur_maniaque, 12 August 2007 - 15:19 PM.


#3 tlecoz

  • Honoris
  • PipPipPipPipPipPipPipPip
  • 3486 messages

Posté 13 August 2007 - 09:59 AM

CITATION
pareil pour drawTree() et redraw() qui existe déjà dans UIComponent -> drawNow() ou validateNow()


C'est vrai mais autant en AS2, je faisais des extends UIComponent pour me faire des composant en LivePreview, autant depuis que j'ai decouvert flex builder (en tant qu'environnement de programmation), je n'ouvre plus jamais flash, donc les composants Live Preview....Je m'en fous un peu....



1 utilisateur(s) li(sen)t ce sujet

0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)

authorised training centre

Centre de Formation Mediabox - Adobe et Apple Authorised Training Center.

Déclaré auprès de la Direction du Travail et de la Formation Professionnelle

Mediabox : SARL au capital de 62.000€ - Numéro d'activité : 11 75 44555 75 - SIRET : 49371646800035

MEDIABOX, 23, rue de Bruxelles, 75009 PARIS

FFP