Subversion Repositories eFlore/Applications.cel

Rev

Rev 2042 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2042 Rev 2062
1
package org.tela_botanica.client.vues.observation.filtres;
1
package org.tela_botanica.client.vues.observation.filtres;
2
import org.tela_botanica.client.interfaces.Filtrable;
2
import org.tela_botanica.client.interfaces.Filtrable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
3
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
5
import org.tela_botanica.client.util.MotsClesUtilitaire;
5
import org.tela_botanica.client.util.MotsClesUtilitaire;
6
 
6
 
7
import com.google.gwt.user.client.Window;
7
import com.google.gwt.user.client.Window;
8
import com.gwtext.client.core.EventObject;
8
import com.gwtext.client.core.EventObject;
9
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.Node;
10
import com.gwtext.client.data.NodeTraversalCallback;
10
import com.gwtext.client.data.NodeTraversalCallback;
11
import com.gwtext.client.data.Tree;
11
import com.gwtext.client.data.Tree;
12
import com.gwtext.client.dd.DragData;
12
import com.gwtext.client.dd.DragData;
13
import com.gwtext.client.dd.DragDrop;
13
import com.gwtext.client.dd.DragDrop;
14
import com.gwtext.client.dd.DropTargetConfig;
14
import com.gwtext.client.dd.DropTargetConfig;
15
import com.gwtext.client.widgets.Button;
15
import com.gwtext.client.widgets.Button;
16
import com.gwtext.client.widgets.Component;
16
import com.gwtext.client.widgets.Component;
17
import com.gwtext.client.widgets.Panel;
17
import com.gwtext.client.widgets.Panel;
18
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
18
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
19
import com.gwtext.client.widgets.event.PanelListenerAdapter;
19
import com.gwtext.client.widgets.event.PanelListenerAdapter;
20
import com.gwtext.client.widgets.form.TextField;
20
import com.gwtext.client.widgets.form.TextField;
21
import com.gwtext.client.widgets.layout.VerticalLayout;
21
import com.gwtext.client.widgets.layout.VerticalLayout;
22
import com.gwtext.client.widgets.menu.BaseItem;
22
import com.gwtext.client.widgets.menu.BaseItem;
23
import com.gwtext.client.widgets.menu.Item;
23
import com.gwtext.client.widgets.menu.Item;
24
import com.gwtext.client.widgets.menu.Menu;
24
import com.gwtext.client.widgets.menu.Menu;
25
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
25
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
26
import com.gwtext.client.widgets.tree.DropNodeCallback;
26
import com.gwtext.client.widgets.tree.DropNodeCallback;
27
import com.gwtext.client.widgets.tree.MultiSelectionModel;
27
import com.gwtext.client.widgets.tree.MultiSelectionModel;
28
import com.gwtext.client.widgets.tree.TreeDragData;
28
import com.gwtext.client.widgets.tree.TreeDragData;
29
import com.gwtext.client.widgets.tree.TreeEditor;
29
import com.gwtext.client.widgets.tree.TreeEditor;
30
import com.gwtext.client.widgets.tree.TreeNode;
30
import com.gwtext.client.widgets.tree.TreeNode;
31
import com.gwtext.client.widgets.tree.TreePanel;
31
import com.gwtext.client.widgets.tree.TreePanel;
32
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
32
import com.gwtext.client.widgets.tree.event.TreeNodeListenerAdapter;
33
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
33
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
34
 
34
 
