Subversion Repositories eFlore/Applications.cel

Rev

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

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