Subversion Repositories eFlore/Applications.cel

Rev

Rev 408 | Rev 638 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 408 Rev 595
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.ListePaginable;
4
import org.tela_botanica.client.interfaces.ListePaginable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.VueListable;
6
import org.tela_botanica.client.interfaces.VueListable;
7
import org.tela_botanica.client.vues.BarrePaginationVue;
7
import org.tela_botanica.client.vues.BarrePaginationVue;
8
 
8
 
9
import com.google.gwt.core.client.GWT;
9
import com.google.gwt.core.client.GWT;
10
import com.google.gwt.user.client.Element;
10
import com.google.gwt.user.client.Element;
11
import com.google.gwt.user.client.Window;
11
import com.google.gwt.user.client.Window;
12
import com.google.gwt.user.client.ui.HTML;
12
import com.google.gwt.user.client.ui.HTML;
13
import com.gwtext.client.core.EventCallback;
13
import com.gwtext.client.core.EventCallback;
14
import com.gwtext.client.core.EventObject;
14
import com.gwtext.client.core.EventObject;
15
import com.gwtext.client.core.Ext;
15
import com.gwtext.client.core.Ext;
16
import com.gwtext.client.core.ExtElement;
16
import com.gwtext.client.core.ExtElement;
17
import com.gwtext.client.core.XTemplate;
17
import com.gwtext.client.core.XTemplate;
18
import com.gwtext.client.data.FieldDef;
18
import com.gwtext.client.data.FieldDef;
19
import com.gwtext.client.data.IntegerFieldDef;
19
import com.gwtext.client.data.IntegerFieldDef;
20
import com.gwtext.client.data.Record;
20
import com.gwtext.client.data.Record;
21
import com.gwtext.client.data.RecordDef;
21
import com.gwtext.client.data.RecordDef;
22
import com.gwtext.client.data.Store;
22
import com.gwtext.client.data.Store;
23
import com.gwtext.client.data.StringFieldDef;
23
import com.gwtext.client.data.StringFieldDef;
24
import com.gwtext.client.dd.DragData;
24
import com.gwtext.client.dd.DragData;
25
import com.gwtext.client.dd.DragSource;
25
import com.gwtext.client.dd.DragSource;
26
import com.gwtext.client.dd.DropTarget;
26
import com.gwtext.client.dd.DropTarget;
27
import com.gwtext.client.dd.DropTargetConfig;
27
import com.gwtext.client.dd.DropTargetConfig;
28
import com.gwtext.client.util.Format;
28
import com.gwtext.client.util.Format;
29
import com.gwtext.client.widgets.Component;
29
import com.gwtext.client.widgets.Component;
30
import com.gwtext.client.widgets.Container;
30
import com.gwtext.client.widgets.Container;
31
import com.gwtext.client.widgets.DataView;
31
import com.gwtext.client.widgets.DataView;
32
import com.gwtext.client.widgets.Panel;
32
import com.gwtext.client.widgets.Panel;
33
import com.gwtext.client.widgets.event.ContainerListener;
33
import com.gwtext.client.widgets.event.ContainerListener;
34
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
34
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
35
import com.gwtext.client.widgets.event.DataViewListener;
35
import com.gwtext.client.widgets.event.DataViewListener;
36
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
36
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
37
import com.gwtext.client.widgets.event.PanelListenerAdapter;
37
import com.gwtext.client.widgets.event.PanelListenerAdapter;
38
import com.gwtext.client.widgets.grid.GridDragData;
38
import com.gwtext.client.widgets.grid.GridDragData;
39
 
39
 
40
/**
40
/**
41
 * Galerie d'images miniatures Avec barre de pagination
41
 * Galerie d'images miniatures Avec barre de pagination
42
 * 
42
 * 
43
 * @author aurelien
43
 * @author aurelien
44
 */
44
 */