35
public class ArbreMotsClesObservationVue extends Panel implements Rafraichissable, Filtrable {
35
public class ArbreMotsClesObservationVue extends Panel implements Rafraichissable, Filtrable {
36
 
36
 
37
		/**
37
		/**
38
		 * Le médiateur associé à la vue
38
		 * Le médiateur associé à la vue
39
		 */
39
		 */
40
		private ObservationMediateur oMediateur = null;
40
		private ObservationMediateur oMediateur = null;
41
 
41
 
42
		/**
42
		/**
43
		 * Le treepanel qui affiche l'arbre
43
		 * Le treepanel qui affiche l'arbre
44
		 */
44
		 */
45
		private static TreePanel arbreMotsCles = null;
45
		private static TreePanel arbreMotsCles = null;
46
		/**
46
		/**
47
		 * L'éditeur qui permet de modifier les mots clés dans l'arbre
47
		 * L'éditeur qui permet de modifier les mots clés dans l'arbre
48
		 */
48
		 */
49
		private TreeEditor te = null;
49
		private TreeEditor te = null;
50
		/**
50
		/**
51
		 * Le textfield associé à l'éditeur
51
		 * Le textfield associé à l'éditeur
52
		 */
52
		 */
53
		private TextField tfEdit = null;
53
		private TextField tfEdit = null;
54
		/**
54
		/**
55
		 * Bouton de validation
55
		 * Bouton de validation
56
		 */
56
		 */
57
		private Button ajouterMotCle = null;
57
		private Button ajouterMotCle = null;
58
		/**
58
		/**
59
		 * Une string permettant connaitre les mots clés cochés en cours séparés par
59
		 * Une string permettant connaitre les mots clés cochés en cours séparés par
60
		 * des virgules
60
		 * des virgules
61
		 */
61
		 */
62
		private String motsClesEnCours = "";
62
		private String motsClesEnCours = "";
63
		/**
63
		/**
64
		 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
64
		 * Tableau contenant les mots clés qui n'ont pas encore été jaouté à l'arbre
65
		 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
65
		 * (sert au lazy rendering quand on reçoit des mots clés avant que le rendu
66
		 * du conteneur n'ai été effectué)
66
		 * du conteneur n'ai été effectué)
67
		 */
67
		 */
68
		private String[] motsClesEnAttente = new String[0];
68
		private String[] motsClesEnAttente = new String[0];
69
		/**
69
		/**
70
		 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
70
		 * Booléen d'évènement qui sert à savoir si on est en train d'ajouter un
71
		 * noeud
71
		 * noeud
72
		 */
72
		 */
73
		private boolean ajoutNoeud = false;
73
		private boolean ajoutNoeud = false;
74
		/**
74
		/**
75
		 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
75
		 * Booléen d'évènement qui sert à savoir si on est en train de modifier un
76
		 * noeud
76
		 * noeud
77
		 */
77
		 */
78
		private boolean modifNoeud = false;
78
		private boolean modifNoeud = false;
79
		/**
79
		/**
80
		 * Booléen d'instanciation du conteneur
80
		 * Booléen d'instanciation du conteneur
81
		 */
81
		 */
82
		private boolean arbreCharge = false;
82
		private boolean arbreCharge = false;
83
		
83
		
84
		/**
84
		/**
85
		 * Booléen nécessaire pour l'affichage
85
		 * Booléen nécessaire pour l'affichage
86
		 * 
86
		 * 
87
		 */
87
		 */
88
		private boolean estInstancie = false;
88
		private boolean estInstancie = false;
89
		
89
		
90
		/**
90
		/**
91
		 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
91
		 * Booléen d'évènement qui sert à savoir si les mots clés ont bien été reçu
92
		 */
92
		 */
93
		private boolean motsCleInitialises;
93
		private boolean motsCleInitialises;
94
		
94
		
95
		private Component livue = null;
95
		private Component livue = null;
96
		
96
		
97
		MultiSelectionModel msModel = null;
97
		MultiSelectionModel msModel = null;
98
 
98
 
99
		private String cheminTemporaireAjout = null;
99
		private String cheminTemporaireAjout = null;
-
 
100
		
-
 
101
		public Rafraichissable thisRafraichissable;
100
 
102
 
101
		/**
103
		/**
102
		 * Constructeur sans paramètre (privé car interdit d'utilisation)
104
		 * Constructeur sans paramètre (privé car interdit d'utilisation)
103
		 */
105
		 */
104
		@SuppressWarnings("unused")
106
		@SuppressWarnings("unused")
105
		private ArbreMotsClesObservationVue() {
107
		private ArbreMotsClesObservationVue() {
106
			super();
108
			super();
107
		}
109
		}
108
 
110
 
109
		/**
111
		/**
110
		 * Constructeur avec paramètre
112
		 * Constructeur avec paramètre
111
		 * 
113
		 * 
112
		 * @param im
114
		 * @param im
113
		 *            le médiateur à associer
115
		 *            le médiateur à associer
114
		 */
116
		 */
115
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
117
		public ArbreMotsClesObservationVue(ObservationMediateur om) {
116
			// on crée le panel
118
			// on crée le panel
117
			super("Projets");
119
			super("Projets");
118
			
120
			
119
			this.setLayout(new VerticalLayout());
121
			this.setLayout(new VerticalLayout());
120
			oMediateur = om;
122
			oMediateur = om;
121
			
123
			
122
			setBorder(false);
124
			setBorder(false);
123
			setCollapsible(true);
125
			setCollapsible(true);
124
			setTitleCollapse(true);
126
			setTitleCollapse(true);
125
			setAutoScroll(true);
127
			setAutoScroll(true);
126
 
128
 
127
			// on ajoute les listeners
129
			// on ajoute les listeners
128
			ajouterListenersPanel();
130
			ajouterListenersPanel();
129
 
131
 
130
		}
132
		}
131
		
133
		
132
		/**
134
		/**
133
		 * Ajoute les listeners pour le rendu du panel
135
		 * Ajoute les listeners pour le rendu du panel
134
		 */
136
		 */
135
		private void ajouterListenersPanel() {
137
		private void ajouterListenersPanel() {
136
			  this.addListener(new PanelListenerAdapter() {
138
			  this.addListener(new PanelListenerAdapter() {
137
 
139
 
138
				// on instancie réellement les composants au moment du rendu pour
140
				// on instancie réellement les composants au moment du rendu pour
139
				// accélérer l'affichage
141
				// accélérer l'affichage
140
				// et éviter des bugs
142
				// et éviter des bugs
141
				@Override
143
				@Override
142
				public void onRender(Component component) {
144
				public void onRender(Component component) {					
143
					
-
 
144
					livue = oMediateur.getListeObservation();
145
					livue = oMediateur.getListeObservation();
145
					
146
					
146
					// on crée le conteneur de l'arbre
147
					// on crée le conteneur de l'arbre
147
					arbreMotsCles = new TreePanel();
148
					arbreMotsCles = new TreePanel();
148
					// on permet le drag and drop dans l'arbre
149
					// on permet le drag and drop dans l'arbre
149
					//arbreMotsCles.setEnableDD(true);
150
					//arbreMotsCles.setEnableDD(true);
150
					arbreMotsCles.setId("x-view-tree-keyword-obs");
151
					arbreMotsCles.setId("x-view-tree-keyword-obs");
151
					
152
					
152
					
153
					
153
					msModel = new MultiSelectionModel();
154
					msModel = new MultiSelectionModel();
154
					arbreMotsCles.setSelectionModel(msModel);
155
					arbreMotsCles.setSelectionModel(msModel);
155
 
156
 
156
					// on crée une racine pour l'arbre
157
					// on crée une racine pour l'arbre
157
					TreeNode root = new TreeNode("Projets");
158
					TreeNode root = new TreeNode("Projets");
158
					root.setId("racine_obs");
159
					root.setId("racine_obs");
159
					String[] usObject = { "Projets", "racine_obs" };
160
					String[] usObject = { "Projets", "racine_obs" };
160
					root.setUserObject(usObject);
161
					root.setUserObject(usObject);
161
					root.setExpandable(true);
162
					root.setExpandable(true);
162
					
163
					
163
					arbreMotsCles.setRootNode(root);
164
					arbreMotsCles.setRootNode(root);
164
					
165
					
165
					// on crée l'éditeur pour l'arbre
166
					// on crée l'éditeur pour l'arbre
166
					tfEdit = new TextField();
167
					tfEdit = new TextField();
167
					te = new TreeEditor(arbreMotsCles, tfEdit);
168
					te = new TreeEditor(arbreMotsCles, tfEdit);
168
					ajouterMotCle = new Button("Ajouter un projet");
169
					ajouterMotCle = new Button("Ajouter un projet");
169
					arbreMotsCles.add(te);
170
					arbreMotsCles.add(te);
170
					
171
					
171
					arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
172
					arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
172
						@Override
173
						@Override
173
						public void onClick(Node node, EventObject e) {
174
						public void onClick(Node node, EventObject e) {
174
							if(!arbreCharge) {
175
							if(!arbreCharge) {
175
								expand();
176
								expand();
176
							}
177
							}
177
						}
178
						}
178
 
179
 
179
						@Override
180
						@Override
180
						public void onExpand(Node node) {
181
						public void onExpand(Node node) {
181
							if(!arbreCharge) {
182
							if(!arbreCharge) {
182
								obtenirArbreMotsCles();
183
								obtenirArbreMotsCles();
183
								arbreCharge = true;
184
								arbreCharge = true;
184
							}
185
							}
185
						}
186
						}
186
					});
187
					});
187
 
188
 
188
					// on interdit le drag and drop dans l'arbre
189
					// on interdit le drag and drop dans l'arbre
189
					arbreMotsCles.setRootVisible(true);
190
					arbreMotsCles.setRootVisible(true);
190
					arbreMotsCles.setBorder(false);
191
					arbreMotsCles.setBorder(false);
191
					
192
					
192
					// on met en forme le layout
193
					// on met en forme le layout
193
					add(arbreMotsCles);
194
					add(arbreMotsCles);
194
					add(ajouterMotCle);
195
					add(ajouterMotCle);
195
 
196
 
196
					// enfin on considère le composant comme instancié
197
					// enfin on considère le composant comme instancié
197
					estInstancie = true;
198
					estInstancie = true;
198
					
199
					
199
					configDragAndDrop();
200
					configDragAndDrop();
200
					
201
					
201
					// on ajoute les listeners d'évenements
202
					// on ajoute les listeners d'évenements
202
					ajouterListeners();					
203
					ajouterListeners();					
203
				}
204
				}
204
 
205
 
205
			});
206
			});
