Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 722 Rev 1292
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.image.ImageMediateur;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
6
 
7
import com.google.gwt.event.dom.client.ClickEvent;
7
import com.google.gwt.event.dom.client.ClickEvent;
8
import com.google.gwt.event.dom.client.ClickHandler;
8
import com.google.gwt.event.dom.client.ClickHandler;
9
import com.google.gwt.event.dom.client.LoadEvent;
9
import com.google.gwt.event.dom.client.LoadEvent;
10
import com.google.gwt.event.dom.client.LoadHandler;
10
import com.google.gwt.event.dom.client.LoadHandler;
11
import com.google.gwt.event.dom.client.MouseWheelEvent;
11
import com.google.gwt.event.dom.client.MouseWheelEvent;
12
import com.google.gwt.event.dom.client.MouseWheelHandler;
12
import com.google.gwt.event.dom.client.MouseWheelHandler;
13
import com.google.gwt.user.client.Timer;
13
import com.google.gwt.user.client.Timer;
14
import com.google.gwt.user.client.ui.Image;
14
import com.google.gwt.user.client.ui.Image;
15
import com.gwtext.client.core.EventObject;
15
import com.gwtext.client.core.EventObject;
16
import com.gwtext.client.core.Ext;
16
import com.gwtext.client.core.Ext;
17
import com.gwtext.client.core.ExtElement;
17
import com.gwtext.client.core.ExtElement;
18
 
18
 
19
import com.gwtext.client.core.RegionPosition;
19
import com.gwtext.client.core.RegionPosition;
20
import com.gwtext.client.dd.DragData;
20
import com.gwtext.client.dd.DragData;
21
import com.gwtext.client.dd.DragSource;
21
import com.gwtext.client.dd.DragSource;
22
import com.gwtext.client.dd.DropTarget;
22
import com.gwtext.client.dd.DropTarget;
23
import com.gwtext.client.dd.DropTargetConfig;
23
import com.gwtext.client.dd.DropTargetConfig;
24
import com.gwtext.client.widgets.Container;
24
import com.gwtext.client.widgets.Container;
25
import com.gwtext.client.widgets.Panel;
25
import com.gwtext.client.widgets.Panel;
26
import com.gwtext.client.widgets.ToolTip;
26
import com.gwtext.client.widgets.ToolTip;
27
import com.gwtext.client.widgets.Toolbar;
27
import com.gwtext.client.widgets.Toolbar;
28
import com.gwtext.client.widgets.ToolbarButton;
28
import com.gwtext.client.widgets.ToolbarButton;
29
import com.gwtext.client.widgets.ToolbarTextItem;
29
import com.gwtext.client.widgets.ToolbarTextItem;
30
import com.gwtext.client.widgets.event.PanelListenerAdapter;
30
import com.gwtext.client.widgets.event.PanelListenerAdapter;
31
import com.gwtext.client.widgets.grid.GridDragData;
31
import com.gwtext.client.widgets.grid.GridDragData;
32
import com.gwtext.client.widgets.layout.BorderLayout;
32
import com.gwtext.client.widgets.layout.BorderLayout;
33
import com.gwtext.client.widgets.layout.BorderLayoutData;
33
import com.gwtext.client.widgets.layout.BorderLayoutData;
34
 
34
 
35
/**
35
/**
36
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
36
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
37
 * 
37
 * 
38
 * @author aurelien
38
 * @author aurelien
39
 * 
39
 * 
40
 */
40
 */
