Subversion Repositories eFlore/Archives.cel-v2

Rev

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

Rev 36 Rev 40
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import java.util.Date;
3
import java.util.Date;
4
import java.util.HashMap;
4
import java.util.HashMap;
5
 
5
 
6
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.image.ImageMediateur;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
 
8
 
9
import com.google.gwt.core.client.JavaScriptObject;
9
import com.google.gwt.core.client.JavaScriptObject;
10
import com.google.gwt.user.client.ui.ClickListener;
10
import com.google.gwt.user.client.ui.ClickListener;
11
import com.google.gwt.user.client.ui.Label;
11
import com.google.gwt.user.client.ui.Label;
12
import com.google.gwt.user.client.ui.TextBox;
12
import com.google.gwt.user.client.ui.TextBox;
13
import com.google.gwt.user.client.ui.Widget;
13
import com.google.gwt.user.client.ui.Widget;
14
import com.gwtext.client.core.EventObject;
14
import com.gwtext.client.core.EventObject;
15
import com.gwtext.client.core.NameValuePair;
15
import com.gwtext.client.core.NameValuePair;
-
 
16
import com.gwtext.client.core.RegionPosition;
16
import com.gwtext.client.data.Store;
17
import com.gwtext.client.data.Store;
17
import com.gwtext.client.data.StringFieldDef;
18
import com.gwtext.client.data.StringFieldDef;
18
import com.gwtext.client.widgets.Button;
19
import com.gwtext.client.widgets.Button;
19
import com.gwtext.client.widgets.Component;
20
import com.gwtext.client.widgets.Component;
20
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.TabPanel;
22
import com.gwtext.client.widgets.TabPanel;
22
import com.gwtext.client.widgets.event.ButtonListener;
23
import com.gwtext.client.widgets.event.ButtonListener;
23
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
24
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
24
import com.gwtext.client.widgets.form.DateField;
25
import com.gwtext.client.widgets.form.DateField;
25
import com.gwtext.client.widgets.form.TextArea;
26
import com.gwtext.client.widgets.form.TextArea;
26
import com.gwtext.client.widgets.form.TextField;
27
import com.gwtext.client.widgets.form.TextField;
27
import com.gwtext.client.widgets.grid.GridPanel;
28
import com.gwtext.client.widgets.grid.GridPanel;
28
import com.gwtext.client.widgets.grid.GridView;
29
import com.gwtext.client.widgets.grid.GridView;
29
import com.gwtext.client.widgets.grid.PropertyGridPanel;
30
import com.gwtext.client.widgets.grid.PropertyGridPanel;
30
import com.gwtext.client.widgets.grid.event.GridCellListener;
31
import com.gwtext.client.widgets.grid.event.GridCellListener;
31
import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;
32
import com.gwtext.client.widgets.grid.event.GridCellListenerAdapter;
-
 
33
import com.gwtext.client.widgets.layout.BorderLayout;
-
 
34
import com.gwtext.client.widgets.layout.BorderLayoutData;
32
import com.gwtext.client.widgets.layout.RowLayout;
35
import com.gwtext.client.widgets.layout.RowLayout;
33
import com.gwtext.client.widgets.layout.RowLayoutData;
36
import com.gwtext.client.widgets.layout.RowLayoutData;
34
import com.gwtext.client.widgets.layout.VerticalLayout;
37
import com.gwtext.client.widgets.layout.VerticalLayout;
35
import com.gwtext.client.widgets.menu.DateItem;
38
import com.gwtext.client.widgets.menu.DateItem;
36
import com.gwtext.client.widgets.menu.Menu;
39
import com.gwtext.client.widgets.menu.Menu;
37
import com.gwtext.client.widgets.tree.TreeNode;
40
import com.gwtext.client.widgets.tree.TreeNode;
38
import com.gwtext.client.widgets.tree.TreePanel;
41
import com.gwtext.client.widgets.tree.TreePanel;
39
 
42
 
40
/**
43
/**
41
 * Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il implémente l'interface rafraichissable
44
 * Panneau contenant les infos, les métadonnées et l'arbre des mots clés, il implémente l'interface rafraichissable
42
 * @author aurelien
45
 * @author aurelien
43
 *
46
 *
44
 */