206
		}
207
		}
207
 
208
 
208
		/**
209
		/**
209
		 * Acesseur pour le médiateur
210
		 * Acesseur pour le médiateur
210
		 * 
211
		 * 
211
		 * @return le médiateur associé à la vue
212
		 * @return le médiateur associé à la vue
212
		 */
213
		 */
213
		private ObservationMediateur getOMediateur() {
214
		private ObservationMediateur getOMediateur() {
214
 
215
 
215
			return oMediateur;
216
			return oMediateur;
216
 
217
 
217
		}
218
		}
218
 
219
 
219
		/**
220
		/**
220
		 * Acesseur pour l'arbre des mots clés
221
		 * Acesseur pour l'arbre des mots clés
221
		 * 
222
		 * 
222
		 * @return le panel contenant l'arbre
223
		 * @return le panel contenant l'arbre
223
		 */
224
		 */
224
		public TreePanel getArbreMotsCles() {
225
		public TreePanel getArbreMotsCles() {
225
			return arbreMotsCles;
226
			return arbreMotsCles;
226
		}
227
		}
227
 
228
 
228
		/**
229
		/**
229
		 * Accesseur pour l'éditeur
230
		 * Accesseur pour l'éditeur
230
		 * 
231
		 * 
231
		 * @return l'éditeur associé à l'arbre
232
		 * @return l'éditeur associé à l'arbre
232
		 */
233
		 */
233
		public TreeEditor getTe() {
234
		public TreeEditor getTe() {
234
			return te;
235
			return te;
235
		}
236
		}
236
 
237
 
237
		/**
238
		/**
238
		 * Acesseur pour le TextField associé à l'éditeur
239
		 * Acesseur pour le TextField associé à l'éditeur
239
		 * 
240
		 * 
240
		 * @return le champ texte associé à l'éditeur
241
		 * @return le champ texte associé à l'éditeur
241
		 */
242
		 */
242
		public TextField getTfEdit() {
243
		public TextField getTfEdit() {
243
			return tfEdit;
244
			return tfEdit;
244
		}
245
		}
245
 
246
 
246
		/**
247
		/**
247
		 * Ajoute les listeners nécessaires pour la gestion des évènements
248
		 * Ajoute les listeners nécessaires pour la gestion des évènements
248
		 */
249
		 */
