Subversion Repositories eFlore/Applications.cel

Rev

Rev 235 | Details | Compare with Previous | Last modification | View Log | RSS feed

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