Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 43 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
40 aperonnet 1
package org.tela_botanica.client.vues;
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Filtrable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
7
import com.google.gwt.core.client.JavaScriptObject;
8
import com.gwtext.client.data.Node;
9
import com.gwtext.client.data.NodeTraversalCallback;
10
import com.gwtext.client.data.Tree;
11
import com.gwtext.client.core.EventObject;
12
import com.gwtext.client.core.JsObject;
13
import com.gwtext.client.widgets.Button;
14
import com.gwtext.client.widgets.Component;
15
import com.gwtext.client.widgets.Panel;
16
import com.gwtext.client.widgets.Window;
17
import com.gwtext.client.widgets.event.ButtonListener;
18
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
19
import com.gwtext.client.widgets.event.ContainerListener;
20
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
21
import com.gwtext.client.widgets.event.WindowListenerAdapter;
22
import com.gwtext.client.widgets.form.TextField;
23
import com.gwtext.client.widgets.layout.RowLayout;
24
import com.gwtext.client.widgets.layout.RowLayoutData;
25
import com.gwtext.client.widgets.menu.Menu;
26
import com.gwtext.client.widgets.tree.TreeEditor;
27
import com.gwtext.client.widgets.tree.TreeNode;
28
import com.gwtext.client.widgets.tree.TreePanel;
29
 