249
		private void ajouterListeners() {
250
		private void ajouterListeners() {
250
			
-
 
251
			final Rafraichissable r = this;
251
			
252
			arbreMotsCles.addListener(new TreePanelListenerAdapter() {
252
			arbreMotsCles.addListener(new TreePanelListenerAdapter() {
253
 
253
 
254
				// gestion du clic sur un noeud
254
				// gestion du clic sur un noeud
255
				@Override
255
				@Override
256
				public void onClick(TreeNode node, EventObject e) {
256
				public void onClick(TreeNode node, EventObject e) {
257
 
257
 
258
					e.stopEvent();
258
					e.stopEvent();
259
					boolean multi = false;
259
					boolean multi = false;
260
					if(e.hasModifier()) {
260
					if(e.hasModifier()) {
261
						multi = true;
261
						multi = true;
262
					}
262
					}
263
					gererClicNoeud(node,multi);
263
					gererClicNoeud(node,multi);
264
				}
264
				}
265
 
265
 
266
				// gestion du clic droit sur un noeud
266
				// gestion du clic droit sur un noeud
267
				@Override
267
				@Override
268
				public void onContextMenu(TreeNode node, EventObject e) {
268
				public void onContextMenu(TreeNode node, EventObject e) {
269
 
269
 
270
					e.stopEvent();
270
					e.stopEvent();
271
					montrerContextMenuArbre(node, e, getTe());
271
					montrerContextMenuArbre(node, e, getTe());
272
 
272
 
273
				}
273
				}
274
 
274
 
275
				// gestion du double clic sur un noeud
275
				// gestion du double clic sur un noeud
276
				@Override
276
				@Override
277
				public void onDblClick(TreeNode node, EventObject e) {
277
				public void onDblClick(TreeNode node, EventObject e) {
278
 
278
 
279
					modifNoeud = true;
279
					modifNoeud = true;
280
					if (!node.getId().equals("racine_obs")) {
280
					if (!node.getId().equals("racine_obs")) {
281
						te.startEdit(node);
281
						te.startEdit(node);
282
					}
282
					}
283
				}
283
				}
284
 
284
 
285
				// gestion de la modification du texte d'un noeud
285
				// gestion de la modification du texte d'un noeud
286
				@Override
286
				@Override
287
				public void onTextChange(TreeNode node, String text, String oldText) {
287
				public void onTextChange(TreeNode node, String text, String oldText) {
-
 
288
					
-
 
289
					if(!MotsClesUtilitaire.estUnMotCleAutorise(text)) {
-
 
290
						te.startEdit(node);
-
 
291
						Window.alert("Un mot clé ne peut pas être vide ou contenir les caractères suivants : "+MotsClesUtilitaire.getChaineCaracteresInterdits());
-
 
292
						return;
-
 
293
					}
288
 
294
 
289
					// on récupère les informations associées au noeud
295
					// on récupère les informations associées au noeud
290
					TreeNode nd = node;
296
					TreeNode nd = node;
291
					String[] usObject = new String[2];
297
					String[] usObject = new String[2];
292
					usObject[0] = text;
298
					usObject[0] = text;
293
					usObject[1] = ((String[]) nd.getUserObject())[1];
299
					usObject[1] = ((String[]) nd.getUserObject())[1];
294
					nd.setUserObject(usObject);
300
					nd.setUserObject(usObject);
295
 
301
 
296
					// si c'est un nouveau noeud
302
					// si c'est un nouveau noeud
297
					if (ajoutNoeud) {
303
					if (ajoutNoeud) {
298
						// on notifie le médiateur de l'ajout et on lui passe
-
 
299
						// l'arbre
-
 
300
						getOMediateur().ajouterMotCleDansArbre(nd,
304
						ajouterMotCleDansArbreMediateur(nd);
301
								getArbreMotsCles().getTree(), r);
-
 
302
						// et considère l'ajout achevé
-
 
303
						ajoutNoeud = false;
-
 
304
					}
305
					}
305
					// si c'est noeud déjà existant
306
					// si c'est noeud déjà existant
306
					else {
307
					else {
307
						if (modifNoeud) {
308
						if (modifNoeud) {
308
							// on notifie le médiateur de la modification et on lui
-
 
309
							// passe l'arbre
-
 
310
							getOMediateur().modifierMotCleDansArbre(nd,
309
							modifierMotCleDansArbreMediateur(nd);
311
									getArbreMotsCles().getTree());
-
 
312
							// et on considère la modification achevée
-
 
313
							modifNoeud = false;
-
 
314
						}
310
						}
315
					}
311
					}
316
					arbreMotsCles.disable();
312
					//arbreMotsCles.disable();
317
				}
313
				}
318
 
314
 
319
				// gestion du déplacement d'un noeud
315
				// gestion du déplacement d'un noeud
320
				@Override
316
				@Override
321
				public void onMoveNode(Tree tree, TreeNode node,
317
				public void onMoveNode(Tree tree, TreeNode node,
322
						TreeNode oldParent, TreeNode newParent, int index) {
318
						TreeNode oldParent, TreeNode newParent, int index) {
323
					// on notifie le médiateur et on lui passe l'arbre
319
					// on notifie le médiateur et on lui passe l'arbre
324
					getOMediateur().deplacerMotCleDansArbre(node,
320
					getOMediateur().deplacerMotCleDansArbre(node,
325
							getArbreMotsCles().getTree());
321
							getArbreMotsCles().getTree());
326
				}
322
				}
327
				
323
				
328
				@Override
324
				@Override
329
				public boolean doBeforeNodeDrop(TreePanel treePanel,
325
				public boolean doBeforeNodeDrop(TreePanel treePanel,
330
						TreeNode target, DragData dragData,
326
						TreeNode target, DragData dragData,
331
						String point, DragDrop source,
327
						String point, DragDrop source,
332
						TreeNode dropNode,
328
						TreeNode dropNode,
333
						DropNodeCallback dropNodeCallback) {
329
						DropNodeCallback dropNodeCallback) {
334
					
330
					
335
					if(dragData instanceof TreeDragData) {
331
					if(dragData instanceof TreeDragData) {
336
						return true;
332
						return true;
337
					}
333
					}
338
						
334
						
339
					String idMotCle = ((String[])target.getUserObject())[1];
335
					String idMotCle = ((String[])target.getUserObject())[1];
340
					
336
					
341
					if(oMediateur.gererDDObsSurMotCle(target, dragData)) {
337
					if(oMediateur.gererDDObsSurMotCle(target, dragData)) {
342
						
338
						
343
						cocherMotCle(idMotCle);
339
						cocherMotCle(idMotCle);
344
						return true;
340
						return true;
345
					}
341
					}
346
					
342
					
347
					return false;
343
					return false;
348
				}
344
				}
349
 
345
 
350
 
346
 
351
				@Override
347
				@Override
352
				public void onNodeDrop(TreePanel treePanel,
348
				public void onNodeDrop(TreePanel treePanel,
353
						TreeNode target, DragData dragData,
349
						TreeNode target, DragData dragData,
354
						String point, DragDrop source, TreeNode dropNode) {
350
						String point, DragDrop source, TreeNode dropNode) {
355
 
351
 
356
					
352
					
357
				}
353
				}
358
 
354
 
359
			});
355
			});
360
 
356
 
361
			// gestion de la validation
357
			// gestion de la validation
362
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
358
			ajouterMotCle.addListener(new ButtonListenerAdapter() {
363
 
359
 
364
				// lors du clic
360
				// lors du clic
365
				@Override
361
				@Override
366
				public void onClick(Button button, EventObject e) {
362
				public void onClick(Button button, EventObject e) {
367
					
363
					
368
					TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
364
					TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
369
					TreeNode noeudAjout;
365
					TreeNode noeudAjout;
370
					if(noeuds.length > 0) {
366
					if(noeuds.length > 0) {
371
						noeudAjout = noeuds[noeuds.length - 1];
367
						noeudAjout = noeuds[noeuds.length - 1];
372
					} else {
368
					} else {
373
						noeudAjout = arbreMotsCles.getRootNode();
369
						noeudAjout = arbreMotsCles.getRootNode();
374
					}
370
					}
375
 
371
 
376
					ajouterNoeud(noeudAjout);
372
					ajouterNoeud(noeudAjout);
377
					
373
					
378
				}
374
				}
379
			});
375
			});
380
 
376
 
381
		}
377
		}
-
 
378
		
-
 