41
public class ZoomImageVue extends Panel implements Rafraichissable {
41
public class ZoomImageVue extends Panel implements Rafraichissable {
42
 
42
 
43
	/**
43
	/**
44
	 * Le médiateur associé à la vue
44
	 * Le médiateur associé à la vue
45
	 */
45
	 */
46
	private ImageMediateur iMediateur = null;
46
	private ImageMediateur iMediateur = null;
47
 
47
 
48
	/**
48
	/**
49
	 * Panneau conteneur pour l'image
49
	 * Panneau conteneur pour l'image
50
	 */
50
	 */
51
	private Panel imageConteneur = null;
51
	private Panel imageConteneur = null;
52
	/**
52
	/**
53
	 * l'image à afficher
53
	 * l'image à afficher
54
	 */
54
	 */
55
	private Image image = new Image("vide.jpg");
55
	private Image image = new Image("vide.jpg");
56
	/**
56
	/**
57
	 * Bouton précédent
57
	 * Bouton précédent
58
	 */
58
	 */
59
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
59
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
60
	/**
60
	/**
61
	 * Bouton suivant
61
	 * Bouton suivant
62
	 */
62
	 */
63
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
63
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
64
 
64
 
65
	/**
65
	/**
66
	 * Taille originale Y de l'image
66
	 * Taille originale Y de l'image
67
	 */
67
	 */
68
	private int imageHeight = 0;
68
	private int imageHeight = 0;
69
 
69
 
70
	/**
70
	/**
71
	 * Taille originale X de l'image
71
	 * Taille originale X de l'image
72
	 */
72
	 */
73
	private int imageWidth = 0;
73
	private int imageWidth = 0;
74
	
74
	
75
	/**
75
	/**
76
	 * Identifiant de l'image
76
	 * Identifiant de l'image
77
	 */
77
	 */
78
	private String idImage = "0" ;
78
	private String idImage = "0" ;
79
 
79
 
80
	/**
80
	/**
81
	 * Booleen d'initalisation général
81
	 * Booleen d'initalisation général
82
	 */
82
	 */
83
	private boolean initialise = false;
83
	private boolean initialise = false;
84
	
84
	
85
	private Panel infosTaxon = new Panel();
85
	private Panel infosTaxon = new Panel();
86
 
86
 
87
	/**
87
	/**
88
	 * Booleen d'initalisation du conteneur d'image
88
	 * Booleen d'initalisation du conteneur d'image
89
	 */
89
	 */
90
	private boolean conteneurInitialise = false;
90
	private boolean conteneurInitialise = false;
91
	
91
	
92
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour revenir à la vue précédente, utilisez la roulette ou les boutons fléchés pour faire défiler les images </div>") ;
92
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour revenir à la vue précédente, utilisez la roulette ou les boutons fléchés pour faire défiler les images </div>") ;
93
	
93
	
94
	/**.
94
	/**.
95
	 * boolean de gestion du double clic
95
	 * boolean de gestion du double clic
96
	 */
96
	 */
97
	private boolean enClic = false;
97
	private boolean enClic = false;
98
	
98
	
99
	private ToolbarButton modeZoom = null;
99
	private ToolbarButton modeZoom = null;
100
	
100
	
101
	private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1");
101
	private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1");
102
 
102
 
103
	protected boolean scroll = false;
103
	protected boolean scroll = false;
104
	
104
	
105
	/**
105
	/**
106
	 * Constructeur sans argument (privé car ne doit être utilisé)
106
	 * Constructeur sans argument (privé car ne doit être utilisé)
107
	 */
107
	 */
108
	@SuppressWarnings("unused")
108
	@SuppressWarnings("unused")
109
	private ZoomImageVue() {
109
	private ZoomImageVue() {
110
		super();
110
		super();
111
	}
111
	}
112
 
112
 
113
	/**
113
	/**
114
	 * Constructeur avec argument
114
	 * Constructeur avec argument
115
	 * 
115
	 * 
116
	 * @param im
116
	 * @param im
117
	 *            le médiateur à associer à la vue
117
	 *            le médiateur à associer à la vue
118
	 */
118
	 */
119
	public ZoomImageVue(ImageMediateur im) {
119
	public ZoomImageVue(ImageMediateur im) {
120
		super("Zoom");
120
		super("Zoom");
121
		setId("x-view-zoom-panel");
121
		setId("x-view-zoom-panel");
122
		// on associe le médiateur
122
		// on associe le médiateur
123
		iMediateur = im;
123
		iMediateur = im;
124
 
124
 
125
		prev.setStylePrimaryName("x-view-zoom-button-p");
125
		prev.setStylePrimaryName("x-view-zoom-button-p");
126
		suiv.setStylePrimaryName("x-view-zoom-button-s");
126
		suiv.setStylePrimaryName("x-view-zoom-button-s");
127
 
127
 
128
		// on crée une image qui gère le double clic et la roulette de la souris
128
		// on crée une image qui gère le double clic et la roulette de la souris
129
		image = new Image();
129
		image = new Image();
130
		
130
		
131
		this.setHeader(false);
131
		this.setHeader(false);
132
 
132
 
133
		imageConteneur = new Panel();
133
		imageConteneur = new Panel();
134
		
134
		
135
		imageConteneur.setBorder(false);
135
		imageConteneur.setBorder(false);
136
 
136
 
137
		imageConteneur.add(image);
137
		imageConteneur.add(image);
138
		imageConteneur.setId("x-view-zoom-img");
138
		imageConteneur.setId("x-view-zoom-img");
139
 
139
 
140
		// l'image de base est vide
140
		// l'image de base est vide
141
		image.setUrl("vide.jpg");
141
		image.setUrl("vide.jpg");
142
 
142
 
143
		this.setLayout(new BorderLayout());
143
		this.setLayout(new BorderLayout());
144
 
144
 
145
		prev.setWidth("60px");
145
		prev.setWidth("60px");
146
		suiv.setWidth("60px");
146
		suiv.setWidth("60px");
147
 
147
 
148
		
148
		
149
		modeZoom = new ToolbarButton("Mode Zoom");
149
		modeZoom = new ToolbarButton("Mode Zoom");
150
		Toolbar tb = new Toolbar();
150
		Toolbar tb = new Toolbar();
151
		tb.addButton(modeZoom);
151
		tb.addButton(modeZoom);
152
		tb.addItem(valeurZoom);
152
		tb.addItem(valeurZoom);
153
		
153
		
154
		//setTopToolbar(tb);
154
		//setTopToolbar(tb);
155
		
155
		
156
		infosTaxon = new Panel();
156
		infosTaxon = new Panel();
157
		infosTaxon.setHeader(false);
157
		infosTaxon.setHeader(false);
158
		//infosTaxon.setBorder(false);
158
		//infosTaxon.setBorder(false);
159
		infosTaxon.setHeight("30px");
159
		infosTaxon.setHeight("30px");
160
		
160
		
161
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
161
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
162
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
162
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
163
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
163
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
164
		this.add(infosTaxon, new BorderLayoutData(RegionPosition.SOUTH));
164
		this.add(infosTaxon, new BorderLayoutData(RegionPosition.SOUTH));
165
 
165
 
166
		imageConteneur.setMaskDisabled(true);
166
		imageConteneur.setMaskDisabled(true);
167
		this.setBorder(false);
167
		this.setBorder(false);
168
 
168
 
169
		conteneurInitialise = true;
169
		conteneurInitialise = true;
170
		initialise = true;
170
		initialise = true;
171
		
171
		
172
		configDragAndDrop() ;
172
		configDragAndDrop() ;
173
 
173
 
174
		// on ajoute les listeners
174
		// on ajoute les listeners
175
		ajouterListeners();
175
		ajouterListeners();
176
		
176
		
177
		tp.setDismissDelay(1050);
177
		tp.setDismissDelay(1050);
178
		tp.applyTo(image.getElement()) ;
178
		tp.applyTo(image.getElement()) ;
179
 
179
 
180
	}
180
	}
181
 
181
 
182
	/**
182
	/**
183
	 * Méthode héritée de l'interface rafraichissable
183
	 * Méthode héritée de l'interface rafraichissable
184
	 * 
184
	 * 
185
	 * @param nouvelleDonnees
185
	 * @param nouvelleDonnees
186
	 *            les nouvelles données
186
	 *            les nouvelles données
187
	 * @param repandreRafraichissement
187
	 * @param repandreRafraichissement
188
	 *            le booleen qui dit si on doit répnadre l'évènement
188
	 *            le booleen qui dit si on doit répnadre l'évènement
189
	 */
189
	 */
-
 
190
	@Override
190
	public void rafraichir(Object nouvelleDonnees,
191
	public void rafraichir(Object nouvelleDonnees,
191
			boolean repandreRafraichissement) {
192
			boolean repandreRafraichissement) {
192
 
193
 
193
		//niveauZoom = 1;
194
		//niveauZoom = 1;
194
		// si on reçoit une string
195
		// si on reçoit une string
195
		if (nouvelleDonnees instanceof String[] && initialise
196
		if (nouvelleDonnees instanceof String[] && initialise
196
				&& conteneurInitialise) {
197
				&& conteneurInitialise) {
197
						
198
						
198
			String[] infos = (String[]) nouvelleDonnees;
199
			String[] infos = (String[]) nouvelleDonnees;
199
			
200
			
200
			// c'est l'url de l'image qu'on associe à la vue
201
			// c'est l'url de l'image qu'on associe à la vue
201
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
202
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
202
				getImage().setUrl(infos[0]);
203
				getImage().setUrl(infos[0]);
203
				int x = Integer.parseInt(infos[1]);
204
				int x = Integer.parseInt(infos[1]);
204
				int y = Integer.parseInt(infos[2]);
205
				int y = Integer.parseInt(infos[2]);
205
 
206
 
206
				setTailleImage(x, y);
207
				setTailleImage(x, y);
207
				
208
				
208
				setIdImage(infos[3]) ;
209
				setIdImage(infos[3]) ;
209
				
210
				
210
				String infosTaxon = "" ;
211
				String infosTaxon = "" ;
211
				
212
				
212
				if(infos.length == 5 && infos[4] != null)  {
213
				if(infos.length == 5 && infos[4] != null)  {
213
					infosTaxon = infos[4]; 
214
					infosTaxon = infos[4]; 
214
				}
215
				}
215
				
216
				
216
				setInfosTaxon(infosTaxon);
217
				setInfosTaxon(infosTaxon);
217
				verifierEtRetaillerImage();
218
				verifierEtRetaillerImage();
218
			}
219
			}
219
		}
220
		}
220
	}
221
	}
