Rev 2062 | Blame | Compare with Previous | Last modification | View Log | RSS feed
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 org.tela_botanica.client.observation.ObservationMediateur;import org.tela_botanica.client.util.MotsClesUtilitaire;import com.gwtext.client.core.EventObject;import com.gwtext.client.data.Node;import com.gwtext.client.data.Tree;import com.gwtext.client.widgets.Component;import com.gwtext.client.widgets.Panel;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.tree.MultiSelectionModel;import com.gwtext.client.widgets.tree.TreeNode;import com.gwtext.client.widgets.tree.TreePanel;import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;/*** fenêtre de recherche affichant l'arbre des mots clés en lecture et un bouton* cliquable** @author aurelien**/public class ArbreMotsClesFiltreVue extends Panel implements Rafraichissable,Filtrable {/*** 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 = "";/*** Le treepanel qui affiche l'arbre*/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é)*/@SuppressWarnings("unused")private ArbreMotsClesFiltreVue() {super();}/*** Constructeur avec paramètres** @param im* le médiateur à associer*/public ArbreMotsClesFiltreVue(ImageMediateur im) {// on crée le panelsuper();iMediateur = im;this.prefixe += prefixeImg;initialiserPanel();}/*** Constructeur avec paramètres** @param im* le médiateur à associer*/public ArbreMotsClesFiltreVue(ObservationMediateur om) {// on crée le panelsuper();oMediateur = om;this.prefixe += prefixeObs;initialiserPanel();this.setLayout(new RowLayout());}public void initialiserPanel() {// on crée le conteneur de l'arbrearbreMotsCles = new TreePanel();arbreMotsCles.setId("x-view-tree-filter"+prefixe);MultiSelectionModel msModel = new MultiSelectionModel();arbreMotsCles.setSelectionModel(msModel);// on crée une racine pour l'arbreTreeNode root = new TreeNode("Tags");root.setId("racine"+prefixe);String[] usObject = { "Mots clés", "racine"+prefixe };root.setUserObject(usObject);root.setExpandable(true);arbreMotsCles.setRootNode(root);arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {@Overridepublic void onClick(Node node, EventObject e) {if(!arbreInitialise) {expand();}}@Overridepublic void onExpand(Node node) {if(!arbreInitialise) {obtenirArbreMotsCles();arbreInitialise = true;}}});this.setPaddings(5);this.setBorder(false);this.setCollapsible(true);this.setAutoWidth(true);// on ajoute les listenersajouterListenersPanel();estInstancie = false;}/*** Ajoute les listeners pour le rendu du panel*/private void ajouterListenersPanel() {this.addListener(new PanelListenerAdapter() {// on instancie réellement les composants au moment du rendu pour// accélérer l'affichage// et éviter des bugs@Overridepublic void onRender(Component component) {// on interdit le drag and drop dans l'arbrearbreMotsCles.setEnableDD(false);arbreMotsCles.setAutoWidth(false);arbreMotsCles.setAutoScroll(true);arbreMotsCles.setBorder(false);// on met en forme le layout((Panel) component).add(arbreMotsCles,new RowLayoutData("80%"));// on ajoute les listeners d'évenementsajouterListeners();//obtenirArbreMotsCles();}});}/*** ajoute les listeners pour les boutons et le cochage des mots clés*/private void ajouterListeners() {arbreMotsCles.addListener(new TreePanelListenerAdapter() {// gestion du clic sur un noeud@Overridepublic void onClick(TreeNode node, EventObject e) {e.stopEvent();boolean multi = false;if(e.hasModifier()) {multi = true;}gererClicNoeud(node,multi);}});}/*** Fonction de gestion sur le clic sur le noeud** @param node*/public void gererClicNoeud(TreeNode node, boolean multi) {if(!arbreInitialise) {obtenirArbreMotsCles();} else {if(node.equals(arbreMotsCles.getRootNode())) {arbreMotsCles.getSelectionModel().clearSelections();} else {((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);}filtreModifie = true;iMediateur.obtenirPhotoGalerie();}}/*** Méthode héritée de l'interface rafraichissable*/@Overridepublic void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {// si on a reçu un arbreif (nouvelleDonnees instanceof Tree) {Tree nouvelArbre = (Tree) nouvelleDonnees;// on vide tous les noeuds de l'ancien arbreNode[] rootChild = arbreMotsCles.getRootNode().getChildNodes();for (int i = 0; i < rootChild.length; i++) {rootChild[i].remove();}// et on recopie le nouvel arbreMotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode(), false);// si l'arbre n'était pas encore considéré comme instanciéif (!estInstancie) {// on signale que ouiestInstancie = true;}if(!arbreInitialise) {arbreInitialise = true;}arbreMotsCles.setRootNode(arbreMotsCles.getRootNode());// l'état du filtre est réinitialiséfiltreModifie = false;doLayout() ;}}/*** Accesseur pour le médiateur** @return le médiateur associé*/public ImageMediateur getIMediateur() {return iMediateur;}public ObservationMediateur getOMediateur() {return oMediateur ;}/*** Accesseur pour le panneau contenant l'arbre** @return le panneau de l'arbre des mots clés*/public TreePanel getArbreMotsCles() {return arbreMotsCles;}/*** Méthode héritée de Filtrable renvoie le nom du filtre*/@Overridepublic String renvoyerNomFiltre() {return "mots clés";}/*** Renvoie un tableau contenant le nom du champ à filtrer et la valeur** @return un tableau contenant le nom du champ à filtrer et sa valeur*/@Overridepublic String[] renvoyerValeursAFiltrer() {String val = "";TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();for(int i = 0; i< noeuds.length ; i++) {if(noeuds[i].getDepth() > 0) {String[] userObj = (String[])noeuds[i].getUserObject();String idMotCle = noeuds[i].getId();if(userObj != null && userObj[1] != null) {idMotCle = userObj[1];}val += ";"+idMotCle;}}val = val.replaceFirst(";", "");String[] valeursFiltres = {"id_mots_cles", val};return valeursFiltres;}/*** Méthode héritée de Filtrable Renvoie l'état du filtre (modifié ou non)*/@Overridepublic boolean renvoyerEtatFiltre() {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);}}@Overridepublic void valider() {if (estInstancie) {// on vide les mots clés en coursmotsClesEncours = "";// on suppose que le filtre a changefiltreModifie = true;}}public void raz() {if(arbreInitialise) {// on vide tous les noeuds de l'ancien arbreNode[] rootChild = arbreMotsCles.getRootNode().getChildNodes();for (int i = 0; i < rootChild.length; i++) {rootChild[i].remove();}arbreInitialise = false ;// on crée une racine pour l'arbreTreeNode root = new TreeNode("Tags");root.setId("racine"+prefixe);String[] usObject = { "Mots clés", "racine"+prefixe };root.setUserObject(usObject);root.setExpandable(true);arbreMotsCles.setRootNode(root);arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {@Overridepublic void onClick(Node node, EventObject e) {if(!arbreInitialise) {expand();}}@Overridepublic void onExpand(Node node) {if(!arbreInitialise) {obtenirArbreMotsCles();arbreInitialise = true;}}});}}@Overridepublic void viderFiltre() {motsClesEncours = "";arbreMotsCles.getSelectionModel().clearSelections();}}