379
		private void ajouterMotCleDansArbreMediateur(TreeNode nd) {
-
 
380
			// on notifie le médiateur de l'ajout et on lui passe
-
 
381
			// l'arbre
-
 
382
			getOMediateur().ajouterMotCleDansArbre(nd,
-
 
383
					getArbreMotsCles().getTree(), this);
-
 
384
			// et considère l'ajout achevé
-
 
385
			ajoutNoeud = false;
-
 
386
		}
-
 
387
		
-
 
388
		private void modifierMotCleDansArbreMediateur(TreeNode nd) {
-
 
389
			// on notifie le médiateur de la modification et on lui
-
 
390
			// passe l'arbre
-
 
391
			getOMediateur().modifierMotCleDansArbre(nd,
-
 
392
					getArbreMotsCles().getTree());
-
 
393
			// et on considère la modification achevée
-
 
394
			modifNoeud = false;
382
		
395
		}
383
		
396
		
384
		/**
397
		/**
385
		 * Configure le drag 'n drop pour la liste
398
		 * Configure le drag 'n drop pour la liste
386
		 */
399
		 */
387
		private void configDragAndDrop()
400
		private void configDragAndDrop()
388
		{
401
		{
389
			// on fabrique la nouvelle configuration
402
			// on fabrique la nouvelle configuration
390
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
403
			// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
391
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
404
			arbreMotsCles.setDdGroup("ObsMotsClesGroup");
392
			//arbreMotsCles.setEnableDD(true);
405
			//arbreMotsCles.setEnableDD(true);
393
			arbreMotsCles.setEnableDrag(true);
406
			arbreMotsCles.setEnableDrag(true);
394
			arbreMotsCles.setEnableDrop(true);
407
			arbreMotsCles.setEnableDrop(true);
395
			DropTargetConfig dtc = new DropTargetConfig();		
408
			DropTargetConfig dtc = new DropTargetConfig();		
396
			dtc.setdDdGroup("ObsMotsClesGroup"); 
409
			dtc.setdDdGroup("ObsMotsClesGroup"); 
397
		}
410
		}
398
 
411
 
399
		/**
412
		/**
400
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
413
		 * Envoie une demande au médiateur pour obtenir l'arbre des mots clés
401
		 */
414
		 */
402
		public void obtenirArbreMotsCles() {
415
		public void obtenirArbreMotsCles() {
403
 
416
 
404
			getOMediateur().obtenirArbreMotsCles(this);
417
			getOMediateur().obtenirArbreMotsCles(this);
405
 
418
 
406
		}
419
		}
407
 
420
 
408
		/**
421
		/**
409
		 * Supprime un noeud de l'arbre
422
		 * Supprime un noeud de l'arbre
410
		 * 
423
		 * 
411
		 * @param n
424
		 * @param n
412
		 *            le noeud à supprimer
425
		 *            le noeud à supprimer
413
		 */
426
		 */
414
		public void supprimerNoeud(TreeNode n) {
427
		public void supprimerNoeud(TreeNode n) {
415
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
428
			// si ça n'est pas la racine (qu'on ne peut pas supprimer)
416
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
429
			if (!n.getId().equals(getArbreMotsCles().getRootNode().getId())) {
417
				
430
				
418
				if(Window.confirm("Etes vous sur de vouloir supprimer ce projet ?")) {
431
				if(Window.confirm("Etes vous sur de vouloir supprimer ce projet ?")) {
419
					// on détache le noeud et on le détruit
432
					// on détache le noeud et on le détruit
420
					n.getParentNode().removeChild(n);
433
					n.getParentNode().removeChild(n);
421
					n.destroy();
434
					n.destroy();
422
					// puis on en notifie le médiateur en lui passant le noeud supprimé
435
					// puis on en notifie le médiateur en lui passant le noeud supprimé
423
					// et l'arbre
436
					// et l'arbre
424
					getOMediateur()
437
					getOMediateur()
425
							.supprimerMotCleDansArbre(n, arbreMotsCles.getTree());
438
							.supprimerMotCleDansArbre(n, arbreMotsCles.getTree(), this);
426
				}
439
				}
427
			} else {
440
			} else {
428
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
441
				// si l'utilisateur tente de supprimer la racine, on l'avertit de
429
				// son erreur
442
				// son erreur
430
				Window.alert("Impossible de supprimer la racine de l'arbre");
443
				Window.alert("Impossible de supprimer la racine de l'arbre");
431
			}
444
			}
432
		}
445
		}
433
 
446
 
434
		/**
447
		/**
435
		 * Ajoute un noeud dans l'arbre au parent donné
448
		 * Ajoute un noeud dans l'arbre au parent donné
436
		 * 
449
		 * 
437
		 * @param parent
450
		 * @param parent
438
		 *            le futur parent du noeud à ajouter
451
		 *            le futur parent du noeud à ajouter
439
		 */
452
		 */
440
		public void ajouterNoeud(TreeNode parent) {
453
		public void ajouterNoeud(TreeNode parent) {
-
 
454
			if(parent == null) {
-
 
455
				parent = arbreMotsCles.getRootNode();
-
 
456
			}
441
 
457
						
442
			// on met l'ajout du noeud à vrai
-
 
443
			ajoutNoeud = true;
458
			ajoutNoeud = true;
444
			// on crée un nouveau noeud vide
-
 
445
			TreeNode nd = new TreeNode("");
-
 
446
			nd.setCls("x-view-treenode-keyword");
-
 
447
			// on associe un objet au noeud qui contient des infos
-
 
448
			String[] usObject = new String[2];
-
 
449
			// l'objet contient le nom du noeud
-
 
450
			usObject[0] = "";
-
 
451
			usObject[1] = "";
-
 
452
			
-
 
453
			nd.setUserObject(usObject);
-
 
454
			// l'identifiant d'un noeud c'est son hashcode
459
			
455
			// l'objet associé au noeud contient aussi son identifiant
-
 
456
 
460
			TreeNode nd = MotsClesUtilitaire.ajouterNoeud(parent, false);
457
			// on le concatène au parent et on étend ses enfants
461
			// on le concatène au parent et on étend ses enfants
458
			parent.appendChild(nd);
-
 
459
			// en attendant qu'il soit ajouté on lui affecte son chemin en tant qu'id
-
 
460
			// ce qui permettra de le retrouver et de lui affecter son id sur retour du web service
-
 
461
			cheminTemporaireAjout  = MotsClesUtilitaire.construireChemin(nd);
-
 
462
			nd.setId(cheminTemporaireAjout);
462
			parent.appendChild(nd);
463
			parent.expand();
-
 
464
			// enfin on place le curseur et on fait apparaitre le champ d'édition
463
			parent.expand();
465
			// pour que l'utilisateur nomme son mot clé
464
			cheminTemporaireAjout = nd.getId();
466
			te.startEdit(nd);
465
			te.startEdit(nd);
467
		}
466
		}
