2,6 → 2,8 |
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.google.gwt.user.client.Window; |
import com.gwtext.client.core.EventObject; |
import com.gwtext.client.data.Node; |
94,6 → 96,8 |
|
MultiSelectionModel msModel = null; |
|
private String cheminTemporaireAjout = null; |
|
/** |
* Constructeur sans paramètre (privé car interdit d'utilisation) |
*/ |
243,6 → 247,8 |
* Ajoute les listeners nécessaires pour la gestion des évènements |
*/ |
private void ajouterListeners() { |
|
final Rafraichissable r = this; |
arbreMotsCles.addListener(new TreePanelListenerAdapter() { |
|
// gestion du clic sur un noeud |
292,7 → 298,7 |
// on notifie le médiateur de l'ajout et on lui passe |
// l'arbre |
getOMediateur().ajouterMotCleDansArbre(nd, |
getArbreMotsCles().getTree()); |
getArbreMotsCles().getTree(), r); |
// et considère l'ajout achevé |
ajoutNoeud = false; |
} |
307,7 → 313,7 |
modifNoeud = false; |
} |
} |
|
arbreMotsCles.disable(); |
} |
|
// gestion du déplacement d'un noeud |
442,8 → 448,8 |
String[] usObject = new String[2]; |
// l'objet contient le nom du noeud |
usObject[0] = ""; |
usObject[1] = genererIdMotCle(nd); |
nd.setId(usObject[1]); |
usObject[1] = ""; |
|
nd.setUserObject(usObject); |
// l'identifiant d'un noeud c'est son hashcode |
// l'objet associé au noeud contient aussi son identifiant |
450,13 → 456,16 |
|
// on le concatène au parent et on étend ses enfants |
parent.appendChild(nd); |
// en attendant qu'il soit ajouté on lui affecte son chemin en tant qu'id |
// ce qui permettra de le retrouver et de lui affecter son id sur retour du web service |
cheminTemporaireAjout = MotsClesUtilitaire.construireChemin(nd); |
nd.setId(cheminTemporaireAjout); |
parent.expand(); |
// enfin on place le curseur et on fait apparaitre le champ d'édition |
// pour que l'utilisateur nomme son mot clé |
te.startEdit(nd); |
|
} |
|
|
/** |
* Fonction de gestion sur le clic sur le noeud |
* |
580,7 → 589,7 |
rootChild[i].remove(); |
} |
|
copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode()); |
MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode()); |
|
// si l'arbre n'était pas encore considéré comme instancié |
if (!arbreCharge) { |
622,41 → 631,20 |
motsClesEnAttente = motsClesIds; |
} |
} |
} |
|
private String genererIdMotCle(TreeNode nd) { |
|
double IdMC = (nd.hashCode() + ((Math.random() * 10000) + 1)); |
return ""+IdMC; |
} |
|
/** |
* Fonction récursive qui prend deux noeuds d'arbre en paramètre et crée un |
* copie du sous arbre du premier noeud, qu'elle concatène au deuxième |
* |
* @param ndPereOriginal |
* le père des noeuds de l'arbre original |
* @param ndPereCopie |
* le père qui va recevoir les copies |
*/ |
private void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie) { |
if (ndPereCopie != null && ndPereOriginal != null) { |
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.setId(usObj[1]); |
child.setUserObject(usObj); |
ndPereCopie.appendChild(child); |
|
if (!ndNodeFils[i].isLeaf()) { |
copierFilsNoeud(ndNodeFils[i], child); |
} |
|
// reception d'un nouvel identifiant de mot clé |
if(nouvelleDonnees instanceof Integer) { |
if(cheminTemporaireAjout != null) { |
String id = ((Integer)(nouvelleDonnees)).toString(); |
TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout); |
String[] userObj = {noeudEnAjout.getText(), id}; |
noeudEnAjout.setUserObject(userObj); |
noeudEnAjout.setId(id); |
cheminTemporaireAjout = null; |
} |
} |
|
arbreMotsCles.enable(); |
} |
|
public void raz() { |