Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 28 | Rev 36 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
27 aperonnet 1
package org.tela_botanica.client.vues;
2
 
3
import java.util.HashMap;
4
 
5
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.MotsClesAsynchroneDAO;
8
 
9
import com.google.gwt.core.client.JavaScriptObject;
10
import com.google.gwt.user.client.Window;
11
import com.gwtext.client.core.EventObject;
28 aperonnet 12
import com.gwtext.client.core.ExtElement;
27 aperonnet 13
import com.gwtext.client.data.Node;
14
import com.gwtext.client.data.NodeTraversalCallback;
15
import com.gwtext.client.data.Tree;
16
import com.gwtext.client.dd.DD;
17
import com.gwtext.client.dd.DragData;
18
import com.gwtext.client.dd.DragDrop;
19
import com.gwtext.client.widgets.BoxComponent;
20
import com.gwtext.client.widgets.Button;
21
import com.gwtext.client.widgets.Component;
22
import com.gwtext.client.widgets.Container;
28 aperonnet 23
import com.gwtext.client.widgets.Editor;
27 aperonnet 24
import com.gwtext.client.widgets.Panel;
25
import com.gwtext.client.widgets.event.ButtonListener;
26
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
30 aperonnet 27
import com.gwtext.client.widgets.event.ComponentListener;
28
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
29
import com.gwtext.client.widgets.event.ContainerListener;
30
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
27 aperonnet 31
import com.gwtext.client.widgets.event.EditorListener;
28 aperonnet 32
import com.gwtext.client.widgets.event.EditorListenerAdapter;
30 aperonnet 33
import com.gwtext.client.widgets.event.PanelListenerAdapter;
28 aperonnet 34
import com.gwtext.client.widgets.form.Field;
27 aperonnet 35
import com.gwtext.client.widgets.form.TextField;
36
import com.gwtext.client.widgets.layout.RowLayout;
37
import com.gwtext.client.widgets.layout.RowLayoutData;
38
import com.gwtext.client.widgets.menu.Menu;
39
import com.gwtext.client.widgets.tree.DropNodeCallback;
40
import com.gwtext.client.widgets.tree.TreeEditor;
41
import com.gwtext.client.widgets.tree.TreeNode;
42
import com.gwtext.client.widgets.tree.TreePanel;
43
import com.gwtext.client.widgets.tree.event.TreePanelListener;
44
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
45
 
46
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
47
 
48
	private ImageMediateur iMediateur = null ;
49
 
50
	private TreePanel arbreMotsCles = null ;
51
	private TreeEditor te = null ;
52
	private TextField tfEdit = null ;
53
	private Button valider = null ;
54
	private String motsClesEnCours = "" ;
30 aperonnet 55
	private String[] motsClesEnAttente ;
28 aperonnet 56
	private boolean ajoutNoeud = false ;
57
	private boolean modifNoeud = false ;
30 aperonnet 58
	private boolean estInstancie = false ;
59
	private boolean motsCleInitialises ;
27 aperonnet 60
 
61
	public ArbreMotsClesVue(ImageMediateur im)
62
	{
63
		super("Mots clés") ;
64
		this.setLayout(new RowLayout());
65
		iMediateur = im ;
66
 
67
		arbreMotsCles = new TreePanel() ;
68
		arbreMotsCles.setEnableDD(true) ;
69
 
30 aperonnet 70
		TreeNode root = new TreeNode("Tags") ;
27 aperonnet 71
		root.setId("racine") ;
72
		String[] usObject = {"Mots clés" , "racine" } ;
73
		root.setUserObject(usObject) ;
74
 
75
		arbreMotsCles.setRootNode(root) ;
30 aperonnet 76
		arbreMotsCles.setRootVisible(false) ;
27 aperonnet 77
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
78
 
79
		tfEdit = new TextField() ;
80
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
28 aperonnet 81
		valider = new Button("Appliquer") ;
27 aperonnet 82
		arbreMotsCles.add(te) ;
83
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
84
		this.add(valider,new RowLayoutData("10%")) ;
85
 
86
		ajouterListeners() ;
30 aperonnet 87
 
27 aperonnet 88
	}
89
 
90
	private ImageMediateur GetIMediateur() {
91
 
92
		return iMediateur ;
93
 
94
	}
95
 
96
	/**
97
	 * @return the arbreMotsCles
98
	 */
99
	public TreePanel getArbreMotsCles() {
100
		return arbreMotsCles;
101
	}
102
 
103
	/**
104
	 * @return the te
105
	 */
106
	public TreeEditor getTe() {
107
		return te;
108
	}
109
 
110
	/**
111
	 * @return the tfEdit
112
	 */
113
	public TextField getTfEdit() {
114
		return tfEdit;
115
	}
116
 
117
	public void ajouterListeners()