468
		
467
		
469
		/**
468
		/**
470
		 * Fonction de gestion sur le clic sur le noeud
469
		 * Fonction de gestion sur le clic sur le noeud
471
		 * 
470
		 * 
472
		 * @param node
471
		 * @param node
473
		 */
472
		 */
474
		public void gererClicNoeud(TreeNode node, boolean multi) {
473
		public void gererClicNoeud(TreeNode node, boolean multi) {
475
			
474
			
476
			if(!arbreCharge) {
475
			if(!arbreCharge) {
477
				obtenirArbreMotsCles();
476
				obtenirArbreMotsCles();
478
			} else {
477
			} else {
479
				if(multi) {
478
				if(multi) {
480
				}
479
				}
481
				((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
480
				((MultiSelectionModel)arbreMotsCles.getSelectionModel()).select(node, multi);
482
				oMediateur.obtenirNombreObservation();
481
				oMediateur.obtenirNombreObservation();
483
			}
482
			}
484
		}
483
		}
485
 
484
 
486
		/**
485
		/**
487
		 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
486
		 * Parcourt l'arbre et coche les noeud qui font partie de la liste des mots
488
		 * clés à cocher
487
		 * clés à cocher
489
		 * 
488
		 * 
490
		 * @param motsClesIds
489
		 * @param motsClesIds
491
		 *            un tableau contenant les identifiants des mots clés à cocher
490
		 *            un tableau contenant les identifiants des mots clés à cocher
492
		 */
491
		 */
493
		public void cocherMotsCles(final String[] motsClesIds) {
492
		public void cocherMotsCles(final String[] motsClesIds) {
494
			if (getArbreMotsCles() != null
493
			if (getArbreMotsCles() != null
495
					&& getArbreMotsCles().getRootNode() != null) {
494
					&& getArbreMotsCles().getRootNode() != null) {
496
				// à partir de la racine
495
				// à partir de la racine
497
				getArbreMotsCles().getRootNode().cascade(
496
				getArbreMotsCles().getRootNode().cascade(
498
						new NodeTraversalCallback() {
497
						new NodeTraversalCallback() {
499
 
498
 
500
							// pour chaque noeud
499
							// pour chaque noeud
501
							@Override
500
							@Override
502
							public boolean execute(Node node) {
501
							public boolean execute(Node node) {
503
								
502
								
504
								// on parcourt le tableau des mots clés
503
								// on parcourt le tableau des mots clés
505
								for (int i = 0; i < motsClesIds.length; i++) {
504
								for (int i = 0; i < motsClesIds.length; i++) {
506
									// si le mot clé fait partie des id à cocher on
505
									// si le mot clé fait partie des id à cocher on
507
									// le coche
506
									// le coche
508
									String usObject[] = (String[]) node
507
									String usObject[] = (String[]) node
509
											.getUserObject();
508
											.getUserObject();
510
									String nodeId = usObject[1];
509
									String nodeId = usObject[1];
511
 
510
 
512
									if (nodeId.equals(motsClesIds[i])) {
511
									if (nodeId.equals(motsClesIds[i])) {
513
										
512
										
514
										getArbreMotsCles().getNodeById(nodeId)
513
										getArbreMotsCles().getNodeById(nodeId)
515
										.getUI().getTextEl().addClassName("x-tree-node-text-kw");
514
										.getUI().getTextEl().addClassName("x-tree-node-text-kw");
516
										
515
										
517
											return true;
516
											return true;
518
									}
517
									}
519
								}
518
								}
520
								
519
								
521
								if((getArbreMotsCles().getNodeById(node.getId()).getUI().getTextEl()) != null) {
520
								if((getArbreMotsCles().getNodeById(node.getId()).getUI().getTextEl()) != null) {
522
									getArbreMotsCles().getNodeById(node.getId())
521
									getArbreMotsCles().getNodeById(node.getId())
523
									.getUI().getTextEl().removeClassName("x-tree-node-text-kw");
522
									.getUI().getTextEl().removeClassName("x-tree-node-text-kw");
524
								}
523
								}
525
 
524
 
526
								
525
								
527
								// et on passe au suivant
526
								// et on passe au suivant
528
								return true;
527
								return true;
529
							}
528
							}
530
 
529
 
531
						});
530
						});
532
			}
531
			}
533
			else {
532
			else {
534
				motsClesEnAttente = motsClesIds ;
533
				motsClesEnAttente = motsClesIds ;
535
			}
534
			}
536
		}
535
		}
537
		
536
		
538
		public void cocherMotCle(String motCleId) {
537
		public void cocherMotCle(String motCleId) {
539
			getArbreMotsCles().getNodeById(motCleId)
538
			getArbreMotsCles().getNodeById(motCleId)
540
			.getUI().getTextEl().addClassName("x-tree-node-text-kw");
539
			.getUI().getTextEl().addClassName("x-tree-node-text-kw");
541
		}
540
		}
542
		
541
		
543
		public void initialiser() {
542
		public void initialiser() {
544
			
543
			
545
			arbreCharge = false ;
544
			arbreCharge = false ;
546
			motsClesEnCours = "";
545
			motsClesEnCours = "";
547
			arbreMotsCles.collapseAll();
546
			arbreMotsCles.collapseAll();
548
			// on vide l'ancien arbre
547
			// on vide l'ancien arbre
549
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
548
			Node[] rootChild = arbreMotsCles.getRootNode().getChildNodes();
550
			for (int i = 0; i < rootChild.length; i++) {
549
			for (int i = 0; i < rootChild.length; i++) {
551
				
550
				
552
				rootChild[i].remove();
551
				rootChild[i].remove();
553
			}
552
			}
554
			
553
			
555
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
554
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
556
				
555
				
557
				@Override
556
				@Override
558
				public void onExpand(Node node) {
557
				public void onExpand(Node node) {
559
					if(!arbreCharge)
558
					if(!arbreCharge)
560
					{
559
					{
561
						obtenirArbreMotsCles() ;
560
						obtenirArbreMotsCles() ;
562
						arbreCharge = true ;
561
						arbreCharge = true ;
563
					}
562
					}
564
				}
563
				}
565
				
564
				
566
			}) ;
565
			}) ;