45
public class GalerieImageVue extends Panel implements Rafraichissable,
45
public class GalerieImageVue extends Panel implements Rafraichissable,
46
		VueListable, ListePaginable {
46
		VueListable, ListePaginable {
47
 
47
 
48
	/**
48
	/**
49
	 * instance du médiateur
49
	 * instance du médiateur
50
	 */
50
	 */
51
	private ImageMediateur iMediateur = null;
51
	private ImageMediateur iMediateur = null;
52
	/**
52
	/**
53
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
53
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
54
	 * d'afficher les données
54
	 * d'afficher les données
55
	 */
55
	 */
56
	private DataView dView = null;
56
	private DataView dView = null;
57
	/**
57
	/**
58
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
58
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
59
	 * d'afficher les données
59
	 * d'afficher les données
60
	 */
60
	 */
61
	private Store st = null;
61
	private Store st = null;
62
	/**
62
	/**
63
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par
63
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par
64
	 * page et la navigation entre eux
64
	 * page et la navigation entre eux
65
	 */
65
	 */
66
	private BarrePaginationVue pt = null;
66
	private BarrePaginationVue pt = null;
67
	/**
67
	/**
68
	 * Booleen indiquant si la galerie est instanciée ou pas
68
	 * Booleen indiquant si la galerie est instanciée ou pas
69
	 */
69
	 */
70
	private boolean estInstancie = false;
70
	private boolean estInstancie = false;
71
	
71
	
72
	private boolean garderRatio = true;
72
	private boolean garderRatio = true;
73
	
73
	
74
	private int tailleOr = 100 ;
74
	private int tailleOr = 100 ;
75
	
75
	
76
	boolean lienUploadInitialise = false ;
76
	boolean lienUploadInitialise = false ;
77
	
77
	
78
	HTML videPanel = null ;
78
	HTML videPanel = null ;
79
 
79
 
80
 
80
 
81
	/**
81
	/**
82
	 * Constructeur sans argument, privé car ne doit pas être utilisé
82
	 * Constructeur sans argument, privé car ne doit pas être utilisé
83
	 */
83
	 */
84
	@SuppressWarnings("unused")
84
	@SuppressWarnings("unused")
85
	private GalerieImageVue() {
85
	private GalerieImageVue() {
86
		super();
86
		super();
87
	}
87
	}
88
 
88
 
89
	/**
89
	/**
90
	 * Constructeur avec argument
90
	 * Constructeur avec argument
91
	 * 
91
	 * 
92
	 * @param im
92
	 * @param im
93
	 *            le médiateur avec lequel la vue va communiquer
93
	 *            le médiateur avec lequel la vue va communiquer
94
	 */
94
	 */
95
	public GalerieImageVue(ImageMediateur im) {
95
	public GalerieImageVue(ImageMediateur im) {
96
		super("Galerie");
96
		super("Galerie");
97
		iMediateur = im;
97
		iMediateur = im;
98
		
98
		
99
		// on ajoute des listeners au composant tout entier
99
		// on ajoute des listeners au composant tout entier
100
		this.addListener(new ContainerListenerAdapter() {
100
		this.addListener(new ContainerListenerAdapter() {
101
 
101
 
102
			// pour gagner du temps on n'instancie la vue en elle même que lors
102
			// pour gagner du temps on n'instancie la vue en elle même que lors
103
			// du premier affichage (lazy rendering)
103
			// du premier affichage (lazy rendering)
104
			public void onShow(Component component) {
104
			public void onShow(Component component) {
105
 
105
 
106
				if (!estInstancie) {
106
				if (!estInstancie) {
107
					initialiser();
107
					initialiser();
108
				}
108
				}
109
				
109
				
110
			}
110
			}
111
		});
111
		});
112
		
112
		
113
		AjouterListenersLiens();
113
		AjouterListenersLiens();
114
 
114
 
115
		// et on ajoute la tool bar
115
		// et on ajoute la tool bar
116
		pt = new BarrePaginationVue(this);
116
		pt = new BarrePaginationVue(this);
117
		pt.setLabelElement("Images");
117
		pt.setLabelElement("Images");
118
		pt.setTaillePageParDefaut(50);
118
		pt.setTaillePageParDefaut(50);
119
		this.setBottomToolbar(pt);
119
		this.setBottomToolbar(pt);
120
 
120
 
121
	}
121
	}
122
 
122
 
123
	/**
123
	/**
124
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la
124
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la
125
	 * vue de données
125
	 * vue de données
126
	 */
126
	 */
127
	public void ajouterListenersDataView() {
127
	public void ajouterListenersDataView() {
128
 
128
 
129
		// ajout de listeners pour la gestion de la selection
129
		// ajout de listeners pour la gestion de la selection
130
		// dans la galerie
130
		// dans la galerie
131
		
131
		
132
		dView.addListener(new DataViewListenerAdapter() {
132
		dView.addListener(new DataViewListenerAdapter() {
133
 
133
 
134
			// gestion du clic sur une image
134
			// gestion du clic sur une image
135
 
135
 
136
			public void onClick(DataView source, int index, Element node,
136
			public void onClick(DataView source, int index, Element node,
137
					EventObject e) {
137
					EventObject e) {
138
				
138
				
139
				// on en notifie le médiateur
139
				// on en notifie le médiateur
140
				getIMediateur().clicGalerieImage(index, node, e);
140
				getIMediateur().clicGalerieImage(index, node, e);
141
 
141
 
142
			}
142
			}
143
 
143
 
144
			// gestion du clic droit
144
			// gestion du clic droit
145
 
145
 
146
			public void onContextMenu(DataView source, int index, Element node,
146
			public void onContextMenu(DataView source, int index, Element node,
147
					EventObject e) {
147
					EventObject e) {
148
 
148
 
149
				// on stoppe l'évenement
149
				// on stoppe l'évenement
150
				e.stopEvent();
150
				e.stopEvent();
151
				// et on notifie le médiateur
151
				// et on notifie le médiateur
152
				getIMediateur().montrerContextMenu(e);
152
				getIMediateur().montrerContextMenu(e);
153
 
153
 
154
			}
154
			}
155
 
155
 
156
			// gestion du double clic
156
			// gestion du double clic
157
 
157
 
158
			public void onDblClick(DataView source, int index, Element node,
158
			public void onDblClick(DataView source, int index, Element node,
159
					EventObject e) {
159
					EventObject e) {
160
 
160
 
161
				// on notife le mediateur
161
				// on notife le mediateur
162
				getIMediateur().clicGalerieImage(index, node, e);
162
				getIMediateur().clicGalerieImage(index, node, e);
163
 
163
 
164
			}
164
			}
165
 
165
 
166
			// gestion des actions en fonction de la selection
166
			// gestion des actions en fonction de la selection
167
 
167
 
168
			public void onSelectionChange(DataView view, Element[] selections) {
168
			public void onSelectionChange(DataView view, Element[] selections) {
169
 
169
 
170
				// s'il n'y a aucun élement sélectionné
170
				// s'il n'y a aucun élement sélectionné
171
				if (selections.length <= 0) {
171
				if (selections.length <= 0) {
172
					// on en notifie le médiateur
172
					// on en notifie le médiateur
173
					getIMediateur().aucuneSelection();
173
					getIMediateur().aucuneSelection();
174
				} else {
174
				} else {
175
					// sinon on notifie le médiateur
175
					// sinon on notifie le médiateur
176
					getIMediateur().selection();
176
					getIMediateur().selection();
177
					// et on lui demande de synchroniser la séléction avec les
177
					// et on lui demande de synchroniser la séléction avec les
178
					// autres vues
178
					// autres vues
179
					getIMediateur().synchroniserSelection("galerie");
179
					getIMediateur().synchroniserSelection("galerie");
180
				}
180
				}
181
			}
181
			}
182
		});
182
		});
183
	}
183
	}
184
 
184
 
185
	/**
185
	/**
186
	 * Accesseur pour la dataview
186
	 * Accesseur pour la dataview
187
	 * 
187
	 * 
188
	 * @return la dataview
188
	 * @return la dataview
189
	 */
189
	 */
190
	public DataView getDView() {
190
	public DataView getDView() {
191
		return dView;
191
		return dView;
192
	}
192
	}
193
 
193
 
194
	/**
194
	/**
195
	 * Renvoie les ids des images sélectionnées
195
	 * Renvoie les ids des images sélectionnées
196
	 * 
196
	 * 
197
	 * @return un tableau de String contenant les identifiants des images
197
	 * @return un tableau de String contenant les identifiants des images
198
	 *         sélectionnées
198
	 *         sélectionnées
199
	 */
199
	 */
200
	public String[] getIdSelectionnees() {
200
	public String[] getIdSelectionnees() {
201
		Record[] selection = getDView().getSelectedRecords();
201
		Record[] selection = getDView().getSelectedRecords();
202
		int taille = selection.length;
202
		int taille = selection.length;
203
		String id_selection[] = new String[taille];
203
		String id_selection[] = new String[taille];
204
 
204
 
205
		for (int i = 0; i < selection.length; i++) {
205
		for (int i = 0; i < selection.length; i++) {
206
 
206
 
207
			id_selection[i] = selection[i].getAsString("num_image");
207
			id_selection[i] = selection[i].getAsString("num_image");
208
		}
208
		}
209
 
209
 
210
		return id_selection;
210
		return id_selection;
211
	}
211
	}
212
 
212
 
213
	/**
213
	/**
214
	 * Accesseur pour le médiateur
214
	 * Accesseur pour le médiateur
215
	 * 
215
	 * 
216
	 * @return le médiateur associé à la vue
216
	 * @return le médiateur associé à la vue
217
	 */
217
	 */
218
	public ImageMediateur getIMediateur() {
218
	public ImageMediateur getIMediateur() {
219
		return iMediateur;
219
		return iMediateur;
220
	}
220
	}
221
 
221
 
222
	/**
222
	/**
223
	 * Accesseur pour le store
223
	 * Accesseur pour le store
224
	 * 
224
	 * 
225
	 * @return le store associé à la vue
225
	 * @return le store associé à la vue
226
	 */
226
	 */
227
	public Store getSt() {
227
	public Store getSt() {
228
		return st;
228
		return st;
229
	}
229
	}
230
 
230
 
231
	/**
231
	/**
232
	 * Accesseur pour la toolbar
232
	 * Accesseur pour la toolbar
233
	 * 
233
	 * 
234
	 * @return la toolbar associée à la vue
234
	 * @return la toolbar associée à la vue
235
	 */
235
	 */
236
	public BarrePaginationVue getToolBarVue() {
236
	public BarrePaginationVue getToolBarVue() {
237
		return pt;
237
		return pt;
238
	}
238
	}
239
 
239
 
240
	/**
240
	/**
241
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage
241
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage
242
	 * de la liste)
242
	 * de la liste)
243
	 */
243
	 */
244
	public void initialiser() {
244
	public void initialiser() {
245
 
245
 
246
		// Preparation de la dataview et du template
246
		// Preparation de la dataview et du template
247
		// le template va créer une div contenant une image
247
		// le template va créer une div contenant une image
248
		// pour chacune des photos
248
		// pour chacune des photos
249
		final XTemplate template = new XTemplate(
249
		final XTemplate template = new XTemplate(
250
				new String[] {
250
				new String[] {
251
						"<tpl for='.'>",
251
						"<tpl for='.'>",
252
						"<div class='thumb-wrap' id='{num_image}'>",
252
						"<div class='thumb-wrap' id='{num_image}'>",
253
						"<div class='thumb dview-list'>{indication_transmission}{indication_liaison}<img class='miniature_galerie' src='{url_image_M}' width='{taille_x_s} px' height='{taille_y_s} px' title='{infobulle}' /></div>",
253
						"<div class='thumb dview-list'>{indication_transmission}{indication_liaison}<img class='miniature_galerie' src='{url_image_M}' width='{taille_x_s} px' height='{taille_y_s} px' title='{infobulle}' /></div>",
254
						"<span class='info_image'>{nom_obs_associees_formatees}</span></div>", "</tpl>",
254
						"<span class='info_image'>{nom_obs_associees_formatees}</span></div>", "</tpl>",
255
						"<div class='x-clear'></div>" });
255
						"<div class='x-clear'></div>" });
256
		// pour des raisons de performances on compile le template en une
256
		// pour des raisons de performances on compile le template en une
257
		// fonction
257
		// fonction
258
		template.compile();
258
		template.compile();
259
 
259
 
260
		// la dataview affichera les images en accord avec le template
260
		// la dataview affichera les images en accord avec le template
261
		// cree precedemment
261
		// cree precedemment
262
		dView = new DataView("div.thumb-wrap") {
262
		dView = new DataView("div.thumb-wrap") {
263
 
263
 
264
			public void prepareData(Data data) {
264
			public void prepareData(Data data) {
265
				data.setProperty("shortName", Format.ellipsis(data
265
				data.setProperty("shortName", Format.ellipsis(data
266
						.getProperty("nom_original"), 15));
266
						.getProperty("nom_original"), 15));
267
				
267
				
268
				int[] XY = {data.getPropertyAsInt("taille_x") ,data.getPropertyAsInt("taille_y")} ;
268
				int[] XY = {data.getPropertyAsInt("taille_x") ,data.getPropertyAsInt("taille_y")} ;
269
				int[] XYresize ;
269
				int[] XYresize ;
270
				
270
				
271
				if(garderRatio) {
271
				if(garderRatio) {
272
					XYresize = calculerDimensions(XY);
272
					XYresize = calculerDimensions(XY);
273
				}
273
				}
274
				else {
274
				else {
275
					XYresize = new int[2] ;
275
					XYresize = new int[2] ;
276
					XYresize[0] = XYresize[1] = tailleOr ;
276
					XYresize[0] = XYresize[1] = tailleOr ;
277
					
277
					
278
				}
278
				}
279
				
279
				
280
				data.setProperty("taille_x_s", XYresize[0]);
280
				data.setProperty("taille_x_s", XYresize[0]);
281
				data.setProperty("taille_y_s", XYresize[1]);	
281
				data.setProperty("taille_y_s", XYresize[1]);	
282
				
282
				
283
				String nomObs = data.getProperty("obs_associees");
283
				String nomObs = data.getProperty("obs_associees");
284
 
284
 
285
				String htmltransmis = "";
285
				String htmltransmis = "";
286
				String htmllie = "";
286
				String htmllie = "";
287
				
287
				
288
				boolean associee = estAssocieeTransmise(nomObs)[0];
288
				boolean associee = estAssocieeTransmise(nomObs)[0];
289
				boolean transmise = estAssocieeTransmise(nomObs)[1];
289
				boolean transmise = estAssocieeTransmise(nomObs)[1];
290
				
290
				
291
				String nomFormate = getNomsObservationsFormatees(nomObs);
291
				String nomFormate = getNomsObservationsFormatees(nomObs);
292
				
292
				
293
				if(associee) {
293
				if(associee) {
294
					htmllie = "<img class='picto_haut_droite' src='chain.png' />";
294
					htmllie = "<img class='picto_haut_droite' src='chain.png' />";
295
				}
295
				}
296
				
296
				
297
				if(transmise) {
297
				if(transmise) {
298
					htmltransmis = "<img class='picto_haut_gauche' src='tela.png' />";
298
					htmltransmis = "<img class='picto_haut_gauche' src='tela.png' />";
299
				}
299
				}
300
 
300
 
301
				data.setProperty("infobulle", nomFormate);
301
				data.setProperty("infobulle", nomFormate);
302
				data.setProperty("indication_transmission", htmltransmis);
302
				data.setProperty("indication_transmission", htmltransmis);
303
				data.setProperty("indication_liaison", htmllie);
303
				data.setProperty("indication_liaison", htmllie);
304
				data.setProperty("nom_obs_associees_formatees", nomFormate);
304
				data.setProperty("nom_obs_associees_formatees", nomFormate);
305
								
305
								
306
			}
306
			}
307
		};
307
		};
308
		dView.setTpl(template);
308
		dView.setTpl(template);
309
 
309
 
310
		// parametre d'affichage de la dataview
310
		// parametre d'affichage de la dataview
311
		this.setAutoScroll(true);
311
		this.setAutoScroll(true);
312
		dView.setAutoHeight(true);
312
		dView.setAutoHeight(true);
313
		dView.setMultiSelect(true);
313
		dView.setMultiSelect(true);
314
		dView.setOverCls("x-view-over");
314
		dView.setOverCls("x-view-over");
315
		dView.setEmptyText("");
315
		dView.setEmptyText("");
316
 
316
 
317
		// creation du store
317
		// creation du store
318
		FieldDef defNumImage = new IntegerFieldDef("num_image");
318
		FieldDef defNumImage = new IntegerFieldDef("num_image");
319
		FieldDef defNomImage = new StringFieldDef("nom_original");
319
		FieldDef defNomImage = new StringFieldDef("nom_original");
320
		FieldDef defDatImage = new StringFieldDef("dat_image");
320
		FieldDef defDatImage = new StringFieldDef("dat_image");
321
		FieldDef defLieImage = new StringFieldDef("lie_image");
321
		FieldDef defLieImage = new StringFieldDef("lie_image");
322
		FieldDef defAppImage = new StringFieldDef("app_image");
322
		FieldDef defAppImage = new StringFieldDef("app_image");
323
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
323
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
324
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
324
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
325
		FieldDef defUrlImage = new StringFieldDef("url_image");
325
		FieldDef defUrlImage = new StringFieldDef("url_image");
326
		FieldDef defTailleX = new IntegerFieldDef("taille_x");
326
		FieldDef defTailleX = new IntegerFieldDef("taille_x");
327
		FieldDef defTailleY = new IntegerFieldDef("taille_y");
327
		FieldDef defTailleY = new IntegerFieldDef("taille_y");
328
		FieldDef defObsAssociees = new StringFieldDef("obs_associees");
328
		FieldDef defObsAssociees = new StringFieldDef("obs_associees");
329
		FieldDef[] defTab = { defNumImage, defNomImage, defDatImage, defLieImage,
329
		FieldDef[] defTab = { defNumImage, defNomImage, defDatImage, defLieImage,
330
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage,defTailleX,defTailleY, defObsAssociees};
330
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage,defTailleX,defTailleY, defObsAssociees};
331
		RecordDef rd = new RecordDef(defTab);
331
		RecordDef rd = new RecordDef(defTab);
332
		st = new Store(rd);
332
		st = new Store(rd);
333
		dView.setStore(st);
333
		dView.setStore(st);
334
 
334
 
335
		this.getDView().setLoadingText("chargement");
335
		this.getDView().setLoadingText("chargement");
336
 
336
 
337
		this.add(dView);
337
		this.add(dView);
338
		dView.hide();
338
		dView.hide();
339
		
339
		
340
		videPanel = new HTML("<div class=\"avertissement\" >Aucune image à afficher. <br/> <a id=\"lienUploadMultiple\" href=\"#\" > Cliquez ici pour ajouter un dossier entier ou plusieurs fichiers </a> (nécessite Java) <br/> " +
340
		videPanel = new HTML("<div class=\"avertissement\" >Aucune image à afficher. <br/> <a id=\"lienUploadMultiple\" href=\"#\" > Cliquez ici pour ajouter un dossier entier ou plusieurs fichiers </a> (nécessite Java) <br/> " +
341
				"			<a id=\"lienUploadSimple\" href=\"#\" > Cliquez ici pour ajouter un fichier à la fois </a> <br/> " +
341
				"			<a id=\"lienUploadSimple\" href=\"#\" > Cliquez ici pour ajouter un fichier à la fois </a> <br/> " +
342
				"			Pour ajouter des images plus tard, allez dans le menu Fichier -> Ajouter des images </div>");
342
				"			Pour ajouter des images plus tard, allez dans le menu Fichier -> Ajouter des images </div>");
343
		this.add(videPanel);
343
		this.add(videPanel);
344
		
344
		
345
		// ajouts de la gestion des evenements pour la dataview
345
		// ajouts de la gestion des evenements pour la dataview
346
		configDragAndDrop() ;
346
		configDragAndDrop() ;
347
		ajouterListenersDataView();
347
		ajouterListenersDataView();
348
		
348
		
349
		estInstancie = true ;
349
		estInstancie = true ;
350
		
350
		
351
	}
351
	}
352
	
352
	
353
	public void configDragAndDrop()
353
	public void configDragAndDrop()
354
	{
354
	{
355
		// on fabrique la nouvelle configuration
355
		// on fabrique la nouvelle configuration
356
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
356
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
357
		DropTargetConfig dtc = new DropTargetConfig();
357
		DropTargetConfig dtc = new DropTargetConfig();
358
		dtc.setdDdGroup("DragGroupName");
358
		dtc.setdDdGroup("DragGroupName");
359
 
359
 
360
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
360
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
361
		@SuppressWarnings("unused")
361
		@SuppressWarnings("unused")
362
		DropTarget tg = new DropTarget(this, dtc)
362
		DropTarget tg = new DropTarget(this, dtc)
363
		{
363
		{
364
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
364
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
365
				
365
				
366
				// si les données proviennent d'une grille
366
				// si les données proviennent d'une grille
367
				if(data instanceof GridDragData)
367
				if(data instanceof GridDragData)
368
		    	{
368
		    	{
369
					// on appelle le médiateur
369
					// on appelle le médiateur
370
		    		  	return iMediateur.lierObsDD(source, e, data,getId()) ;   
370
		    		  	return iMediateur.lierObsDD(source, e, data,getId()) ;   
371
		    	}
371
		    	}
372
				return false ;
372
				return false ;
373
			}
373
			}
374
			
374
			
375
			public String notifyOver(DragSource source, EventObject e, DragData data){
375
			public String notifyOver(DragSource source, EventObject e, DragData data){
376
			    return "x-dd-drop-ok";
376
			    return "x-dd-drop-ok";
377
			}
377
			}
378
		};
378
		};
379
        
379
        
380
	}
380
	}
