Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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