567
		}
566
		}
568
 
567
 
569
		/**
568
		/**
570
		 * Méthode héritée de l'interface rafraichissable
569
		 * Méthode héritée de l'interface rafraichissable
571
		 * 
570
		 * 
572
		 * @param nouvelleDonnees
571
		 * @param nouvelleDonnees
573
		 *            les nouvelles données pour l'objet
572
		 *            les nouvelles données pour l'objet
574
		 * @param repandreRafraichissement
573
		 * @param repandreRafraichissement
575
		 *            booleen qui dit si on doit répandre l'évenement
574
		 *            booleen qui dit si on doit répandre l'évenement
576
		 */
575
		 */
577
		@Override
576
		@Override
578
		public void rafraichir(Object nouvelleDonnees,
577
		public void rafraichir(Object nouvelleDonnees,
579
				boolean repandreRafraichissement) {
578
				boolean repandreRafraichissement) {
-
 
579
						
-
 
580
			arbreMotsCles.enable();
580
			
581
			
581
			if(nouvelleDonnees instanceof Tree) {
582
			if(nouvelleDonnees instanceof Tree) {
582
 
583
 
583
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
584
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
584
 
585
 
585
				// on prend sa racine et on l'attache à l'arbre des mots clés
586
				// on prend sa racine et on l'attache à l'arbre des mots clés
586
				Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
587
				Node[] rootChild = getArbreMotsCles().getRootNode().getChildNodes();
587
				for (int i = 0; i < rootChild.length; i++) {
588
				for (int i = 0; i < rootChild.length; i++) {
588
					
589
					
589
					rootChild[i].remove();
590
					rootChild[i].remove();
590
				}
591
				}
591
				
592
				
592
				MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode());
593
				MotsClesUtilitaire.copierFilsNoeud(nouvelArbre.getRootNode(),getArbreMotsCles().getRootNode(), false);
593
 
594
 
594
				// si l'arbre n'était pas encore considéré comme instancié
595
				// si l'arbre n'était pas encore considéré comme instancié
595
				if (!arbreCharge) {
596
				if (!arbreCharge) {
596
					// on signale que oui
597
					// on signale que oui
597
					arbreCharge = true;
598
					arbreCharge = true;
598
				}
599
				}
599
 
600
 
600
				
601
				
601
				// s'il y a des mots clés en attente (lors du premier rendering)
602
				// s'il y a des mots clés en attente (lors du premier rendering)
602
				if (motsCleInitialises == false && motsClesEnAttente != null) {
603
				if (motsCleInitialises == false && motsClesEnAttente != null) {
603
					// on les coche
604
					// on les coche
604
					cocherMotsCles(motsClesEnAttente) ;
605
					cocherMotsCles(motsClesEnAttente) ;
605
					motsCleInitialises = true;
606
					motsCleInitialises = true;
606
				}
607
				}
607
				
608
				
608
				if(motsClesEnAttente.length > 0) {
609
				if(motsClesEnAttente.length > 0) {
609
					cocherMotsCles(motsClesEnAttente);
610
					cocherMotsCles(motsClesEnAttente);
610
				}
611
				}
611
			}
612
			}
612
 
613
 
613
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
614
			// Si on reçoit un tableau de String (cas ou l'on séléectionne une
614
			// nouvelle obs)
615
			// nouvelle obs)
615
			if (nouvelleDonnees instanceof String) {
616
			if (nouvelleDonnees instanceof String) {
616
				
617
				
617
				String chaineMc = (String)nouvelleDonnees;
618
				String chaineMc = (String)nouvelleDonnees;
618
				String[] motsClesIds = chaineMc.split(";");
619
				String[] motsClesIds = chaineMc.split(";");
619
				
620
				
620
				// et que l'arbre est instancié
621
				// et que l'arbre est instancié
621
				if (arbreCharge) {
622
				if (arbreCharge) {
622
					// le tableau de String contient les id des mots clés associés à
623
					// le tableau de String contient les id des mots clés associés à
623
					// l'image
624
					// l'image
624
					// on coche les mots clés contenu dans le tableau
625
					// on coche les mots clés contenu dans le tableau
625
					cocherMotsCles(motsClesIds);
626
					cocherMotsCles(motsClesIds);
626
					
627
					
627
				}
628
				}
628
				// si l'arbre n'est pas encore instancié on met les mots clés en
629
				// si l'arbre n'est pas encore instancié on met les mots clés en
629
				// attente
630
				// attente
630
				else {
631
				else {
631
					motsClesEnAttente = motsClesIds;
632
					motsClesEnAttente = motsClesIds;
632
				}
633
				}
633
			}
634
			}
634
			
635
			
635
			// reception d'un nouvel identifiant de mot clé
636
			// reception d'un nouvel identifiant de mot clé
636
			if(nouvelleDonnees instanceof Integer) {
637
			if(nouvelleDonnees instanceof Integer) {
637
				if(cheminTemporaireAjout != null) {
638
				if(cheminTemporaireAjout != null) {
638
					String id = ((Integer)(nouvelleDonnees)).toString();
639
					String id = ((Integer)(nouvelleDonnees)).toString();
639
					TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
640
					TreeNode noeudEnAjout = arbreMotsCles.getNodeById(cheminTemporaireAjout);
640
					String[] userObj = {noeudEnAjout.getText(), id};
641
					String[] userObj = {noeudEnAjout.getText(), id};
641
					noeudEnAjout.setUserObject(userObj);
642
					noeudEnAjout.setUserObject(userObj);
642
					noeudEnAjout.setId(id);
643
					noeudEnAjout.setId(id);
643
					cheminTemporaireAjout = null;
644
					cheminTemporaireAjout = null;
644
				}
645
				}
645
			}
646
			}
646
			
-
 
647
			arbreMotsCles.enable();
-
 
648
		}