221
 
222
 
222
	/**
223
	/**
223
	 * Desactive visuellement le panneau et les boutons
224
	 * Desactive visuellement le panneau et les boutons
224
	 */
225
	 */
225
	public void desactiverPanneau() {
226
	public void desactiverPanneau() {
226
		getImage().setUrl("vide.jpg");
227
		getImage().setUrl("vide.jpg");
227
		prev.setEnabled(false);
228
		prev.setEnabled(false);
228
		suiv.setEnabled(false);
229
		suiv.setEnabled(false);
229
	}
230
	}
230
 
231
 
231
	/**
232
	/**
232
	 * Active visuellement le panneau et les boutons
233
	 * Active visuellement le panneau et les boutons
233
	 */
234
	 */
234
	public void activerPanneau() {
235
	public void activerPanneau() {
235
		prev.setEnabled(true);
236
		prev.setEnabled(true);
236
		suiv.setEnabled(true);
237
		suiv.setEnabled(true);
237
	}
238
	}
238
	
239
	
239
	public void masquerChargement() {
240
	public void masquerChargement() {
240
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
241
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
241
		if(imgEl != null) {
242
		if(imgEl != null) {
242
			imgEl.mask("Chargement");
243
			imgEl.mask("Chargement");
243
		}
244
		}
244
	}
245
	}