30
public class ArbreMotsClesFiltreVue extends Window implements Rafraichissable, Filtrable {
31
 
32
	/**
33
	 * Le médiateur associé à la vue
34
	 */
35
	private ImageMediateur iMediateur = null ;
36
	/**
37
	 * Les mots clés en cours
38
	 */
39
	private String motsClesEncours = "" ;
40
 
41
	/**
42
	 * Le treepanel qui affiche l'arbre
43
	 */
44
	private TreePanel arbreMotsCles = null ;
45
 
46
	/**
47
	 * Bouton rechercher
48
	 */
49
	private Button rechercher = null ;
50
 
51
	/**
52
	 * booléen d'initialisation
53
	 */
54
	private boolean estInstancie = false ;
55
 
56
	/**
57
	 * booléen d'etat
58
	 */
59
	private boolean filtreModifie = false ;
60
 
61
	private ArbreMotsClesFiltreVue()
62
	{
63
		super() ;
64
	}
65
 
66
	public ArbreMotsClesFiltreVue(ImageMediateur im)
67
	{
68
 
69
		// on crée le panel
70
		super("Mots clés") ;
71
		this.setLayout(new RowLayout());
72
		iMediateur = im ;
73
 
74
		// on crée le conteneur de l'arbre
75
		arbreMotsCles = new TreePanel() ;
76
		// on permet le drag and drop dans l'arbre
77
		arbreMotsCles.setEnableDD(true) ;
78
		arbreMotsCles.setId("x-view-tree-filter") ;
79
		arbreMotsCles.setAutoWidth(true) ;
80
		//arbreMotsCles.setAutoScroll(true) ;
81
		arbreMotsCles.setBorder(false) ;
82
 
83
		// on crée une racine pour l'arbre
84
		TreeNode root = new TreeNode("Tags") ;
85
		root.setId("racine_filtre") ;
86
		String[] usObject = {"Mots clés" , "racine" } ;
87
		root.setUserObject(usObject) ;
88
 
89
		arbreMotsCles.setRootNode(root) ;
90
		arbreMotsCles.setRootVisible(false) ;
91
		arbreMotsCles.getRootNode().setIcon("tela.png") ;
92
		arbreMotsCles.setBorder(false) ;
93
 
94
		rechercher = new Button("Rechercher") ;
95
 
96
		// on met en forme le layout
97
		this.add(arbreMotsCles,new RowLayoutData("90%")) ;
98
		this.add(rechercher,new RowLayoutData("10%")) ;
99
 
100
		this.setBorder(false) ;
101
		this.setCollapsible(true) ;
102
		this.setTitleCollapse(true) ;
103
 
104
		// on ajoute les listeners
105
		ajouterListeners() ;
106
		estInstancie = true ;
107
	}
108
 
109
	public void ajouterListeners()
110
	{
111
		// gestion de la validation
112
		rechercher.addListener(new ButtonListenerAdapter() {
113
 
114
			public void onClick(Button button, EventObject e) {
115
 
116
				// on vide les mots clés en cours
117
				motsClesEncours = "" ;
118
				// pour chaque noeud à partir de la racine
119
				getArbreMotsCles().getRootNode().cascade(new NodeTraversalCallback() {
120
 
121
				// on éxécute une fonction
122
				public boolean execute(Node node) {
123
 
124
						// on récupère le mot clé associé au noeud et ses infos
125
						TreeNode tn = getArbreMotsCles().getNodeById(node.getId()) ;
126
 
127
							String[] usObject =  (String[])tn.getUserObject() ;
128
							getIMediateur().mettreAjourMotsClesId(usObject[0],usObject[1]) ;
129
 
130
								if(tn.getUI().isChecked())
131
								{
132
									// et les concatène à la string des mots clés en cours
133
									motsClesEncours += usObject[1]+"," ;
134
								}
135
 
136
						return true ;
137
					}
138
 
139
				});
140
 
141
				// on suppose que le filtre a change
142
				filtreModifie = true ;
143
				// enfin on notifie le médiateur et on lui passe l'arbre et la liste des mots clés ainsi obtenue
144
				getIMediateur().obtenirPhotoGalerie(getIMediateur().getFiltreMotsCles()) ;
145
			}
146
 
147
		}) ;
148
 
149
		this.addListener(new WindowListenerAdapter() {
150
 
151
			public void onClose(Panel panel) {
152
 
153
				arbreMotsCles.getRootNode().destroy() ;
154
 
155
				// on crée une racine pour l'arbre
156
				TreeNode root = new TreeNode("Tags") ;
157
				root.setId("racine_filtre") ;
158
				String[] usObject = {"Mots clés" , "racine" } ;
159
				root.setUserObject(usObject) ;
160
				arbreMotsCles.setRootNode(root) ;
161
			}
162
		}) ;
163
	}
164
 
165
	public void rafraichir(Object nouvelleDonnees,
166
			boolean repandreRaffraichissement) {
167
 
168
		// si on a reçu un arbre
169
		if(nouvelleDonnees instanceof Tree)
170
		{
171
				Tree nouvelArbre = (Tree)nouvelleDonnees ;
172
 
173
				copierFilsNoeud(nouvelArbre.getRootNode(), arbreMotsCles.getRootNode()) ;
174
 
175
					getArbreMotsCles().expandAll() ;
176
 
177
					// si l'arbre n'était pas encore considéré comme instancié
178
					if(!estInstancie)
179
					{
180
						// on signale que oui
181
						estInstancie = true ;
182
					}
183
 
184
					filtreModifie = false ;
185
 
186
					setSize(200, 300) ;
187
					show() ;
188
		}
189
 
190
	}
191
 
192
	public ImageMediateur getIMediateur()
193
	{
194
		return iMediateur ;
195
	}
196
 
197
	public TreePanel getArbreMotsCles()
198
	{
199
		return arbreMotsCles ;
200
	}
201
 
202
	public String renvoyerNomFiltre() {
203
 
204
		return "mots clés" ;
205
	}
206
 
207
	public String[] renvoyerValeursAFiltrer() {
208
 
209
		String[] valeursFiltrees = {"ci_meta_mots_cles",motsClesEncours} ;
210
 
211
		return valeursFiltrees ;
212
	}
213
 
214
	public void copierFilsNoeud(Node ndPereOriginal, TreeNode ndPereCopie)
215
	{
216
		Node[] ndNodeFils = ndPereOriginal.getChildNodes() ;
217
 
218
		for (int i = 0; i < ndNodeFils.length; i++) {
219
 
220
			String[] usObj = (String[])ndNodeFils[i].getUserObject() ;
221
			TreeNode child = new TreeNode(usObj[0]) ;
222
			child.setIcon("tela.png") ;
223
			child.setChecked(false);
224
			child.setUserObject(usObj) ;
225
			ndPereCopie.appendChild(child) ;
226
 
227
			if(! ndNodeFils[i].isLeaf())
228
			{
229
				copierFilsNoeud(ndNodeFils[i],child) ;
230
			}
231
 
232
		}
233
	}
234
 
235
 
236
	public boolean renvoyerEtatFiltre() {
237
 
238
		return filtreModifie ;
239
	}
240
 
241
}