Subversion Repositories eFlore/Archives.cel-v2

Compare Revisions

Ignore whitespace Rev 39 → Rev 40

/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesFiltreVue.java
New file
0,0 → 1,241
package org.tela_botanica.client.vues;
 
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
 
import com.google.gwt.core.client.JavaScriptObject;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.Tree;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.JsObject;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Window;
import com.gwtext.client.widgets.event.ButtonListener;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.WindowListenerAdapter;
import com.gwtext.client.widgets.form.TextField;
import com.gwtext.client.widgets.layout.RowLayout;
import com.gwtext.client.widgets.layout.RowLayoutData;
import com.gwtext.client.widgets.menu.Menu;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
 
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable {
 
/**
* Le médiateur associé à la vue
*/
private ImageMediateur iMediateur = null ;
/**
* Les mots clés en cours
*/
private String motsClesEncours = "" ;
/**
* Le treepanel qui affiche l'arbre
*/
private TreePanel arbreMotsCles = null ;
/**
* Bouton rechercher
*/
private Button rechercher = null ;
/**
* booléen d'initialisation
*/
private boolean estInstancie = false ;
/**
* booléen d'etat
*/
private boolean filtreModifie = false ;
private ArbreMotsClesFiltreVue()
{
super() ;
}
public ArbreMotsClesFiltreVue(ImageMediateur im)
{
// on crée le panel
super("Mots clés") ;
this.setLayout(new RowLayout());
iMediateur = im ;
// on crée le conteneur de l'arbre
arbreMotsCles = new TreePanel() ;
// on permet le drag and drop dans l'arbre
arbreMotsCles.setEnableDD(true) ;
arbreMotsCles.setId("x-view-tree-filter") ;
arbreMotsCles.setAutoWidth(true) ;
//arbreMotsCles.setAutoScroll(true) ;
arbreMotsCles.setBorder(false) ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags") ;
root.setId("racine_filtre") ;
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setRootNode(root) ;
arbreMotsCles.setRootVisible(false) ;
arbreMotsCles.getRootNode().setIcon("tela.png") ;
arbreMotsCles.setBorder(false) ;
rechercher = new Button("Rechercher") ;
// on met en forme le layout
this.add(arbreMotsCles,new RowLayoutData("90%")) ;
this.add(rechercher,new RowLayoutData("10%")) ;
this.setBorder(false) ;
this.setCollapsible(true) ;
this.setTitleCollapse(true) ;
// on ajoute les listeners
ajouterListeners() ;
estInstancie = true ;
}
public void ajouterListeners()
{
// gestion de la validation
rechercher.addListener(new ButtonListenerAdapter() {
 
public void onClick(Button button, EventObject e) {
// on vide les mots clés en cours
motsClesEncours = "" ;
// pour chaque noeud à partir de la racine
getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
// on éxécute une fonction
public boolean execute(Node node) {
// on récupère le mot clé associé au noeud et ses infos
TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
 
String[] usObject = (String[])tn.getUserObject() ;
getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
if(tn.getUI().isChecked())
{
// et les concatène à la string des mots clés en cours
motsClesEncours += usObject[1]+"," ;
}
return true ;
}
});
// on suppose que le filtre a change
filtreModifie = true ;
// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreMotsCles()) ;
}
 
}) ;
this.addListener(new WindowListenerAdapter() {
public void onClose(Panel panel) {
arbreMotsCles.getRootNode().destroy() ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags") ;
root.setId("racine_filtre") ;
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setRootNode(root) ;
}
}) ;
}
public void rafraichir(Object nouvelleDonnees,
boolean repandreRaffraichissement) {
// si on a reçu un arbre
if(nouvelleDonnees instanceof Tree)
{
Tree nouvelArbre = (Tree)nouvelleDonnees ;
copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
getArbreMotsCles().expandAll() ;
// si l'arbre n'était pas encore considéré comme instancié
if(!estInstancie)
{
// on signale que oui
estInstancie = true ;
}
filtreModifie = false ;
setSize(200, 300) ;
show() ;
}
}
public ImageMediateur getIMediateur()
{
return iMediateur ;
}
public TreePanel getArbreMotsCles()
{
return arbreMotsCles ;
}
 
public String renvoyerNomFiltre() {
return "mots clés" ;
}
 
public String[] renvoyerValeursAFiltrer() {
String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
return valeursFiltrees ;
}
public void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
{
Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
for (int i = 0; i < ndNodeFils.length; i++) {
String[] usObj = (String[])ndNodeFils[i].getUserObject() ;
TreeNode child = new TreeNode(usObj[0]) ;
child.setIcon("tela.png") ;
child.setChecked(false);
child.setUserObject(usObj) ;
ndPereCopie.appendChild(child) ;
if(! ndNodeFils[i].isLeaf())
{
copierFilsNoeud(ndNodeFils[i],child) ;
}
}
}
 
 
public boolean renvoyerEtatFiltre() {
return filtreModifie ;
}
 
}