Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 154 → Rev 155

/trunk/src/org/tela_botanica/client/vues/ArbreMotsClesFiltreVue.java
3,20 → 3,31
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Filtrable;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.observation.ObservationMediateur;
 
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Label;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.Tree;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.Panel;
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.PanelListenerAdapter;
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.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
import com.gwtext.client.widgets.tree.event.TreeNodeListener;
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
 
/**
* fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton
32,7 → 43,13
* Le médiateur associé à la vue
*/
private ImageMediateur iMediateur = null;
/**
* Le médiateur associé à la vue
*/
private ObservationMediateur oMediateur = null;
/**
* Les mots clés en cours
*/
private String motsClesEncours = "";
40,17 → 57,28
/**
* Le treepanel qui affiche l'arbre
*/
private TreePanel arbreMotsCles = null;
private static TreePanel arbreMotsCles = null;
 
/**
* booléen d'initialisation
*/
private boolean estInstancie = false;
private boolean arbreInitialise = false;
 
/**
* booléen d'etat
*/
private boolean filtreModifie = false;
/**
* prefixe pour générer des ids adaptées
*/
private String prefixe = "_filtre" ;
private final String prefixeImg = "_images" ;
private final String prefixeObs = "_obs" ;
 
/**
* Constructeur sans argument (privé car ne doit pas être utilisé)
70,21 → 98,63
 
// on crée le panel
super();
// this.setLayout(new VerticalLayout());
iMediateur = im;
this.prefixe += prefixeImg;
Label labelRecherche = new Label("Mots clés :");
add(labelRecherche);
initialiserPanel();
}
/**
* Constructeur avec paramètres
*
* @param im
* le médiateur à associer
*/
public ArbreMotsClesFiltreVue(ObservationMediateur om) {
 
// on crée le panel
super();
oMediateur = om;
this.prefixe += prefixeObs;
initialiserPanel();
this.setLayout(new RowLayout());
 
}
public void initialiserPanel() {
// on crée le conteneur de l'arbre
Label labelRecherche = new Label("Mots clés :");
arbreMotsCles = new TreePanel();
arbreMotsCles.setId("x-view-tree-filter");
arbreMotsCles.setId("x-view-tree-filter"+prefixe);
 
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags");
root.setId("racine_filtre");
String[] usObject = { "Mots clés", "racine_filtre" };
root.setId("racine"+prefixe);
String[] usObject = { "Mots clés", "racine" };
root.setUserObject(usObject);
root.setExpandable(true);
arbreMotsCles.setRootNode(root);
arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
 
public void onClick(Node node, EventObject e) {
if(!arbreInitialise) {
expand();
}
}
 
public void onExpand(Node node) {
if(!arbreInitialise) {
obtenirArbreMotsCles();
arbreInitialise = true;
}
}
 
});
this.setPaddings(5);
 
this.setBorder(false);
91,8 → 161,6
this.setCollapsible(true);
this.setAutoWidth(true);
 
add(labelRecherche);
 
// on ajoute les listeners
ajouterListenersPanel();
estInstancie = false;
115,30 → 183,29
arbreMotsCles.setAutoScroll(true);
arbreMotsCles.setBorder(false);
 
if(estInstancie)
{
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags");
root.setId("racine_filtre");
String[] usObject = { "Mots clés", "racine_filtre" };
root.setUserObject(usObject);
arbreMotsCles.setRootNode(root);
// on met en forme le layout
((Panel) component).add(arbreMotsCles,new RowLayoutData("80%"));
if(iMediateur == null) {
Panel p = new Panel();
p.setBorder(false);
Button valider = new Button("Rechercher") ;
valider.addListener(new ButtonListenerAdapter() {
 
public void onClick(Button button, EventObject e) {
getOMediateur().obtenirNombreObservation();
}
});
p.add(valider,new RowLayoutData());
add(p);
}
arbreMotsCles.setRootVisible(true);
arbreMotsCles.setBorder(false);
 
// on met en forme le layout
((Panel) component).add(arbreMotsCles);
 
// on ajoute les listeners d'évenements
ajouterListeners();
 
// enfin on considère le composant comme instancié
estInstancie = true;
 
//obtenirArbreMotsCles();
}
 
});
}
 
158,7 → 225,7
// si on a reçu un arbre
if (nouvelleDonnees instanceof Tree) {
Tree nouvelArbre = (Tree) nouvelleDonnees;
 
// on vide tous les noeuds de l'ancien arbre
Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
for (int i = 0; i < rootChild.length; i++) {
176,11 → 243,15
estInstancie = true;
}
if(!arbreInitialise) {
arbreInitialise = true;
}
arbreMotsCles.setRootNode(arbreMotsCles.getRootNode());
 
// l'état du filtre est réinitialisé
filtreModifie = false;
show() ;
doLayout() ;
}
 
