Subversion Repositories eFlore/Archives.cel-v2

Rev

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