245
	
246
	
246
	public void demasquerChargement() {
247
	public void demasquerChargement() {
247
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
248
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
248
		if(imgEl != null) {
249
		if(imgEl != null) {
249
			imgEl.unmask();
250
			imgEl.unmask();
250
		}
251
		}
251
	}
252
	}
252
 
253
 
253
	/**
254
	/**
254
	 * Ajoute les listeners pour la gestions d'évènement
255
	 * Ajoute les listeners pour la gestions d'évènement
255
	 */
256
	 */
256
	public void ajouterListeners() {
257
	public void ajouterListeners() {
257
				
258
				
258
		image.addClickHandler(new ClickHandler() {
259
		image.addClickHandler(new ClickHandler() {
-
 
260
			
259
			
261
			@Override
260
			public void onClick(ClickEvent event) {
262
			public void onClick(ClickEvent event) {
261
				
263
				
262
				if(!scroll) {
264
				if(!scroll) {
263
					if(enClic) {
265
					if(enClic) {
264
						getIMediateur().doubleClicZoomImage();
266
						getIMediateur().doubleClicZoomImage();
265
					} else {
267
					} else {
266
						Timer t = new Timer() {
268
						Timer t = new Timer() {
-
 
269
							@Override
267
							public void run() {
270
							public void run() {
268
								enClic = false;
271
								enClic = false;
269
							}
272
							}
270
							
273
							
271
						};
274
						};
272
						enClic = true;
275
						enClic = true;
273
						t.schedule(800);
276
						t.schedule(800);
274
					}
277
					}
275
				}
278
				}
276
			}
279
			}
277
		});
280
		});
278
		
281
		
279
		image.addLoadHandler(new LoadHandler() {
282
		image.addLoadHandler(new LoadHandler() {
-
 
283
			
280
			
284
			@Override
281
			public void onLoad(LoadEvent event) {
285
			public void onLoad(LoadEvent event) {
282
 
286
 
283
				verifierEtRetaillerImage();
287
				verifierEtRetaillerImage();
284
				Ext.get(image.getElement()).center(imageConteneur.getElement());
288
				Ext.get(image.getElement()).center(imageConteneur.getElement());
285
				demasquerChargement();
289
				demasquerChargement();
286
			}
290
			}
287
		});
291
		});
288
		
292
		
289
		image.addMouseWheelHandler(new MouseWheelHandler() {
293
		image.addMouseWheelHandler(new MouseWheelHandler() {
-
 
294
			
290
			
295
			@Override
291
			public void onMouseWheel(MouseWheelEvent event) {
296
			public void onMouseWheel(MouseWheelEvent event) {
292
				
297
				
293
				if(event.isNorth()) {
298
				if(event.isNorth()) {
294
					masquerChargement();
299
					masquerChargement();
295
					getIMediateur().clicBoutonZoomImage("suiv");
300
					getIMediateur().clicBoutonZoomImage("suiv");
296
				} else {
301
				} else {
297
					masquerChargement();
302
					masquerChargement();
298
					getIMediateur().clicBoutonZoomImage("prev");
303
					getIMediateur().clicBoutonZoomImage("prev");
299
				}			
304
				}			
300
			}
305
			}
301
		});
306
		});
302
		
307
		
303
		// gestion du clic sur le bouton précedent
308
		// gestion du clic sur le bouton précedent
304
		prev.addClickHandler(new ClickHandler() {
309
		prev.addClickHandler(new ClickHandler() {
305
 
310
 
306
			// en cas de clic
311
			// en cas de clic
-
 
312
			@Override
307
			public void onClick(ClickEvent event) {
313
			public void onClick(ClickEvent event) {
308
				// on notifie le médiateur
314
				// on notifie le médiateur
309
				masquerChargement();
315
				masquerChargement();
310
				getIMediateur().clicBoutonZoomImage("prev");
316
				getIMediateur().clicBoutonZoomImage("prev");
311
			}
317
			}
312
		});
318
		});
313
 
319
 
314
		// gestion du clic sur le bouton suivant
320
		// gestion du clic sur le bouton suivant
315
		suiv.addClickHandler(new ClickHandler() {
321
		suiv.addClickHandler(new ClickHandler() {
316
 
322
 
317
			// en cas de clic
323
			// en cas de clic
-
 
324
			@Override
318
			public void onClick(ClickEvent event) {
325
			public void onClick(ClickEvent event) {
319
				// on notifie le médiateur
326
				// on notifie le médiateur
320
				masquerChargement();
327
				masquerChargement();
321
				getIMediateur().clicBoutonZoomImage("suiv");
328
				getIMediateur().clicBoutonZoomImage("suiv");
322
			}
329
			}
323
 
330
 
324
		});
331
		});
325
 
332
 
326
		// gestion du redimensionnement
333
		// gestion du redimensionnement
327
		this.addListener(new PanelListenerAdapter() {
334
		this.addListener(new PanelListenerAdapter() {
328
 
335
 
329
			// lors d'un redimensionnement de l'application
336
			// lors d'un redimensionnement de l'application
-
 
337
 
330
 
338
			@Override
331
			public void onBodyResize(Panel panel, java.lang.String width,
339
			public void onBodyResize(Panel panel, java.lang.String width,
332
					java.lang.String height) {
340
					java.lang.String height) {
333
				// on vérifie et on retaille l'image
341
				// on vérifie et on retaille l'image
334
				verifierEtRetaillerImage();
342
				verifierEtRetaillerImage();
335
			}
343
			}
336
		});
344
		});
337
 
345
 
338
		// gestion du redimensionnement lors de l'affichage du conteneur
346
		// gestion du redimensionnement lors de l'affichage du conteneur
339
		imageConteneur.addListener(new PanelListenerAdapter() {
347
		imageConteneur.addListener(new PanelListenerAdapter() {
340
 
348
 
341
			// avant de finir d'afficher
349
			// avant de finir d'afficher
-
 
350
 
342
 
351
			@Override
343
			public void onAfterLayout(Container self) {
352
			public void onAfterLayout(Container self) {
344
				// on redimensionne
353
				// on redimensionne
345
				verifierEtRetaillerImage();
354
				verifierEtRetaillerImage();
346
			}
355
			}
347
		});
356
		});
348
	}
357
	}
