Subversion Repositories eFlore/Applications.cel

Rev

Details | Last modification | View Log | RSS feed

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