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; |
} |
} |
}); |
} |
|
} |