Subversion Repositories eFlore/Applications.cel

Rev

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