Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 27 | Rev 30 | 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;
27
import com.gwtext.client.widgets.event.EditorListener;
28 aperonnet 28
import com.gwtext.client.widgets.event.EditorListenerAdapter;
29
import com.gwtext.client.widgets.form.Field;
27 aperonnet 30
import com.gwtext.client.widgets.form.TextField;
31
import com.gwtext.client.widgets.layout.RowLayout;
32
import com.gwtext.client.widgets.layout.RowLayoutData;
33
import com.gwtext.client.widgets.menu.Menu;
34
import com.gwtext.client.widgets.tree.DropNodeCallback;
35
import com.gwtext.client.widgets.tree.TreeEditor;
36
import com.gwtext.client.widgets.tree.TreeNode;
37
import com.gwtext.client.widgets.tree.TreePanel;
38
import com.gwtext.client.widgets.tree.event.TreePanelListener;
39
import com.gwtext.client.widgets.tree.event.TreePanelListenerAdapter;
40
 
41
public class ArbreMotsClesVue extends Panel implements Rafraichissable {
42
 
43
	private ImageMediateur iMediateur = null ;
44
 
45
	private TreePanel arbreMotsCles = null ;
46
	private TreeEditor te = null ;
47
	private TextField tfEdit = null ;
48
	private Button valider = null ;
49
	private String motsClesEnCours = "" ;
28 aperonnet 50
	private boolean ajoutNoeud = false ;
51
	private boolean modifNoeud = false ;
27 aperonnet 52
 
53
	public ArbreMotsClesVue(ImageMediateur im)
54
	{
55
		super("Mots clés") ;
56
		this.setLayout(new RowLayout());
57
		iMediateur = im ;
58
 
59
		arbreMotsCles = new TreePanel() ;
60
		arbreMotsCles.setEnableDD(true) ;
61
 
62
		TreeNode root = new TreeNode("Mots clés") ;
63
		root.setId("racine") ;
64
		String[] usObject = {"Mots clés" , "racine" } ;
65
		root.setUserObject(usObject) ;
66
 
67
		arbreMotsCles.setRootNode(root) ;
68
		arbreMotsCles.setRootVisible(true) ;
69
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
70
 
71
		tfEdit = new TextField() ;
72
		te = new TreeEditor(arbreMotsCles,tfEdit) ;
28 aperonnet 73
		valider = new Button("Appliquer") ;
27 aperonnet 74
		arbreMotsCles.add(te) ;
75
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
76
		this.add(valider,new RowLayoutData("10%")) ;
77
 
78
		ajouterListeners() ;
79
	}
80
 
81
	private ImageMediateur GetIMediateur() {
82
 
83
		return iMediateur ;
84
 
85
	}
86
 
87
	/**
88
	 * @return the arbreMotsCles
89
	 */
90
	public TreePanel getArbreMotsCles() {
91
		return arbreMotsCles;
92
	}
93
 
94
	/**
95
	 * @return the te
96
	 */
97
	public TreeEditor getTe() {
98
		return te;
99
	}
100
 
101
	/**
102
	 * @return the tfEdit
103
	 */
104
	public TextField getTfEdit() {
105
		return tfEdit;
106
	}
107
 
108
	public void ajouterListeners()
109
	{
110
		arbreMotsCles.addListener(new TreePanelListenerAdapter() {
111
 
112
			public void onClick(TreeNode node, EventObject e) {
113
 
28 aperonnet 114
				e.stopEvent() ;
27 aperonnet 115
				gererClicNoeud(node);
116
			}
117
 
118
 
119
			public void onContextMenu(TreeNode node, EventObject e) {
120
 
121
				e.stopEvent() ;
122
				GetIMediateur().montrerContextMenuArbre(node, e , getTe()) ;
123
 
124
			}
125
 
126
			public void onDblClick(TreeNode node, EventObject e) {
127
 
28 aperonnet 128
				modifNoeud = true ;
27 aperonnet 129
				te.startEdit(node);
130
			}
131
 
132
			public void onTextChange(TreeNode node, String text, String oldText) {
28 aperonnet 133
 
27 aperonnet 134
 
28 aperonnet 135
				TreeNode nd = node ;
27 aperonnet 136
				String[] usObject = new String[2] ;
137
				usObject[0] = text ;
28 aperonnet 138
				usObject[1] = ((String[])nd.getUserObject())[1] ;
139
				nd.setUserObject(usObject) ;
27 aperonnet 140
 
28 aperonnet 141
				if(ajoutNoeud)
142
				{
143
					GetIMediateur().ajouterMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
144
					ajoutNoeud = false ;
145
				}
146
				else
147
				{
148
					modifNoeud = false ;
149
					GetIMediateur().modifierMotCleDansArbre(nd,getArbreMotsCles().getTree()) ;
150
				}
151
 
27 aperonnet 152
			}
153
 
28 aperonnet 154
			public void onMoveNode(Tree tree, TreeNode node, TreeNode oldParent, TreeNode newParent,int index)
155
			{
156
				GetIMediateur().deplacerMotCleDansArbre(node, getArbreMotsCles().getTree()) ;
157
			}
158
 
159
 
160
 
27 aperonnet 161
			public void onCheckChange(TreeNode node, boolean checked) {
162
 
163
				if(checked)
164
				{
165
					node.bubble(new NodeTraversalCallback() {
166
 
167
						public boolean execute(Node node)
168
						{
169
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
170
							tn.getUI().toggleCheck(true) ;
171
 
172
							return true ;
173
						}
174
					}) ;
175
				}
176
			}
177
		}) ;
178
 
28 aperonnet 179
 
27 aperonnet 180
		valider.addListener(new ButtonListenerAdapter() {
181
 
182
			public void onClick(Button button, EventObject e) {
183
 
184
				motsClesEnCours = "" ;
185
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
186
 
187
					public boolean execute(Node node) {
188
 
189
							TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
190
 
191
								String[] usObject =  (String[])tn.getUserObject() ;
192
								GetIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
193
 
194
									if(tn.getUI().isChecked())
195
									{
196
										motsClesEnCours += usObject[1]+"," ;
197
									}
198
 
199
							return true ;
200
					}
201
 
202
				});
203
 
28 aperonnet 204
				GetIMediateur().mettreAjourMotsCles(motsClesEnCours,arbreMotsCles.getTree()) ;
27 aperonnet 205
			}
206
		}) ;