349
 
358
 
350
	/**
359
	/**
351
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
360
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
352
	 * echeant
361
	 * echeant
353
	 */
362
	 */
354
	public void verifierEtRetaillerImage() {
363
	public void verifierEtRetaillerImage() {
355
		
364
		
356
		// si l'image est nulle
365
		// si l'image est nulle
357
		if (image == null) {
366
		if (image == null) {
358
			// on ne fait rien
367
			// on ne fait rien
359
			return;
368
			return;
360
		}
369
		}
361
		
370
		
362
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
371
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
363
		int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
372
		int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
364
		
373
		
365
		int[] tailleImage = new int[2];
374
		int[] tailleImage = new int[2];
366
		
375
		
367
		if(Ext.isIE()) {
376
		if(Ext.isIE()) {
368
			image.setHeight(calculerDimensions(getTailleImage(),max,max)[1]+"px");
377
			image.setHeight(calculerDimensions(getTailleImage(),max,max)[1]+"px");
369
			image.setWidth(calculerDimensions(getTailleImage(),max,max)[0]+"px");
378
			image.setWidth(calculerDimensions(getTailleImage(),max,max)[0]+"px");
370
		} else {
379
		} else {
371
		
380
		
372
			if(max == imageConteneur.getHeight()) {
381
			if(max == imageConteneur.getHeight()) {
373
				tailleImage[0] = getTailleImage()[0];
382
				tailleImage[0] = getTailleImage()[0];
374
				tailleImage[1] = max;			
383
				tailleImage[1] = max;			
375
				image.setHeight(max+"px");
384
				image.setHeight(max+"px");
376
	
385
	
377
			} else {
386
			} else {
378
				tailleImage[1] = getTailleImage()[0];
387
				tailleImage[1] = getTailleImage()[0];
379
				tailleImage[0] = max;
388
				tailleImage[0] = max;
380
				image.setWidth(max+"px");
389
				image.setWidth(max+"px");
381
			}
390
			}
382
		}
391
		}
383
	}
392
	}
