Rev 28 | Rev 38 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;
import java.util.HashMap;
import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.ExtElement;
import com.gwtext.client.data.Node;
import com.gwtext.client.data.NodeTraversalCallback;
import com.gwtext.client.data.Tree;
import com.gwtext.client.dd.DD;
import com.gwtext.client.dd.DragData;
import com.gwtext.client.dd.DragDrop;
import com.gwtext.client.widgets.BoxComponent;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.Container;
import com.gwtext.client.widgets.Editor;
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.ComponentListener;
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.EditorListener;
import com.gwtext.client.widgets.event.EditorListenerAdapter;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.form.Field;
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.DropNodeCallback;
import com.gwtext.client.widgets.tree.TreeEditor;
import com.gwtext.client.widgets.tree.TreeNode;
import com.gwtext.client.widgets.tree.TreePanel;
import com.gwtext.client.widgets.tree.event.TreePanelListener;
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
private ImageMediateur iMediateur = null ;
private TreePanel arbreMotsCles = null ;
private TreeEditor te = null ;
private TextField tfEdit = null ;
private Button valider = null ;
private String motsClesEnCours = "" ;
private String[] motsClesEnAttente ;
private boolean ajoutNoeud = false ;
private boolean modifNoeud = false ;
private boolean estInstancie = false ;
private boolean motsCleInitialises ;
public ArbreMotsClesVue(ImageMediateur im)
{
super("Mots clés") ;
this.setLayout(new RowLayout());
iMediateur = im ;
arbreMotsCles = new TreePanel() ;
arbreMotsCles.setEnableDD(true) ;
TreeNode root = new TreeNode("Tags") ;
root.setId("racine") ;
String[] usObject = {"Mots clés" , "racine" } ;
root.setUserObject(usObject) ;
arbreMotsCles.setRootNode(root) ;
arbreMotsCles.setRootVisible(false) ;
arbreMotsCles.getRootNode().setIcon("tela.png") ;
tfEdit = new TextField() ;
te = new TreeEditor(arbreMotsCles,tfEdit) ;
valider = new Button("Appliquer") ;
arbreMotsCles.add(te) ;
this.add(arbreMotsCles,new RowLayoutData("90%")) ;
this.add(valider,new RowLayoutData("10%")) ;
ajouterListeners() ;
}
private ImageMediateur GetIMediateur() {
return iMediateur ;
}
/**
* @return the arbreMotsCles
*/
public TreePanel getArbreMotsCles() {
return arbreMotsCles;
}
/**
* @return the te
*/
public TreeEditor getTe() {
return te;
}
/**
* @return the tfEdit
*/
public TextField getTfEdit() {
return tfEdit;
}
public void ajouterListeners()
{
arbreMotsCles.addListener(new TreePanelListenerAdapter() {
public void onClick(TreeNode node, EventObject e) {
e.stopEvent() ;
gererClicNoeud(node);
}
public void onContextMenu(TreeNode node, EventObject e) {
e.stopEvent() ;
GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
}
public void onDblClick(TreeNode node, EventObject e) {
modifNoeud = true ;
te.startEdit(node);
}
public void onTextChange(TreeNode node, String text, String oldText) {
TreeNode nd = node ;
String[] usObject = new String[2] ;
usObject[0] = text ;
usObject[1] = ((String[])nd.getUserObject())[1] ;
nd.setUserObject(usObject) ;
if(ajoutNoeud)
{
GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
ajoutNoeud = false ;
}
else
{
modifNoeud = false ;
GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
}
}
public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
{
GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
}
public void onCheckChange(TreeNode node, boolean checked) {
if(checked)
{
node.bubble(new NodeTraversalCallback() {
public boolean execute(Node node)
{
TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
tn.getUI().toggleCheck(true) ;
return true ;
}
}) ;
}
}
}) ;
valider.addListener(new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
motsClesEnCours = "" ;
getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
public boolean execute(Node node) {
TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
String[] usObject = (String[])tn.getUserObject() ;
GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
if(tn.getUI().isChecked())
{
motsClesEnCours += usObject[1]+"," ;
}
return true ;
}
});
GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
}
}) ;
}
public void obtenirArbreMotsCles() {
GetIMediateur().obtenirArbreMotsCles(this) ;
}
public void supprimerNoeud(TreeNode n)
{
if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
{
n.getParentNode().removeChild(n);
n.destroy() ;
GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
}
else
{
Window.alert("Impossible de supprimer la racine de l'arbre") ;
}
}
public void ajouterNoeud(TreeNode parent)
{
ajoutNoeud = true ;
TreeNode nd = new TreeNode("");
nd.setIcon("tela.png") ;
nd.setChecked(true);
String[] usObject = new String[2] ;
usObject[0] = "" ;
usObject[1] = Integer.toString(nd.hashCode()) ;
nd.setId(usObject[1]) ;
nd.setUserObject(usObject) ;
parent.appendChild(nd);
parent.expand();
te.startEdit(nd);
}
public void gererClicNoeud(TreeNode node)
{
if(node.getUI().isChecked())
{
node.getUI().toggleCheck(false) ;
}
else
{
node.getUI().toggleCheck(true) ;
}
}
public void cocherMotsCles(final String[] motsClesIds)
{
if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
{
getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
public boolean execute(Node node) {
for(int i = 0 ; i < motsClesIds.length ; i++)
{
String usObject[] = (String[])node.getUserObject() ;
String nodeId = usObject[1] ;
getArbreMotsCles().getNodeById(node.getId()).getUI().toggleCheck(false) ;
if(nodeId.equals(motsClesIds[i]))
{
getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
return true ;
}
}
return true;
}
}) ;
}
}
public void rafraichir(Object nouvelleDonnees,
boolean repandreRafraichissement) {
if(nouvelleDonnees instanceof Tree)
{
Tree nouvelArbre = (Tree)nouvelleDonnees ;
getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
getArbreMotsCles().expandAll() ;
estInstancie = true ;
if(motsCleInitialises == false && motsClesEnAttente != null)
{
cocherMotsCles(motsClesEnAttente) ;
motsCleInitialises = true ;
}
}
if(nouvelleDonnees instanceof String[])
{
if(estInstancie && nouvelleDonnees != null)
{
String[] motsClesIds = (String[])nouvelleDonnees ;
cocherMotsCles(motsClesIds) ;
}
else
{
motsClesEnAttente = (String[])nouvelleDonnees ;
}
}
}
}