207
 
208
	}
209
 
210
	public void supprimerNoeud(TreeNode n)
211
	{
212
		n.getParentNode().removeChild(n);
213
		n.destroy() ;
28 aperonnet 214
		GetIMediateur().supprimerMotCleDansArbre(n, arbreMotsCles.getTree()) ;
27 aperonnet 215
	}
216
 
217
	public void ajouterNoeud(TreeNode parent)
218
	{
28 aperonnet 219
 
220
		ajoutNoeud = true ;
27 aperonnet 221
		TreeNode nd = new TreeNode("");
222
		nd.setIcon("tela.png") ;
223
		nd.setChecked(true);
224
		String[] usObject = new String[2] ;
225
		usObject[0] = "" ;
226
		usObject[1] = Integer.toString(nd.hashCode()) ;
227
		nd.setId(usObject[1]) ;
228
		nd.setUserObject(usObject) ;
229
		parent.appendChild(nd);
230
		parent.expand();
231
		te.startEdit(nd);
232
	}
233
 
234
	public void gererClicNoeud(TreeNode node)
235
	{
236
		if(node.getUI().isChecked())
237
		{
28 aperonnet 238
			node.getUI().toggleCheck(false) ;
27 aperonnet 239
		}
240
		else
241
		{
28 aperonnet 242
			node.getUI().toggleCheck(true) ;
27 aperonnet 243
		}
244
	}
245
 
246
	public void cocherMotsCles(final String[] motsClesIds)
247
	{
248
		getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
249
 
250
			public boolean execute(Node node) {
251
 
252
				for(int i = 0 ; i < motsClesIds.length ; i++)
253
				{
254
					String usObject[] = (String[])node.getUserObject() ;
255
					String nodeId = usObject[1] ;
256
 
257
					getArbreMotsCles().getNodeById(node.getId()).getUI().toggleCheck(false) ;
258
 
259
					if(nodeId.equals(motsClesIds[i]))
260
					{
261
						getArbreMotsCles().getNodeById(nodeId).getUI().toggleCheck(true) ;
262
						return true ;
263
					}
264
				}
265
				return true;
266
			}
267
 
268
		}) ;
269
	}
270
 
271
	public void rafraichir(Object nouvelleDonnees,
28 aperonnet 272
			boolean repandreRafraichissement) {
27 aperonnet 273
 
274
		if(nouvelleDonnees instanceof Tree)
275
		{
276
			Tree nouvelArbre = (Tree)nouvelleDonnees ;
277
			getArbreMotsCles().setRootNode(nouvelArbre.getRootNode()) ;
278
		}
279
 
280
		if(nouvelleDonnees instanceof String[])
281
		{
282
			String[] motsClesIds = (String[])nouvelleDonnees ;
283
			cocherMotsCles(motsClesIds) ;
284
		}
285
 
286
	}
287
 
288
}