Subversion Repositories eFlore/Archives.cel-v2

Rev

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