384
	
393
	
385
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
394
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
386
	    
395
	    
387
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
396
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
388
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
397
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
389
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
398
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
390
        float[] XYresize = new float[2];
399
        float[] XYresize = new float[2];
391
        
400
        
392
        if(maxTaille == tailleXY[0]) {
401
        if(maxTaille == tailleXY[0]) {
393
            float rapport = tailleXYf[1]/tailleXYf[0] ;
402
            float rapport = tailleXYf[1]/tailleXYf[0] ;
394
            XYresize[0] = tailleOr ;
403
            XYresize[0] = tailleOr ;
395
            XYresize[1] = tailleOr*rapport ;
404
            XYresize[1] = tailleOr*rapport ;
396
        }else {
405
        }else {
397
            float rapport = tailleXYf[0]/tailleXYf[1] ;
406
            float rapport = tailleXYf[0]/tailleXYf[1] ;
398
            XYresize[1] = tailleOr ;
407
            XYresize[1] = tailleOr ;
399
            XYresize[0] = tailleOr*rapport ;
408
            XYresize[0] = tailleOr*rapport ;
400
        }
409
        }
401
        
410
        
402
        int[] res = {(int)Math.round(XYresize[0]),(int) Math.round(XYresize[1])} ;
411
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
403
        
412
        
404
        return res;
413
        return res;
405
    }
414
    }
406
	
415
	
407
	public void configDragAndDrop()
416
	public void configDragAndDrop()
408
	{
417
	{
409
 
418
 
410
		// on fabrique la nouvelle configuration
419
		// on fabrique la nouvelle configuration
411
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
420
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
412
		DropTargetConfig dtc = new DropTargetConfig();
421
		DropTargetConfig dtc = new DropTargetConfig();
413
		dtc.setdDdGroup("DragGroupName");
422
		dtc.setdDdGroup("DragGroupName");
414
 
423
 
415
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
424
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
416
		@SuppressWarnings("unused")
425
		@SuppressWarnings("unused")
417
		DropTarget tg = new DropTarget(this, dtc)
426
		DropTarget tg = new DropTarget(this, dtc)
418
		{
427
		{
-
 
428
			@Override
419
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
429
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
420
				
430
				
421
				// si on reçoit des données provenant d'une grille
431
				// si on reçoit des données provenant d'une grille
422
				if(data instanceof GridDragData)
432
				if(data instanceof GridDragData)
423
		    	  {
433
		    	  {
424
		    		  		// on appelle le médiateur
434
		    		  		// on appelle le médiateur
425
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
435
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
426
		    	  }
436
		    	  }
427
				return false ;
437
				return false ;
428
			}
438
			}
-
 
439
			
429
			
440
			@Override
430
			public String notifyOver(DragSource source, EventObject e, DragData data){
441
			public String notifyOver(DragSource source, EventObject e, DragData data){
431
			    return "x-dd-drop-ok";
442
			    return "x-dd-drop-ok";
432
			}
443
			}
433
		};
444
		};
