Subversion Repositories eFlore/Applications.cel

Rev

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

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