if (nouvelleDonnees instanceof TreeNode) {
187,13 → 258,13
TreeNode nd = (TreeNode) nouvelleDonnees;
 
// si le noeud n'existe pas déjà c'est un ajout
if (arbreMotsCles.getTree().getNodeById(nd.getId() + "_filtre") == null) {
if (arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe) == null) {
// donc on ne fait rien de spécial
}
// si le noeud existe déjà c'est un déplacement
else {
// alors on supprime d'abord le noeud concerné
arbreMotsCles.getTree().getNodeById(nd.getId() + "_filtre")
arbreMotsCles.getTree().getNodeById(nd.getId() +prefixe)
.remove();
}
 
201,11 → 272,11
Node ndPereOriginal = nd.getParentNode();
 
String idPereFiltre = ndPereOriginal.getId() + "_filtre";
String idPereFiltre = ndPereOriginal.getId() +prefixe;
 
String[] usObj = (String[]) nd.getUserObject();
TreeNode child = new TreeNode(usObj[0]);
child.setId(usObj[1] + "_filtre");
child.setId(usObj[1] +prefixe);
child.setChecked(false);
child.setUserObject(usObj);
arbreMotsCles.getNodeById(idPereFiltre).appendChild(child);
217,7 → 288,7
 
// si on reçoit une string
if (nouvelleDonnees instanceof String) {
String idSupp = (String) nouvelleDonnees + "_filtre";
String idSupp = (String) nouvelleDonnees +prefixe;
// c'est une suppression et si le noeud existe bien
if (arbreMotsCles.getTree().getNodeById(idSupp) != null) {
// on le supprime
236,6 → 307,10
public ImageMediateur getIMediateur() {
return iMediateur;
}
public ObservationMediateur getOMediateur() {
return oMediateur ;
}
 
/**
* Accesseur pour le panneau contenant l'arbre
262,9 → 337,17
public String[] renvoyerValeursAFiltrer() {
 
valider();
String[] valeursFiltrees = new String[2] ;
valeursFiltrees[1] = motsClesEncours;
if(iMediateur != null) {
valeursFiltrees[0] = "ci_meta_mots_cles";
}
else
{
valeursFiltrees[0] = "mots_cles";
}
 
String[] valeursFiltrees = { "ci_meta_mots_cles", motsClesEncours };
 
return valeursFiltrees;
}
 
285,7 → 368,7
 
String[] usObj = (String[]) ndNodeFils[i].getUserObject();
TreeNode child = new TreeNode(usObj[0]);
child.setId(usObj[1] + "_filtre");
child.setId(usObj[1] +prefixe);
child.setChecked(false);
child.setUserObject(usObj);
ndPereCopie.appendChild(child);
305,6 → 388,27
 
return filtreModifie;
}
public void mettreAJourMotsCles(String valeur, String id) {
if(getIMediateur() != null) {
getIMediateur().mettreAjourMotsClesId(valeur,
id);
}
else
{
getOMediateur().mettreAjourMotsClesId(valeur, id);
}
}
public void obtenirArbreMotsCles() {
if(getIMediateur() != null) {
getIMediateur().obtenirArbreMotsCles(this);
}
else
{
getOMediateur().obtenirArbreMotsCles(this);
}
}
 
public void valider() {
if (estInstancie) {
323,8 → 427,7
node.getId());
 
String[] usObject = (String[]) tn.getUserObject();
getIMediateur().mettreAjourMotsClesId(usObject[0],
usObject[1]);
mettreAJourMotsCles(usObject[0], usObject[1]);
 
if (tn.getUI().isChecked()) {
// et les concatène à la string des mots clés en
342,4 → 445,42
}
}
 
public void raz() {
// on vide tous les noeuds de l'ancien arbre
Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
for (int i = 0; i < rootChild.length; i++) {
rootChild[i].remove();
}
arbreInitialise = false ;
// on crée une racine pour l'arbre
TreeNode root = new TreeNode("Tags");
root.setId("racine"+prefixe);
String[] usObject = { "Mots clés", "racine" };
root.setUserObject(usObject);
root.setExpandable(true);
arbreMotsCles.setRootNode(root);
arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
 
public void onClick(Node node, EventObject e) {
if(!arbreInitialise) {
expand();
}
}
 
public void onExpand(Node node) {
if(!arbreInitialise) {
obtenirArbreMotsCles();
arbreInitialise = true;
}
}
});
}
 
}