47
 */
45
public class PanneauMetadonneesVue extends TabPanel implements Rafraichissable {
48
public class PanneauMetadonneesVue extends TabPanel implements Rafraichissable {
46
 
49
 
47
	/**
50
	/**
48
	 * Le médiateur associé à la vue
51
	 * Le médiateur associé à la vue
49
	 */
52
	 */
50
	private ImageMediateur imediateur = null ;
53
	private ImageMediateur imediateur = null ;
51
	/**
54
	/**
52
	 * Le panneau des Exifs
55
	 * Le panneau des Exifs
53
	 */
56
	 */
54
	private PropertyGridPanel ExifGrid = null ;
57
	private PropertyGridPanel ExifGrid = null ;
55
	/**
58
	/**
56
	 * Le panneau des Iptc
59
	 * Le panneau des Iptc
57
	 */
60
	 */
58
	private PropertyGridPanel IptcGrid = null ;
61
	private PropertyGridPanel IptcGrid = null ;
59
	
62
	
60
	/**
63
	/**
61
	 * La grille pour le panneau des Exifs
64
	 * La grille pour le panneau des Exifs
62
	 */
65
	 */
63
	private GridView gViewExif = null ;
66
	private GridView gViewExif = null ;
64
	/**
67
	/**
65
	 * La grille pour le panneau de Iptc
68
	 * La grille pour le panneau de Iptc
66
	 */
69
	 */
67
	private GridView gViewIptc = null ;
70
	private GridView gViewIptc = null ;
68
	
71
	
69
	/**
72
	/**
70
	 * L'onglet des Exifs
73
	 * L'onglet des Exifs
71
	 */
74
	 */
72
	private Panel panneauExifGrid = null; 
75
	private Panel panneauExifGrid = null; 
73
	/**
76
	/**
74
	 * L'onglet des Iptc
77
	 * L'onglet des Iptc
75
	 */
78
	 */
76
	private Panel panneauIptcGrid = null ;
79
	private Panel panneauIptcGrid = null ;
77
	/**
80
	/**
78
	 * L'onglet des infos
81
	 * L'onglet des infos
79
	 */
82
	 */
80
	private Panel panneauInfoGrid = null ;
83
	private Panel panneauInfoGrid = null ;
81
	/**
84
	/**
82
	 * L'onglet des mots clés
85
	 * L'onglet des mots clés
83
	 */
86
	 */
84
	private ArbreMotsClesVue panneauMotsCles = null ;
87
	private ArbreMotsClesVue panneauMotsCles = null ;
85
	
88
	
86
	/**
89
	/**
87
	 * Le champ commentaire
90
	 * Le champ commentaire
88
	 */
91
	 */
89
	private TextField commentaireGeneral = null ;
92
	private TextField commentaireGeneral = null ;
90
	/**
93
	/**
91
	 * Le champ date
94
	 * Le champ date
92
	 */
95
	 */
93
	private DateField dateImage = null ;
96
	private DateField dateImage = null ;
94
	/**
97
	/**
95
	 * Le bouton de validation
98
	 * Le bouton de validation
96
	 */
99
	 */
97
	Button validerInfo = null ;
100
	Button validerInfo = null ;
98
	/**
101
	/**
99
	 * Booleen d'instanciation
102
	 * Booleen d'instanciation
100
	 */
103
	 */
101
	boolean estInstancie = false ;
104
	boolean estInstancie = false ;
102
	
105
	
103
	/**
106
	/**
104
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
107
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
105
	 */
108
	 */
106
	private PanneauMetadonneesVue()
109
	private PanneauMetadonneesVue()
107
	{
110
	{
108
		super() ;
111
		super() ;
109
	}
112
	}
110
	
113
	
111
	/**
114
	/**
112
	 * Constructeur avec argument
115
	 * Constructeur avec argument
113
	 * @param im
116
	 * @param im
114
	 */
117
	 */
115
	public PanneauMetadonneesVue(ImageMediateur im)
118
	public PanneauMetadonneesVue(ImageMediateur im)
116
	{
119
	{
117
		super() ;
120
		super() ;
118
		
121
		
119
		// on associe le médiateur
122
		// on associe le médiateur
120
		imediateur = im ;
123
		imediateur = im ;
121
		
124
		
122
		// on crée et dispose les panneaux et les champs
125
		// on crée et dispose les panneaux et les champs
123
		panneauExifGrid = new Panel("Exif") ;
126
		panneauExifGrid = new Panel("Exif") ;
124
		panneauIptcGrid = new Panel("Iptc") ;
127
		panneauIptcGrid = new Panel("Iptc") ;
125
		panneauInfoGrid = new Panel("info") ;
128
		panneauInfoGrid = new Panel("info") ;
126
		panneauMotsCles = new ArbreMotsClesVue(im) ;
129
		panneauMotsCles = new ArbreMotsClesVue(im) ;
-
 
130
		
-
 
131
		
127
		
132
		Panel sousPanneauInfosGenerales = new Panel("Infos Générales") ;
-
 
133
		sousPanneauInfosGenerales.setLayout(new VerticalLayout());
128
		panneauInfoGrid.setLayout(new VerticalLayout());
134
		sousPanneauInfosGenerales.setBorder(false) ;
-
 
135
		sousPanneauInfosGenerales.setHeight(200);
129
		panneauInfoGrid.setHeight(500);
136
		sousPanneauInfosGenerales.setAutoWidth(true) ;
130
		panneauInfoGrid.setMargins(5) ;
137
		sousPanneauInfosGenerales.setMargins(5) ;
-
 
138
		sousPanneauInfosGenerales.setPaddings(5) ;
-
 
139
		sousPanneauInfosGenerales.setCollapsible(true) ;
131
		panneauInfoGrid.setPaddings(5) ;
140
		
132
		Label labelComm = new Label("Commentaires :") ;
141
		Label labelComm = new Label("Commentaires :") ;
133
		labelComm.setHeight("20px") ;
142
		labelComm.setHeight("20px") ;
134
		commentaireGeneral = new TextArea() ;
143
		commentaireGeneral = new TextArea() ;
135
		commentaireGeneral.setAutoWidth(true) ;
144
		commentaireGeneral.setAutoWidth(true) ;
136
		Label labelDate = new Label("Date :") ;
145
		Label labelDate = new Label("Date :") ;
137
		
146
		
138
		labelDate.setHeight("20px") ;
147
		labelDate.setHeight("20px") ;
139
		
148
		
140
		dateImage = new DateField() ;
149
		dateImage = new DateField() ;
141
		dateImage.setAutoWidth(true) ;
150
		dateImage.setAutoWidth(true) ;
142
		dateImage.setFormat("d/m/y") ;
151
		dateImage.setFormat("d/m/y") ;
143
		
152
		
144
		validerInfo = new Button("OK") ;
153
		validerInfo = new Button("OK") ;
145
		
154
		
146
		panneauInfoGrid.add(labelComm) ;
155
		sousPanneauInfosGenerales.add(labelComm) ;
147
		panneauInfoGrid.add(commentaireGeneral) ;
156
		sousPanneauInfosGenerales.add(commentaireGeneral) ;
148
		panneauInfoGrid.add(labelDate) ;
157
		sousPanneauInfosGenerales.add(labelDate) ;
149
		panneauInfoGrid.add(dateImage) ;
158
		sousPanneauInfosGenerales.add(dateImage) ;
-
 
159
		sousPanneauInfosGenerales.add(validerInfo) ;
-
 
160
		sousPanneauInfosGenerales.setAutoHeight(true);
-
 
161
		panneauMotsCles.setAutoHeight(true) ;
-
 
162
		
-
 
163
		panneauInfoGrid.setBorder(false);
-
 
164
		panneauInfoGrid.setAutoHeight(true);
-
 
165
		
-
 
166
		
150
		panneauInfoGrid.add(validerInfo) ;
167
		panneauInfoGrid.add(sousPanneauInfosGenerales) ;
151
		
168
		panneauInfoGrid.add(panneauMotsCles) ;
152
		
169
		
153
		
170
		
154
		this.add(panneauInfoGrid) ;
171
		this.add(panneauInfoGrid) ;
155
		this.add(panneauExifGrid) ;
172
		this.add(panneauExifGrid) ;
156
		this.add(panneauIptcGrid) ;
173
		this.add(panneauIptcGrid) ;
157
		this.add(panneauMotsCles) ;
-
 
158
		
174
		
159
		gViewExif = new GridView();
175
		gViewExif = new GridView();
160
		gViewExif.setForceFit(true);
176
		gViewExif.setForceFit(true);
161
		
177
		
162
		ExifGrid = new PropertyGridPanel() ;
178
		ExifGrid = new PropertyGridPanel() ;
163
		ExifGrid.setId("meta_exif");
179
		ExifGrid.setId("meta_exif");
164
		ExifGrid.setView(gViewExif);
180
		ExifGrid.setView(gViewExif);
165
		ExifGrid.setNameText("Métadonnées Exif");
181
		ExifGrid.setNameText("Métadonnées Exif");
166
		ExifGrid.setAutoWidth(true);
182
		ExifGrid.setAutoWidth(true);
167
		ExifGrid.setAutoHeight(true);
183
		ExifGrid.setAutoHeight(true);
168
		ExifGrid.setSorted(false);
184
		ExifGrid.setSorted(false);
169
		
185
		
170
		gViewIptc = new GridView();
186
		gViewIptc = new GridView();
171
		gViewIptc.setForceFit(true);
187
		gViewIptc.setForceFit(true);
172
		
188
		
173
		IptcGrid = new PropertyGridPanel() ;
189
		IptcGrid = new PropertyGridPanel() ;
174
		IptcGrid.setId("meta_iptc");
190
		IptcGrid.setId("meta_iptc");
175
		IptcGrid.setView(gViewIptc);
191
		IptcGrid.setView(gViewIptc);
176
		
192
		
177
		IptcGrid.setNameText("Métadonnées IPTC");
193
		IptcGrid.setNameText("Métadonnées IPTC");
178
		IptcGrid.setAutoWidth(true);
194
		IptcGrid.setAutoWidth(true);
179
		IptcGrid.setAutoHeight(true);
195
		IptcGrid.setAutoHeight(true);
180
		IptcGrid.setSorted(false);
196
		IptcGrid.setSorted(false);
181
		
197
		
182
		
198
		
183
		panneauExifGrid.add(ExifGrid);
199
		panneauExifGrid.add(ExifGrid);
184
		panneauIptcGrid.add(IptcGrid);
200
		panneauIptcGrid.add(IptcGrid);
185
		
201
		
186
		// on ajoute les listeners
202
		// on ajoute les listeners
187
		ajouterListeners() ;
203
		ajouterListeners() ;
188
		
204
		
189
		
205
		
190
		// on effectue le rendu
206
		// on effectue le rendu
191
		this.doLayout(true) ;
207
		this.doLayout(true) ;
192
		
208
		
193
	}
209
	}
194
	
210
	
195
	private void ajouterListeners()
211
	private void ajouterListeners()
196
	{
212
	{
197
		// on ajoute un écouteur
213
		// on ajoute un écouteur
198
		validerInfo.addListener(new ButtonListenerAdapter() {
214
		validerInfo.addListener(new ButtonListenerAdapter() {
199
 
215
 
200
			// gestion du clic
216
			// gestion du clic
201
			public void onClick(Button button, EventObject e) {
217
			public void onClick(Button button, EventObject e) {
202
				
218
				
203
				// lors du clic sur le bouton valider on met à jour les commentaires et la date
219
				// lors du clic sur le bouton valider on met à jour les commentaires et la date
204
				getIMediateur().mettreAJourInfo(commentaireGeneral.getText(), dateImage.getRawValue()) ;
220
				getIMediateur().mettreAJourInfo(commentaireGeneral.getText(), dateImage.getRawValue()) ;
205
				
221
				
206
			}	
222
			}	
207
		});
223
		});
208
		
224
		
209
		// gestion des clics dans la grille
225
		// gestion des clics dans la grille
210
		ExifGrid.addGridCellListener(new GridCellListenerAdapter() {
226
		ExifGrid.addGridCellListener(new GridCellListenerAdapter() {
211
 
227
 
212
			// lors d'un clic d'une cellule
228
			// lors d'un clic d'une cellule
213
			public void onCellClick(GridPanel grid, int rowIndex, int colIndex,
229
			public void onCellClick(GridPanel grid, int rowIndex, int colIndex,
214
					EventObject e) {
230
					EventObject e) {
215
				
231
				
216
				// on empeche l'édition
232
				// on empeche l'édition
217
				e.stopEvent() ;
233
				e.stopEvent() ;
218
				ExifGrid.stopEditing() ;
234
				ExifGrid.stopEditing() ;
219
				
235
				
220
			}
236
			}
221
 
237
 
222
			// lors du double clic sur une cellule
238
			// lors du double clic sur une cellule
223
			public void onCellDblClick(GridPanel grid, int rowIndex,
239
			public void onCellDblClick(GridPanel grid, int rowIndex,
224
					int colIndex, EventObject e) {
240
					int colIndex, EventObject e) {
225
				
241
				
226
				// on empêche l'édition
242
				// on empêche l'édition
227
				e.stopEvent() ;
243
				e.stopEvent() ;
228
				ExifGrid.stopEditing() ;
244
				ExifGrid.stopEditing() ;
229
				
245
				
230
			}
246
			}
231
			
247
			
232
		}) ;
248
		}) ;
233
		
249
		
234
		IptcGrid.addGridCellListener(new GridCellListenerAdapter() {
250
		IptcGrid.addGridCellListener(new GridCellListenerAdapter() {
235
 
251
 
236
			// lors d'un clic d'une cellule
252
			// lors d'un clic d'une cellule
237
			public void onCellClick(GridPanel grid, int rowIndex, int colIndex,
253
			public void onCellClick(GridPanel grid, int rowIndex, int colIndex,
238
					EventObject e) {
254
					EventObject e) {
239
				// on empeche l'édition
255
				// on empeche l'édition
240
				e.stopEvent() ;
256
				e.stopEvent() ;
241
				ExifGrid.stopEditing() ;
257
				ExifGrid.stopEditing() ;
242
				
258
				
243
			}
259
			}
244
 
260
 
245
			// lors d'un double clic d'une cellule
261
			// lors d'un double clic d'une cellule
246
			public void onCellDblClick(GridPanel grid, int rowIndex,
262
			public void onCellDblClick(GridPanel grid, int rowIndex,
247
					int colIndex, EventObject e) {
263
					int colIndex, EventObject e) {
248
				// on empeche l'édition
264
				// on empeche l'édition
249
				e.stopEvent() ;
265
				e.stopEvent() ;
250
				ExifGrid.stopEditing() ;
266
				ExifGrid.stopEditing() ;
251
				
267
				
252
			}
268
			}
253
			
269
			
254
		}) ;
270
		}) ;
255
	}
271
	}
256
	
272
	
257
	/**
273
	/**
258
	 * Desactive visuellement ce panneau
274
	 * Desactive visuellement ce panneau
259
	 */
275
	 */
260
	public void desactiverPanneau()
276
	public void desactiverPanneau()
261
	{
277
	{
262
		this.setDisabled(true) ;
278
		this.setDisabled(true) ;
263
	}
279
	}
264
	
280
	
265
	/**
281
	/**
266
	 * Active visuellement ce panneau
282
	 * Active visuellement ce panneau
267
	 */
283
	 */
268
	public void activerPanneau()
284
	public void activerPanneau()
269
	{
285
	{
270
		this.setDisabled(false) ;
286
		this.setDisabled(false) ;
271
	}
287
	}
272
	
288
	
273
	/**
289
	/**
274
	 * Accesseur pour le médiateur
290
	 * Accesseur pour le médiateur
275
	 * @return le médiateur associé à la vue
291
	 * @return le médiateur associé à la vue
276
	 */
292
	 */
277
	public ImageMediateur getIMediateur()
293
	public ImageMediateur getIMediateur()
278
	{
294
	{
279
		return imediateur ;
295
		return imediateur ;
280
	}
296
	}
281
	
297
	
282
	/**
298
	/**
283
	 * Méthode héritée de l'interface rafraichissable
299
	 * Méthode héritée de l'interface rafraichissable
284
	 * @param nouvelleDonnees les nouvelles données
300
	 * @param nouvelleDonnees les nouvelles données
285
	 * @param repandreRafraichissement le booleen de notification de mise à jour
301
	 * @param repandreRafraichissement le booleen de notification de mise à jour
286
	 */
302
	 */
287
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
303
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
288
		
304
		
289
		// si on reçoit un tableau d'objets
305
		// si on reçoit un tableau d'objets
290
		if(nouvelleDonnees instanceof Object[])
306
		if(nouvelleDonnees instanceof Object[])
291
		{
307
		{
292
			// extrait infos, exifs et iptc
308
			// extrait infos, exifs et iptc
293
			Object meta[] = (Object[])nouvelleDonnees ;
309
			Object meta[] = (Object[])nouvelleDonnees ;
294
			String[][] exif = (String[][])meta[0] ;
310
			String[][] exif = (String[][])meta[0] ;
295
			String[][] iptc = (String[][])meta[1] ;
311
			String[][] iptc = (String[][])meta[1] ;
296
			String[][] gen = (String[][])meta[2] ;
312
			String[][] gen = (String[][])meta[2] ;
297
			
313
			
298
			NameValuePair[] exifSource = new NameValuePair[exif.length] ;
314
			NameValuePair[] exifSource = new NameValuePair[exif.length] ;
299
			NameValuePair[] iptcSource = new NameValuePair[iptc.length] ;
315
			NameValuePair[] iptcSource = new NameValuePair[iptc.length] ;
300
			
316
			
301
			
317
			
302
			int maxLength ;
318
			int maxLength ;
303
			if(exif.length <= iptc.length)
319
			if(exif.length <= iptc.length)
304
			{
320
			{
305
				maxLength = iptc.length ;
321
				maxLength = iptc.length ;
306
			}
322
			}
307
			else
323
			else
308
			{
324
			{
309
				maxLength = exif.length ;
325
				maxLength = exif.length ;
310
			}
326
			}
311
			
327
			
312
			for(int i = 0; i < maxLength ; i++)
328
			for(int i = 0; i < maxLength ; i++)
313
			{
329
			{
314
				if(i < exif.length)
330
				if(i < exif.length)
315
				{
331
				{
316
					exifSource[i] = new NameValuePair(exif[i][0],exif[i][1]) ;
332
					exifSource[i] = new NameValuePair(exif[i][0],exif[i][1]) ;
317
				}
333
				}
318
				
334
				
319
				if(i < iptc.length)
335
				if(i < iptc.length)
320
				{
336
				{
321
					iptcSource[i] = new NameValuePair(iptc[i][0],iptc[i][1]) ;
337
					iptcSource[i] = new NameValuePair(iptc[i][0],iptc[i][1]) ;
322
				}
338
				}
323
			}
339
			}
324
			
340
			
325
			commentaireGeneral.setValue(gen[0][1]) ;
341
			commentaireGeneral.setValue(gen[0][1]) ;
326
			
342
			
327
			dateImage.setValue(gen[1][1]) ;
343
			dateImage.setValue(gen[1][1]) ;
328
			
344
			
329
			// et on met à jour les données pour l'affichage
345
			// et on met à jour les données pour l'affichage
330
			ExifGrid.setSource(exifSource);
346
			ExifGrid.setSource(exifSource);
331
			IptcGrid.setSource(iptcSource);
347
			IptcGrid.setSource(iptcSource);
332
 
348
 
333
		}	
349
		}	
334
	}
350
	}
335
 
351
 
336
	/**
352
	/**
337
	 * Accesseur pour le panneau des mots clés
353
	 * Accesseur pour le panneau des mots clés
338
	 * @return the panneauMotsCles
354
	 * @return the panneauMotsCles
339
	 */
355
	 */
340
	public ArbreMotsClesVue getPanneauMotsCles() {
356
	public ArbreMotsClesVue getPanneauMotsCles() {
341
		return panneauMotsCles;
357
		return panneauMotsCles;
342
	}
358
	}
343
}
359
}