381
 
381
 
382
	/**
382
	/**
383
	 * Méthode héritée de l'interface rafraichissable
383
	 * Méthode héritée de l'interface rafraichissable
384
	 */
384
	 */
385
	public void rafraichir(Object nouvelleDonnees,
385
	public void rafraichir(Object nouvelleDonnees,
386
			boolean repandreRafraichissement) {
386
			boolean repandreRafraichissement) {
387
 
387
 
388
		// si l'objet reçu est un store
388
		// si l'objet reçu est un store
389
		if (nouvelleDonnees instanceof Store) {
389
		if (nouvelleDonnees instanceof Store) {
390
 
390
 
391
				st = (Store) nouvelleDonnees;
391
				st = (Store) nouvelleDonnees;
392
				
392
				
393
			if(st.getCount() != 0) {
393
			if(st.getCount() != 0) {
394
				
394
				
395
				// on le charge
395
				// on le charge
396
				st.load();
396
				st.load();
397
	
397
	
398
				if(videPanel.isVisible()) {
398
				if(videPanel != null && videPanel.isVisible()) {
399
					videPanel.setVisible(false) ;
399
					videPanel.setVisible(false) ;
400
				}
400
				}
401
				
401
				
402
				if(!dView.isVisible()) {
402
				if(!dView.isVisible()) {
403
					dView.setVisible(true);
403
					dView.setVisible(true);
404
				}
404
				}
405
					// on l'affecte à la vue
405
					// on l'affecte à la vue
406
					dView.setStore(st);
406
					dView.setStore(st);
407
					// et on rafrachit la vue
407
					// et on rafrachit la vue
408
					dView.refresh();
408
					dView.refresh();
409
			}
409
			}
410
			else 
410
			else 
411
			{
411
			{
412
				st.removeAll();
412
				st.removeAll();
413
				st.load();
413
				st.load();
414
				dView.setStore(st);
414
				dView.setStore(st);
415
				
415
				
416
				if(dView.isVisible()) {
416
				if(dView.isVisible()) {
417
					dView.hide() ;
417
					dView.hide() ;
418
				}
418
				}
419
				
419
				
420
				if(!videPanel.isVisible()) {
420
				if(videPanel != null && !videPanel.isVisible()) {
421
					videPanel.setVisible(true);
421
					videPanel.setVisible(true);
422
					AjouterListenersLiens();
422
					AjouterListenersLiens();
423
				}
423
				}
424
				
424
				
425
			}
425
			}
426
		}
426
		}
427
 
427
 
428
		// si le composant doit répandre le rafraichissement
428
		// si le composant doit répandre le rafraichissement
429
		if (repandreRafraichissement) {
429
		if (repandreRafraichissement) {
430
			// il en notifie le médiateur en lui donnant une copie des données
430
			// il en notifie le médiateur en lui donnant une copie des données
431
			// et en notifiant qu'il en est l'expéditeur
431
			// et en notifiant qu'il en est l'expéditeur
432
			getIMediateur().synchroniserDonneesZoomListeGalerie(
432
			getIMediateur().synchroniserDonneesZoomListeGalerie(
433
					nouvelleDonnees, this);
433
					nouvelleDonnees, this);
434
		}	
434
		}	
435
	}
435
	}