647
		}
649
		
648
		
650
		public void raz() {
649
		public void raz() {
651
			
650
			
652
			arbreCharge = false ;
651
			arbreCharge = false ;
653
			arbreMotsCles.collapseAll();
652
			arbreMotsCles.collapseAll();
654
			arbreMotsCles.clear() ;
653
			arbreMotsCles.clear() ;
655
			
654
			
656
			// on crée une racine pour l'arbre
655
			// on crée une racine pour l'arbre
657
			TreeNode root = new TreeNode("Projets");
656
			TreeNode root = new TreeNode("Projets");
658
			root.setId("racine_obs");
657
			root.setId("racine_obs");
659
			String[] usObject = { "Projets", "racine_obs" };
658
			String[] usObject = { "Projets", "racine_obs" };
660
			root.setUserObject(usObject);
659
			root.setUserObject(usObject);
661
			root.setExpandable(true);
660
			root.setExpandable(true);
662
 
661
 
663
			arbreMotsCles.setRootNode(root);
662
			arbreMotsCles.setRootNode(root);
664
			
663
			
665
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
664
			arbreMotsCles.getRootNode().addListener(new TreeNodeListenerAdapter() {
666
				
665
				
667
				@Override
666
				@Override
668
				public void onExpand(Node node) {
667
				public void onExpand(Node node) {
669
					if(!arbreCharge)
668
					if(!arbreCharge)
670
					{
669
					{
671
						obtenirArbreMotsCles() ;
670
						obtenirArbreMotsCles() ;
672
						arbreCharge = true ;
671
						arbreCharge = true ;
673
					}
672
					}
674
				}
673
				}
675
				
674
				
676
			}) ;
675
			}) ;
677
			
676
			
678
			motsClesEnCours  = "";
677
			motsClesEnCours  = "";
679
		}
678
		}
680
 
679
 
681
		@Override
680
		@Override
682
		public boolean renvoyerEtatFiltre() {
681
		public boolean renvoyerEtatFiltre() {
683
			// TODO Auto-generated method stub
682
			// TODO Auto-generated method stub
684
			return false;
683
			return false;
685
		}
684
		}
686
 
685
 
687
		@Override
686
		@Override
688
		public String renvoyerNomFiltre() {
687
		public String renvoyerNomFiltre() {
689
			// TODO Auto-generated method stub
688
			// TODO Auto-generated method stub
690
			return null;
689
			return null;
691
		}
690
		}
692
 
691
 
693
		@Override
692
		@Override
694
		public String[] renvoyerValeursAFiltrer() {
693
		public String[] renvoyerValeursAFiltrer() {
695
			
694
			
696
			String val = "";
695
			String val = "";
697
			
696
			
698
			TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
697
			TreeNode[] noeuds = ((MultiSelectionModel)arbreMotsCles.getSelectionModel()).getSelectedNodes();
699
			
698
			
700
			for(int i = 0; i< noeuds.length ; i++) {
699
			for(int i = 0; i< noeuds.length ; i++) {
701
				if(noeuds[i].getDepth() > 0) {
700
				if(noeuds[i].getDepth() > 0) {
702
					val += ";"+noeuds[i].getId();
701
					val += ";"+noeuds[i].getId();
703
				}
702
				}
704
			}
703
			}
705
			
704
			
706
			val = val.replaceFirst(";", "");
705
			val = val.replaceFirst(";", "");
707
			
706
			
708
			String[] valeursFiltres = {"id_mots_cles", val};
707
			String[] valeursFiltres = {"id_mots_cles", val};
709
			
708
			
710
			return valeursFiltres;
709
			return valeursFiltres;
711
		}
710
		}
712
 
711
 
713
		@Override
712
		@Override
714
		public void valider() {
713
		public void valider() {
715
			// TODO Auto-generated method stub
714
			// TODO Auto-generated method stub
716
			
715
			
717
		}
716
		}
718
		
717
		
719
 
718
 
720
		public void montrerContextMenuArbre(final TreeNode n, EventObject e,
719
		public void montrerContextMenuArbre(final TreeNode n, EventObject e,
721
				TreeEditor te) {
720
				TreeEditor te) {
722
				Menu mn = new Menu();
721
				Menu mn = new Menu();
723
				final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
722
				final com.gwtext.client.widgets.menu.Item ajoutN = new Item(
724
						"Ajouter un projet");
723
						"Ajouter un projet");
725
				final com.gwtext.client.widgets.menu.Item suppN = new Item(
724
				final com.gwtext.client.widgets.menu.Item suppN = new Item(
726
						"Supprimer projet");
725
						"Supprimer projet");
727
 
726
 
728
				mn.addItem(ajoutN);
727
				mn.addItem(ajoutN);
729
				mn.addItem(suppN);
728
				mn.addItem(suppN);
730
 
729
 
731
				mn.addListener(new MenuListenerAdapter() {
730
				mn.addListener(new MenuListenerAdapter() {
732
 
731
 
733
					@Override
732
					@Override
734
					public void onItemClick(BaseItem item, EventObject e) {
733
					public void onItemClick(BaseItem item, EventObject e) {
735
						if (item.equals(suppN)) {
734
						if (item.equals(suppN)) {
736
							supprimerNoeud(n);
735
							supprimerNoeud(n);
737
						}
736
						}
738
						if (item.equals(ajoutN)) {
737
						if (item.equals(ajoutN)) {
739
							ajouterNoeud(n);
738
							ajouterNoeud(n);
740
						}
739
						}
741
					}
740
					}
742
				});
741
				});
743
 
742
 
744
				mn.showAt(e.getXY());
743
				mn.showAt(e.getXY());
745
		}
744
		}
746
 
745
 
747
		@Override
746
		@Override
748
		public void viderFiltre() {
747
		public void viderFiltre() {
749
			arbreMotsCles.getSelectionModel().clearSelections();
748
			arbreMotsCles.getSelectionModel().clearSelections();
750
			motsClesEnCours = "";
749
			motsClesEnCours = "";
751
		}
750
		}
752
}
751
}