434
        
445
        
435
	}
446
	}
436
 
447
 
437
	/**
448
	/**
438
	 * Accesseur pour le médiateur
449
	 * Accesseur pour le médiateur
439
	 * 
450
	 * 
440
	 * @return le médiateur associé à la vue
451
	 * @return le médiateur associé à la vue
441
	 */
452
	 */
442
	public ImageMediateur getIMediateur() {
453
	public ImageMediateur getIMediateur() {
443
		return iMediateur;
454
		return iMediateur;
444
	}
455
	}
445
 
456
 
446
	/**
457
	/**
447
	 * Accesseur au conteneur de l'image
458
	 * Accesseur au conteneur de l'image
448
	 * 
459
	 * 
449
	 * @return le conteneur de l'image
460
	 * @return le conteneur de l'image
450
	 */
461
	 */
451
	public Image getImage() {
462
	public Image getImage() {
452
		return image;
463
		return image;
453
	}
464
	}
454
	
465
	
455
	/**
466
	/**
456
	 * Acesseurs pour l'identifiant de l'image
467
	 * Acesseurs pour l'identifiant de l'image
457
	 * @return l'id de l'image
468
	 * @return l'id de l'image
458
	 */
469
	 */
459
	public String getIdImage()
470
	public String getIdImage()
460
	{
471
	{
461
		return idImage ;
472
		return idImage ;
462
	}
473
	}
463
 
474
 
464
	/**
475
	/**
465
	 * Accesseur pour le bouton précédent
476
	 * Accesseur pour le bouton précédent
466
	 * 
477
	 * 
467
	 * @return le bouton précédent
478
	 * @return le bouton précédent
468
	 */
479
	 */
469
	public com.google.gwt.user.client.ui.Button getPrev() {
480
	public com.google.gwt.user.client.ui.Button getPrev() {
470
		return prev;
481
		return prev;
471
	}
482
	}
472
 
483
 
473
	/**
484
	/**
474
	 * Accesseur pour le bouton suivant
485
	 * Accesseur pour le bouton suivant
475
	 * 
486
	 * 
476
	 * @return le bouton suivant
487
	 * @return le bouton suivant
477
	 */
488
	 */
478
	public com.google.gwt.user.client.ui.Button getSuiv() {
489
	public com.google.gwt.user.client.ui.Button getSuiv() {
479
		return suiv;
490
		return suiv;
480
	}
491
	}
481
 
492
 
482
	/**
493
	/**
483
	 * Setter pour la taille de l'image
494
	 * Setter pour la taille de l'image
484
	 * 
495
	 * 
485
	 * @param x
496
	 * @param x
486
	 *            la largeur en pixels
497
	 *            la largeur en pixels
487
	 * @param y
498
	 * @param y
488
	 *            la hauteur en pixels
499
	 *            la hauteur en pixels
489
	 */
500
	 */
490
	public void setTailleImage(int x, int y) {
501
	public void setTailleImage(int x, int y) {
491
		imageHeight = y;
502
		imageHeight = y;
492
		imageWidth = x;
503
		imageWidth = x;
493
	}
504
	}
494
	
505
	
495
	/**
506
	/**
496
	 * Setteur pour l'identifiant de l'image
507
	 * Setteur pour l'identifiant de l'image
497
	 * @param id le nouvel identifiant
508
	 * @param id le nouvel identifiant
498
	 */
509
	 */
499
	public void setIdImage(String id)
510
	public void setIdImage(String id)
500
	{
511
	{
501
		idImage = id ;
512
		idImage = id ;
502
	}
513
	}
503
	
514
	
504
	public void setInfosTaxon(String nomTaxon) {
515
	public void setInfosTaxon(String nomTaxon) {
505
	
516
	
506
		if(nomTaxon != null && !nomTaxon.equals("")) {
517
		if(nomTaxon != null && !nomTaxon.equals("")) {
507
			nomTaxon = getNomsObservationsFormatees(nomTaxon);
518
			nomTaxon = getNomsObservationsFormatees(nomTaxon);
508
		}
519
		}
509
		
520
		
510
		infosTaxon.setHtml("<div id='infos_taxon'><span class='texte_info_taxon'>"+nomTaxon+"</span></div>");
521
		infosTaxon.setHtml("<div id='infos_taxon'><span class='texte_info_taxon'>"+nomTaxon+"</span></div>");
511
		infosTaxon.doLayout();
522
		infosTaxon.doLayout();
512
	}
523
	}