436
 
436
 
437
	/**
437
	/**
438
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
438
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
439
	 * galerie suivant les identifiants donnés en paramètres
439
	 * galerie suivant les identifiants donnés en paramètres
440
	 * 
440
	 * 
441
	 * @param ids
441
	 * @param ids
442
	 *            les identifiants des images à sélectionner
442
	 *            les identifiants des images à sélectionner
443
	 */
443
	 */
444
	public void selectionnerImages(int[] ids) {
444
	public void selectionnerImages(int[] ids) {
445
 
445
 
446
		getDView().select(ids);
446
		getDView().select(ids);
447
 
447
 
448
	}
448
	}
449
 
449
 
450
	public void changerNumeroPage(int pageCourante) {
450
	public void changerNumeroPage(int pageCourante) {
451
		
451
		
452
		iMediateur.changerNumeroPage(pageCourante) ;
452
		iMediateur.changerNumeroPage(pageCourante) ;
453
		
453
		
454
	}
454
	}
455
 
455
 
456
	public void changerTaillePage(int nouvelleTaillePage) {
456
	public void changerTaillePage(int nouvelleTaillePage) {
457
		
457
		
458
		iMediateur.changerTaillePage(nouvelleTaillePage) ;
458
		iMediateur.changerTaillePage(nouvelleTaillePage) ;
459
	}
459
	}
