Subversion Repositories eFlore/Applications.cel

Rev

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