118
	{
119
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
120
 
121
			public void onClick(TreeNode node, EventObject e) {
122
 
28 aperonnet 123
				e.stopEvent() ;
27 aperonnet 124
				gererClicNoeud(node);
125
			}
126
 
127
 
128
			public void onContextMenu(TreeNode node, EventObject e) {
129
 
30 aperonnet 130
					e.stopEvent() ;
131
					GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
27 aperonnet 132
 
133
			}
134
 
135
			public void onDblClick(TreeNode node, EventObject e) {
136
 
28 aperonnet 137
				modifNoeud = true ;
27 aperonnet 138
				te.startEdit(node);
139
			}
140
 
141
			public void onTextChange(TreeNode node, String text, String oldText) {
28 aperonnet 142
 
27 aperonnet 143
 
28 aperonnet 144
				TreeNode nd = node ;
27 aperonnet 145
				String[] usObject = new String[2] ;
146
				usObject[0] = text ;
28 aperonnet 147
				usObject[1] = ((String[])nd.getUserObject())[1] ;
148
				nd.setUserObject(usObject) ;
27 aperonnet 149
 
28 aperonnet 150
				if(ajoutNoeud)
151
				{
152
					GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
153
					ajoutNoeud = false ;
154
				}
155
				else
156
				{
157
					modifNoeud = false ;
158
					GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
159
				}
160
 
27 aperonnet 161
			}
162
 
28 aperonnet 163
			public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
164
			{
165
				GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
166
			}
167
 
168
 
27 aperonnet 169
			public void onCheckChange(TreeNode node, boolean checked) {
170
 
171
				if(checked)
172
				{
173
					node.bubble(new NodeTraversalCallback() {
174
 
175
						public boolean execute(Node node)
176
						{
177
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
178
							tn.getUI().toggleCheck(true) ;
179
 
180
							return true ;
181
						}
182
					}) ;
183
				}
184
			}
30 aperonnet 185
 
27 aperonnet 186
		}) ;
187
 
188
		valider.addListener(new ButtonListenerAdapter() {
189
 
190
			public void onClick(Button button, EventObject e) {
191
 
192
				motsClesEnCours = "" ;
193
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
194
 
195
					public boolean execute(Node node) {
196
 
197
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
198
 
199
								String[] usObject =  (String[])tn.getUserObject() ;
200
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
201
 
202
									if(tn.getUI().isChecked())
203
									{
204
										motsClesEnCours += usObject[1]+"," ;
205
									}
206
 
207
							return true ;
208
					}
209
 
210
				});
211
 
28 aperonnet 212
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
27 aperonnet 213
			}
214
		}) ;
215
 
216
	}
217
 
30 aperonnet 218
	public void obtenirArbreMotsCles() {
219
 
220
		GetIMediateur().obtenirArbreMotsCles(this) ;
221
 
222
	}
223
 
224
 
27 aperonnet 225
	public void supprimerNoeud(TreeNode n)
226
	{
30 aperonnet 227
 
228
		if(!n.getId().equals(getArbreMotsCles().getRootNode().getId()))
229
		{
230
			n.getParentNode().removeChild(n);
231
			n.destroy() ;
232
			GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
233
		}
234
		else
235
		{
236
			Window.alert("Impossible de supprimer la racine de l'arbre") ;
237
		}
27 aperonnet 238
	}
239
 
240
	public void ajouterNoeud(TreeNode parent)
241
	{
28 aperonnet 242
 
243
		ajoutNoeud = true ;
27 aperonnet 244
		TreeNode nd = new TreeNode("");
245
		nd.setIcon("tela.png") ;
246
		nd.setChecked(true);
247
		String[] usObject = new String[2] ;
248
		usObject[0] = "" ;
249
		usObject[1] = Integer.toString(nd.hashCode()) ;
250
		nd.setId(usObject[1]) ;
251
		nd.setUserObject(usObject) ;
252
		parent.appendChild(nd);
253
		parent.expand();
254
		te.startEdit(nd);
255
	}
256
 
257
	public void gererClicNoeud(TreeNode node)
258
	{
259
		if(node.getUI().isChecked())
260
		{
28 aperonnet 261
			node.getUI().toggleCheck(false) ;
27 aperonnet 262
		}
263
		else
264
		{
28 aperonnet 265
			node.getUI().toggleCheck(true) ;
27 aperonnet 266
		}
267
	}
268
 
269
	public void cocherMotsCles(final String[] motsClesIds)
270
	{
30 aperonnet 271
		if(getArbreMotsCles() != null && getArbreMotsCles().getRootNode() != null)
272
		{
273
			getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
274
 
275
				public boolean execute(Node node) {
27 aperonnet 276
 
30 aperonnet 277
						for(int i = 0 ; i < motsClesIds.length ; i++)
278
						{
279
							String usObject[] = (String[])node.getUserObject() ;
280
							String nodeId = usObject[1] ;
281
 
282
							getArbreMotsCles().getNodeById(node.getId()).getUI().toggleCheck(false) ;
283
 
284
							if(nodeId.equals(motsClesIds[i]))
285
							{
286
								getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
287
								return true ;
288
							}
289
						}
290
						return true;
27 aperonnet 291
				}
30 aperonnet 292
 
293
			}) ;
294
		}
27 aperonnet 295
	}
296
 
297
	public void rafraichir(Object nouvelleDonnees,
28 aperonnet 298
			boolean repandreRafraichissement) {
27 aperonnet 299
 
300
		if(nouvelleDonnees instanceof Tree)
301
		{
30 aperonnet 302
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
303
 
304
					getArbreMotsCles().getRootNode().appendChild(nouvelArbre.getRootNode()) ;
305
					getArbreMotsCles().expandAll() ;
306
					estInstancie = true ;
307
 
308
					if(motsCleInitialises == false && motsClesEnAttente != null)
309
					{
310
						cocherMotsCles(motsClesEnAttente) ;
311
						motsCleInitialises = true ;
312
					}
27 aperonnet 313
		}
314
 
315
		if(nouvelleDonnees instanceof String[])
316
		{
30 aperonnet 317
			if(estInstancie && nouvelleDonnees != null)
318
			{
319
				String[] motsClesIds = (String[])nouvelleDonnees ;
320
				cocherMotsCles(motsClesIds) ;
321
 
322
			}
323
			else
324
			{
325
				motsClesEnAttente = (String[])nouvelleDonnees ;
326
			}
27 aperonnet 327
		}
328
 
329
	}
330
 
331
}