460
	
460
	
461
	public int[] calculerDimensions(int[] tailleXY) {
461
	public int[] calculerDimensions(int[] tailleXY) {
462
	    
462
	    
463
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
463
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
464
        float tailleOr = this.tailleOr ;
464
        float tailleOr = this.tailleOr ;
465
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
465
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
466
        float[] XYresize = new float[2];
466
        float[] XYresize = new float[2];
467
        
467
        
468
        if(maxTaille == tailleXY[0]) {
468
        if(maxTaille == tailleXY[0]) {
469
            float rapport = tailleXYf[1]/tailleXYf[0] ;
469
            float rapport = tailleXYf[1]/tailleXYf[0] ;
470
            XYresize[0] = tailleOr ;
470
            XYresize[0] = tailleOr ;
471
            XYresize[1] = tailleOr*rapport ;
471
            XYresize[1] = tailleOr*rapport ;
472
        }else {
472
        }else {
473
            float rapport = tailleXYf[0]/tailleXYf[1] ;
473
            float rapport = tailleXYf[0]/tailleXYf[1] ;
474
            XYresize[1] = tailleOr ;
474
            XYresize[1] = tailleOr ;
475
            XYresize[0] = tailleOr*rapport ;
475
            XYresize[0] = tailleOr*rapport ;
476
        }
476
        }
477
        
477
        
478
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
478
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
479
        
479
        
480
        return res;
480
        return res;
481
    }
481
    }