513
 
524
 
514
	/**
525
	/**
515
	 * renvoie la taille originale de l'image
526
	 * renvoie la taille originale de l'image
516
	 * 
527
	 * 
517
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
528
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
518
	 */
529
	 */
519
	public int[] getTailleImage() {
530
	public int[] getTailleImage() {
520
		int[] taille = { imageHeight, imageWidth };
531
		int[] taille = { imageHeight, imageWidth };
521
 
532
 
522
		return taille;
533
		return taille;
523
	}
534
	}
524
	
535
	
525
	public boolean estPortrait() {
536
	public boolean estPortrait() {
526
		return imageHeight > imageWidth;
537
		return imageHeight > imageWidth;
527
	}
538
	}
528
	
539
	
529
	public boolean estPaysage() {
540
	public boolean estPaysage() {
530
		return !estPortrait();
541
		return !estPortrait();
531
	}
542
	}
532
	
543
	
533
	/**
544
	/**
534
	 * Accesseur pour le conteneur de l'image
545
	 * Accesseur pour le conteneur de l'image
535
	 * @return le conteur de l'image
546
	 * @return le conteur de l'image
536
	 */
547
	 */
537
	public Panel getImageConteneur() {
548
	public Panel getImageConteneur() {
538
 
549
 
539
		return imageConteneur;
550
		return imageConteneur;
540
 
551
 
541
	}
552
	}
542
	
553
	
543
	private String getNomsObservationsFormatees(String nomObs) {
554
	private String getNomsObservationsFormatees(String nomObs) {
544
		
555
		
545
		String htmlInfobulle = "";
556
		String htmlInfobulle = "";
546
		
557
		
547
		String[][] obs = getObservationsAssociees(nomObs);
558
		String[][] obs = getObservationsAssociees(nomObs);
548
		
559
		
549
		for(int i = 0; i < obs.length; i++) {
560
		for(int i = 0; i < obs.length; i++) {
550
						
561
						
551
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
562
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
552
				htmlInfobulle += ", "+obs[i][1];
563
				htmlInfobulle += ", "+obs[i][1];
553
			}
564
			}
554
		}
565
		}
555
		
566
		
556
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
567
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
557
		
568
		
558
		return htmlInfobulle;
569
		return htmlInfobulle;
559
	}
570
	}
560
	
571
	
561
	private String[][] getObservationsAssociees(String nomObs) {
572
	private String[][] getObservationsAssociees(String nomObs) {
562
		
573
		
563
		if(nomObs.trim().equals("")) {
574
		if(nomObs.trim().equals("")) {
564
			return new String[0][0];
575
			return new String[0][0];
565
		}
576
		}
566
		
577
		
567
		String[] obsTab = nomObs.split(";;");
578
		String[] obsTab = nomObs.split(";;");
568
		String[][] obsAnalysees = new String[obsTab.length][3];
579
		String[][] obsAnalysees = new String[obsTab.length][3];
569
		
580
		
570
		for(int i = 0; i < obsTab.length; i++) {
581
		for(int i = 0; i < obsTab.length; i++) {
571
			
582
			
572
			obsAnalysees[i] = obsTab[i].split("#");
583
			obsAnalysees[i] = obsTab[i].split("#");
573
			
584
			
574
		}
585
		}
575
		
586
		
576
		return obsAnalysees;
587
		return obsAnalysees;
577
	}
588
	}
578
	
589
	
579
	private boolean[] estAssocieeTransmise(String nomObs) {
590
	private boolean[] estAssocieeTransmise(String nomObs) {
580
		
591
		
581
		String[][] obs = getObservationsAssociees(nomObs);
592
		String[][] obs = getObservationsAssociees(nomObs);
582
		boolean[] associeesTranmises = {false, false};
593
		boolean[] associeesTranmises = {false, false};
583
		
594
		
584
		if(obs.length > 0) {
595
		if(obs.length > 0) {
585
			associeesTranmises[0] = true;
596
			associeesTranmises[0] = true;
586
		}
597
		}
587
		
598
		
588
		for(int i = 0; i < obs.length; i++) {
599
		for(int i = 0; i < obs.length; i++) {
589
			
600
			
590
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
601
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
591
				associeesTranmises[1] = true;
602
				associeesTranmises[1] = true;
592
			}
603
			}
593
		}
604
		}
594
		
605
		
595
		return associeesTranmises;
606
		return associeesTranmises;
596
	}
607
	}
597
}
608
}