482
	
482
	
483
	private void AjouterListenersLiens() {
483
	private void AjouterListenersLiens() {
484
 
484
 
485
		addListener(new PanelListenerAdapter() {
485
		addListener(new PanelListenerAdapter() {
486
			
486
			
487
			public void onAfterLayout(Container c) {
487
			public void onAfterLayout(Container c) {
488
				ExtElement uploadS = Ext.get("lienUploadSimple");
488
				ExtElement uploadS = Ext.get("lienUploadSimple");
489
				uploadS.removeAllListeners();
489
				uploadS.removeAllListeners();
490
				uploadS.addListener("click", new EventCallback() {
490
				uploadS.addListener("click", new EventCallback() {
491
					public void execute(EventObject e) {
491
					public void execute(EventObject e) {
492
						getIMediateur().uploaderImages(false);
492
						getIMediateur().uploaderImages(false);
493
					}
493
					}
494
					
494
					
495
				}) ;
495
				}) ;
496
			
496
			
497
				ExtElement uploadM = Ext.get("lienUploadMultiple");
497
				ExtElement uploadM = Ext.get("lienUploadMultiple");
498
				uploadM.removeAllListeners();
498
				uploadM.removeAllListeners();
499
				uploadM.addListener("click", new EventCallback() {
499
				uploadM.addListener("click", new EventCallback() {
500
					public void execute(EventObject e) {
500
					public void execute(EventObject e) {
501
						getIMediateur().uploaderImages(true);
501
						getIMediateur().uploaderImages(true);
502
					}
502
					}
503
				});
503
				});
504
			}
504
			}
505
 
505
 
506
		});
506
		});
507
	}
507
	}
508
	
508
	
509
	private String getNomsObservationsFormatees(String nomObs) {
509
	private String getNomsObservationsFormatees(String nomObs) {
510
		
510
		
511
		String htmlInfobulle = "";
511
		String htmlInfobulle = "";
512
		
512
		
513
		String[][] obs = getObservationsAssociees(nomObs);
513
		String[][] obs = getObservationsAssociees(nomObs);
514
		
514
		
515
		for(int i = 0; i < obs.length; i++) {
515
		for(int i = 0; i < obs.length; i++) {
516
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
516
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
517
				htmlInfobulle += ", "+obs[i][1];
517
				htmlInfobulle += ", "+obs[i][1];
518
			}
518
			}
519
		}
519
		}
520
		
520
		
521
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
521
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
522
		
522
		
523
		return htmlInfobulle;
523
		return htmlInfobulle;
524
	}
524
	}
525
	
525
	
526
	private String[][] getObservationsAssociees(String nomObs) {
526
	private String[][] getObservationsAssociees(String nomObs) {
527
		
527
		
528
		if(nomObs.trim().equals("")) {
528
		if(nomObs.trim().equals("")) {
529
			return new String[0][0];
529
			return new String[0][0];
530
		}
530
		}
531
		
531
		
532
		String[] obsTab = nomObs.split(";;");
532
		String[] obsTab = nomObs.split(";;");
533
		String[][] obsAnalysees = new String[obsTab.length][3];
533
		String[][] obsAnalysees = new String[obsTab.length][3];
534
		
534
		
535
		for(int i = 0; i < obsTab.length; i++) {
535
		for(int i = 0; i < obsTab.length; i++) {
536
			
536
			
537
			obsAnalysees[i] = obsTab[i].split("#");
537
			obsAnalysees[i] = obsTab[i].split("#");
538
			
538
			
539
		}
539
		}
540
		
540
		
541
		return obsAnalysees;
541
		return obsAnalysees;
542
	}
542
	}
543
	
543
	
544
	private boolean[] estAssocieeTransmise(String nomObs) {
544
	private boolean[] estAssocieeTransmise(String nomObs) {
545
		
545
		
546
		String[][] obs = getObservationsAssociees(nomObs);
546
		String[][] obs = getObservationsAssociees(nomObs);
547
		boolean[] associeesTranmises = {false, false};
547
		boolean[] associeesTranmises = {false, false};
548
		
548
		
549
		if(obs.length > 0) {
549
		if(obs.length > 0) {
550
			associeesTranmises[0] = true;
550
			associeesTranmises[0] = true;
551
		}
551
		}
552
		
552
		
553
		for(int i = 0; i < obs.length; i++) {
553
		for(int i = 0; i < obs.length; i++) {
554
			
554
			
555
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
555
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
556
				associeesTranmises[1] = true;
556
				associeesTranmises[1] = true;
557
			}
557
			}
558
		}
558
		}
559
		
559
		
560
		return associeesTranmises;
560
		return associeesTranmises;
561
	}
561
	}
562
}
562
}