Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 324 Rev 408
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;
-
 
8
import com.google.gwt.core.client.JavaScriptObject;
-
 
9
import com.google.gwt.event.dom.client.ClickEvent;
-
 
10
import com.google.gwt.event.dom.client.ClickHandler;
-
 
11
import com.google.gwt.event.dom.client.LoadEvent;
-
 
12
import com.google.gwt.event.dom.client.LoadHandler;
-
 
13
import com.google.gwt.event.dom.client.MouseWheelEvent;
7
import com.google.gwt.core.client.JavaScriptObject;
14
import com.google.gwt.event.dom.client.MouseWheelHandler;
8
import com.google.gwt.user.client.Event;
15
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.Timer;
16
import com.google.gwt.user.client.Timer;
10
import com.google.gwt.user.client.Window;
17
import com.google.gwt.user.client.Window;
11
import com.google.gwt.user.client.ui.ClickListener;
18
import com.google.gwt.user.client.ui.ClickListener;
12
import com.google.gwt.user.client.ui.Image;
19
import com.google.gwt.user.client.ui.Image;
13
import com.google.gwt.user.client.ui.KeyboardListener;
20
import com.google.gwt.user.client.ui.KeyboardListener;
14
import com.google.gwt.user.client.ui.KeyboardListenerCollection;
21
import com.google.gwt.user.client.ui.KeyboardListenerCollection;
15
import com.google.gwt.user.client.ui.LoadListener;
22
import com.google.gwt.user.client.ui.LoadListener;
16
import com.google.gwt.user.client.ui.MouseListener;
23
import com.google.gwt.user.client.ui.MouseListener;
17
import com.google.gwt.user.client.ui.MouseWheelListener;
24
import com.google.gwt.user.client.ui.MouseWheelListener;
18
import com.google.gwt.user.client.ui.MouseWheelVelocity;
25
import com.google.gwt.user.client.ui.MouseWheelVelocity;
19
import com.google.gwt.user.client.ui.ToggleButton;
26
import com.google.gwt.user.client.ui.ToggleButton;
20
import com.google.gwt.user.client.ui.Widget;
27
import com.google.gwt.user.client.ui.Widget;
21
import com.gwtext.client.core.AnimationConfig;
28
import com.gwtext.client.core.AnimationConfig;
22
import com.gwtext.client.core.Direction;
29
import com.gwtext.client.core.Direction;
23
import com.gwtext.client.core.DomConfig;
30
import com.gwtext.client.core.DomConfig;
24
import com.gwtext.client.core.EventObject;
31
import com.gwtext.client.core.EventObject;
25
import com.gwtext.client.core.Ext;
32
import com.gwtext.client.core.Ext;
26
import com.gwtext.client.core.ExtElement;
33
import com.gwtext.client.core.ExtElement;
27
import com.gwtext.client.core.Function;
34
import com.gwtext.client.core.Function;
28
 
35
 
29
import com.gwtext.client.core.RegionPosition;
36
import com.gwtext.client.core.RegionPosition;
30
import com.gwtext.client.dd.DragData;
37
import com.gwtext.client.dd.DragData;
31
import com.gwtext.client.dd.DragSource;
38
import com.gwtext.client.dd.DragSource;
32
import com.gwtext.client.dd.DropTarget;
39
import com.gwtext.client.dd.DropTarget;
33
import com.gwtext.client.dd.DropTargetConfig;
40
import com.gwtext.client.dd.DropTargetConfig;
34
import com.gwtext.client.widgets.Button;
41
import com.gwtext.client.widgets.Button;
35
import com.gwtext.client.widgets.Component;
42
import com.gwtext.client.widgets.Component;
36
import com.gwtext.client.widgets.Container;
43
import com.gwtext.client.widgets.Container;
37
import com.gwtext.client.widgets.Panel;
44
import com.gwtext.client.widgets.Panel;
38
import com.gwtext.client.widgets.ToolTip;
45
import com.gwtext.client.widgets.ToolTip;
39
import com.gwtext.client.widgets.Toolbar;
46
import com.gwtext.client.widgets.Toolbar;
40
import com.gwtext.client.widgets.ToolbarButton;
47
import com.gwtext.client.widgets.ToolbarButton;
41
import com.gwtext.client.widgets.ToolbarTextItem;
48
import com.gwtext.client.widgets.ToolbarTextItem;
42
import com.gwtext.client.widgets.event.ButtonListener;
49
import com.gwtext.client.widgets.event.ButtonListener;
43
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
50
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
44
import com.gwtext.client.widgets.event.PanelListenerAdapter;
51
import com.gwtext.client.widgets.event.PanelListenerAdapter;
45
import com.gwtext.client.widgets.grid.GridDragData;
52
import com.gwtext.client.widgets.grid.GridDragData;
46
import com.gwtext.client.widgets.layout.BorderLayout;
53
import com.gwtext.client.widgets.layout.BorderLayout;
47
import com.gwtext.client.widgets.layout.BorderLayoutData;
54
import com.gwtext.client.widgets.layout.BorderLayoutData;
48
import com.gwtext.client.widgets.menu.Menu;
55
import com.gwtext.client.widgets.menu.Menu;
49
 
56
 
50
/**
57
/**
51
 * 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
52
 * 
59
 * 
53
 * @author aurelien
60
 * @author aurelien
54
 * 
61
 * 
55
 */
62
 */
56
public class ZoomImageVue extends Panel implements Rafraichissable {
63
public class ZoomImageVue extends Panel implements Rafraichissable {
57
 
64
 
58
	/**
65
	/**
59
	 * Le médiateur associé à la vue
66
	 * Le médiateur associé à la vue
60
	 */
67
	 */
61
	private ImageMediateur iMediateur = null;
68
	private ImageMediateur iMediateur = null;
62
 
69
 
63
	/**
70
	/**
64
	 * Panneau conteneur pour l'image
71
	 * Panneau conteneur pour l'image
65
	 */
72
	 */
66
	private Panel imageConteneur = null;
73
	private Panel imageConteneur = null;
67
	/**
74
	/**
68
	 * l'image à afficher
75
	 * l'image à afficher
69
	 */
76
	 */
70
	private Image image = new Image("vide.jpg");
77
	private Image image = new Image("vide.jpg");
71
	/**
78
	/**
72
	 * Bouton précédent
79
	 * Bouton précédent
73
	 */
80
	 */
74
	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();
75
	/**
82
	/**
76
	 * Bouton suivant
83
	 * Bouton suivant
77
	 */
84
	 */
78
	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();
79
 
86
 
80
	/**
87
	/**
81
	 * Taille originale Y de l'image
88
	 * Taille originale Y de l'image
82
	 */
89
	 */
83
	private int imageHeight = 0;
90
	private int imageHeight = 0;
84
 
91
 
85
	/**
92
	/**
86
	 * Taille originale X de l'image
93
	 * Taille originale X de l'image
87
	 */
94
	 */
88
	private int imageWidth = 0;
95
	private int imageWidth = 0;
89
	
96
	
90
	/**
97
	/**
91
	 * Identifiant de l'image
98
	 * Identifiant de l'image
92
	 */
99
	 */
93
	private String idImage = "0" ;
100
	private String idImage = "0" ;
94
 
101
 
95
	/**
102
	/**
96
	 * Booleen d'initalisation général
103
	 * Booleen d'initalisation général
97
	 */
104
	 */
98
	private boolean initialise = false;
105
	private boolean initialise = false;
-
 
106
	
-
 
107
	private Panel infosTaxon = new Panel();
99
 
108
 
100
	/**
109
	/**
101
	 * Booleen d'initalisation du conteneur d'image
110
	 * Booleen d'initalisation du conteneur d'image
102
	 */
111
	 */
103
	private boolean conteneurInitialise = false;
112
	private boolean conteneurInitialise = false;
104
	
113
	
105
	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>") ;
106
 
-
 
107
	/**
-
 
108
	 * true pour animer les transitions des animations
-
 
109
	 */
-
 
110
	private boolean animerTransition = false;
-
 
111
	
-
 
112
	/**
-
 
113
	 * duree des animation
-
 
114
	 */
-
 
115
	private float dureeAnimation = (float) 0.15 ;
-
 
116
	
115
	
117
	/**.
116
	/**.
118
	 * boolean de gestion du double clic
117
	 * boolean de gestion du double clic
119
	 */
118
	 */
120
	private boolean enClic = false;
119
	private boolean enClic = false;
121
	
120
	
122
	private ToolbarButton modeZoom = null;
121
	private ToolbarButton modeZoom = null;
123
	
122
	
124
	private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1");
123
	private ToolbarTextItem valeurZoom = new ToolbarTextItem("x 1");
125
	
-
 
126
	private int sourisX = 0;
-
 
127
	
-
 
128
	private int sourisY = 0;
-
 
129
	
-
 
130
	private int sourisXFin = 0;
-
 
131
	
-
 
132
	private int sourisYFin = 0;
-
 
133
	
-
 
134
	private float niveauZoom = 1;
-
 
135
	
-
 
136
	private float pasZoom = new Float(0.1);
-
 
137
 
-
 
138
	private int maxZoom = 10;
-
 
139
	
-
 
140
	private float minZoom = new Float(0.5);
-
 
141
 
124
 
142
	protected boolean scroll = false;
125
	protected boolean scroll = false;
143
	
126
	
144
	/**
127
	/**
145
	 * Constructeur sans argument (privé car ne doit être utilisé)
128
	 * Constructeur sans argument (privé car ne doit être utilisé)
146
	 */
129
	 */
147
	@SuppressWarnings("unused")
130
	@SuppressWarnings("unused")
148
	private ZoomImageVue() {
131
	private ZoomImageVue() {
149
		super();
132
		super();
150
	}
133
	}
151
 
134
 
152
	/**
135
	/**
153
	 * Constructeur avec argument
136
	 * Constructeur avec argument
154
	 * 
137
	 * 
155
	 * @param im
138
	 * @param im
156
	 *            le médiateur à associer à la vue
139
	 *            le médiateur à associer à la vue
157
	 */
140
	 */
158
	public ZoomImageVue(ImageMediateur im) {
141
	public ZoomImageVue(ImageMediateur im) {
159
		super("Zoom");
142
		super("Zoom");
160
		setId("x-view-zoom-panel");
143
		setId("x-view-zoom-panel");
161
		// on associe le médiateur
144
		// on associe le médiateur
162
		iMediateur = im;
145
		iMediateur = im;
163
 
146
 
164
		prev.setStylePrimaryName("x-view-zoom-button-p");
147
		prev.setStylePrimaryName("x-view-zoom-button-p");
165
		suiv.setStylePrimaryName("x-view-zoom-button-s");
148
		suiv.setStylePrimaryName("x-view-zoom-button-s");
166
 
149
 
167
		// 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
168
		image = new Image();
151
		image = new Image();
169
		
152
		
170
		this.setHeader(false);
153
		this.setHeader(false);
171
 
154
 
172
		imageConteneur = new Panel();
155
		imageConteneur = new Panel();
173
		
156
		
174
		imageConteneur.setBorder(false);
157
		imageConteneur.setBorder(false);
175
 
158
 
176
		imageConteneur.add(image);
159
		imageConteneur.add(image);
177
		imageConteneur.setId("x-view-zoom-img");
160
		imageConteneur.setId("x-view-zoom-img");
178
 
161
 
179
		// 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
180
		// clic sur une image
163
		// clic sur une image
181
		// 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
182
		//imageConteneur.sinkEvents(Event.ONMOUSEWHEEL);
165
		//imageConteneur.sinkEvents(Event.ONMOUSEWHEEL);
183
 
166
 
184
		// l'image de base est vide
167
		// l'image de base est vide
185
		image.setUrl("vide.jpg");
168
		image.setUrl("vide.jpg");
186
 
169
 
187
		this.setLayout(new BorderLayout());
170
		this.setLayout(new BorderLayout());
188
 
171
 
189
		prev.setWidth("60px");
172
		prev.setWidth("60px");
190
		suiv.setWidth("60px");
173
		suiv.setWidth("60px");
191
 
174
 
192
		
175
		
193
		modeZoom = new ToolbarButton("Mode Zoom");
176
		modeZoom = new ToolbarButton("Mode Zoom");
194
		Toolbar tb = new Toolbar();
177
		Toolbar tb = new Toolbar();
195
		tb.addButton(modeZoom);
178
		tb.addButton(modeZoom);
196
		tb.addItem(valeurZoom);
179
		tb.addItem(valeurZoom);
197
		
180
		
198
		//setTopToolbar(tb);
181
		//setTopToolbar(tb);
-
 
182
		
-
 
183
		infosTaxon = new Panel();
-
 
184
		infosTaxon.setHeader(false);
-
 
185
		//infosTaxon.setBorder(false);
-
 
186
		infosTaxon.setHeight("30px");
199
		
187
		
200
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
188
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
201
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
189
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
202
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
190
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
-
 
191
		this.add(infosTaxon, new BorderLayoutData(RegionPosition.SOUTH));
203
 
192
 
204
		imageConteneur.setMaskDisabled(true);
193
		imageConteneur.setMaskDisabled(true);
205
		this.setBorder(false);
194
		this.setBorder(false);
206
 
195
 
207
		conteneurInitialise = true;
196
		conteneurInitialise = true;
208
		initialise = true;
197
		initialise = true;
209
		
198
		
210
		configDragAndDrop() ;
199
		configDragAndDrop() ;
211
 
200
 
212
		// on ajoute les listeners
201
		// on ajoute les listeners
213
		ajouterListeners();
202
		ajouterListeners();
214
		
203
		
215
		tp.setDismissDelay(1050);
204
		tp.setDismissDelay(1050);
216
		tp.applyTo(image.getElement()) ;
205
		tp.applyTo(image.getElement()) ;
217
 
206
 
218
	}
207
	}
219
 
208
 
220
	/**
209
	/**
221
	 * Méthode héritée de l'interface rafraichissable
210
	 * Méthode héritée de l'interface rafraichissable
222
	 * 
211
	 * 
223
	 * @param nouvelleDonnees
212
	 * @param nouvelleDonnees
224
	 *            les nouvelles données
213
	 *            les nouvelles données
225
	 * @param repandreRafraichissement
214
	 * @param repandreRafraichissement
226
	 *            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
227
	 */
216
	 */
228
	public void rafraichir(Object nouvelleDonnees,
217
	public void rafraichir(Object nouvelleDonnees,
229
			boolean repandreRafraichissement) {
218
			boolean repandreRafraichissement) {
230
 
219
 
231
		//niveauZoom = 1;
220
		//niveauZoom = 1;
232
		// si on reçoit une string
221
		// si on reçoit une string
233
		if (nouvelleDonnees instanceof String[] && initialise
222
		if (nouvelleDonnees instanceof String[] && initialise
234
				&& conteneurInitialise) {
223
				&& conteneurInitialise) {
-
 
224
			
235
			String[] infos = (String[]) nouvelleDonnees;
225
			String[] infos = (String[]) nouvelleDonnees;
-
 
226
			
236
			// 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
237
			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) {
238
				getImage().setUrl(infos[0]);
229
				getImage().setUrl(infos[0]);
239
				int x = Integer.parseInt(infos[1]);
230
				int x = Integer.parseInt(infos[1]);
240
				int y = Integer.parseInt(infos[2]);
231
				int y = Integer.parseInt(infos[2]);
241
 
232
 
242
				setTailleImage(x, y);
233
				setTailleImage(x, y);
243
				
234
				
244
				setIdImage(infos[3]) ;
235
				setIdImage(infos[3]) ;
-
 
236
				
-
 
237
				String infosTaxon = "" ;
-
 
238
				
-
 
239
				if(infos.length == 5 && infos[4] != null)  {
-
 
240
					infosTaxon = infos[4]; 
-
 
241
				}
-
 
242
				
-
 
243
				setInfosTaxon(infosTaxon);
245
 
244
 
246
				//verifierEtRetaillerImage();
245
				verifierEtRetaillerImage();
247
			}
246
			}
248
		} else {
247
		} else {
249
			// sinon on met une image vide
248
			// sinon on met une image vide
250
			getImage().setUrl("vide.jpg");
249
			getImage().setUrl("vide.jpg");
251
		}
250
		}
252
	}
251
	}
253
 
252
 
254
	/**
253
	/**
255
	 * Desactive visuellement le panneau et les boutons
254
	 * Desactive visuellement le panneau et les boutons
256
	 */
255
	 */
257
	public void desactiverPanneau() {
256
	public void desactiverPanneau() {
258
		getImage().setUrl("vide.jpeg");
257
		getImage().setUrl("vide.jpeg");
259
		prev.setEnabled(false);
258
		prev.setEnabled(false);
260
		suiv.setEnabled(false);
259
		suiv.setEnabled(false);
261
	}
260
	}
262
 
261
 
263
	/**
262
	/**
264
	 * Active visuellement le panneau et les boutons
263
	 * Active visuellement le panneau et les boutons
265
	 */
264
	 */
266
	public void activerPanneau() {
265
	public void activerPanneau() {
267
		prev.setEnabled(true);
266
		prev.setEnabled(true);
268
		suiv.setEnabled(true);
267
		suiv.setEnabled(true);
269
	}
268
	}
270
	
269
	
271
	public void masquerChargement() {
270
	public void masquerChargement() {
272
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
271
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
273
		if(imgEl != null) {
272
		if(imgEl != null) {
274
			imgEl.mask("Chargement");
273
			imgEl.mask("Chargement");
275
		}
274
		}
276
	}
275
	}
277
	
276
	
278
	public void demasquerChargement() {
277
	public void demasquerChargement() {
279
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
278
		ExtElement imgEl = Ext.get(imageConteneur.getElement());
280
		if(imgEl != null) {
279
		if(imgEl != null) {
281
			imgEl.unmask();
280
			imgEl.unmask();
282
		}
281
		}
283
	}
282
	}
284
 
283
 
285
	/**
284
	/**
286
	 * Ajoute les listeners pour la gestions d'évènement
285
	 * Ajoute les listeners pour la gestions d'évènement
287
	 */
286
	 */
288
	public void ajouterListeners() {
287
	public void ajouterListeners() {
289
		
-
 
290
		modeZoom.addListener(new ButtonListenerAdapter() {
-
 
291
 
-
 
292
			public void onClick(Button button, EventObject e) {
-
 
293
				// TODO Auto-generated method stub
-
 
294
				if(modeZoom.isPressed()) {
-
 
295
					modeZoom.toggle(false);
-
 
296
				} else {
-
 
297
					modeZoom.toggle(true);
-
 
298
				}
-
 
299
			}
-
 
300
			
-
 
301
			public void onToggle(Button button, boolean pressed) {
-
 
302
				if(pressed) {
-
 
303
					scroll = true;
-
 
304
					image.addStyleName("img-curseur-depl");
-
 
305
				} else  {
-
 
306
					scroll = false;
-
 
307
					image.removeStyleName("img-curseur-depl");
-
 
308
					niveauZoom = 1;
-
 
309
					verifierEtRetaillerImage();
-
 
310
					Ext.get(image.getElement()).center(imageConteneur.getElement());
-
 
311
				}
-
 
312
			}
-
 
313
		});
-
 
314
		
-
 
315
		image.addLoadListener(new LoadListener() {
-
 
316
 
-
 
317
			public void onError(Widget sender) {
-
 
318
				// TODO Auto-generated method stub
-
 
319
			}
-
 
320
 
-
 
321
			public void onLoad(Widget sender) {
-
 
322
				
-
 
323
				/*int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
-
 
324
				int[] tailleImage = calculerDimensions(getTailleImage(), max, max);
-
 
325
				ExtElement imgElement = Ext.get(image.getElement());
-
 
326
				if(animerTransition) {
288
				
327
					AnimationConfig a = new AnimationConfig() ;
-
 
328
					a.setDuration((float) dureeAnimation);
-
 
329
					imgElement.setHeight(tailleImage[1], a);
-
 
330
					imgElement.setWidth(tailleImage[0], a);
-
 
331
				} else {
-
 
332
					imgElement.setHeight(tailleImage[1], false);
-
 
333
					imgElement.setWidth(tailleImage[0], false);
-
 
334
				}*/
-
 
335
				verifierEtRetaillerImage();
-
 
336
				Ext.get(image.getElement()).center(imageConteneur.getElement());
-
 
337
				demasquerChargement();
-
 
338
			}
-
 
339
			
-
 
340
		});
-
 
341
		
-
 
342
		image.addClickListener(new ClickListener() {
289
		image.addClickHandler(new ClickHandler() {
343
 
290
			
344
			public void onClick(Widget sender) {
291
			public void onClick(ClickEvent event) {
345
				if(!scroll) {
292
				if(!scroll) {
346
					if(enClic) {
293
					if(enClic) {
347
						getIMediateur().doubleClicZoomImage();
294
						getIMediateur().doubleClicZoomImage();
348
					} else {
295
					} else {
349
						Timer t = new Timer() {
296
						Timer t = new Timer() {
350
							public void run() {
297
							public void run() {
351
								enClic = false;
298
								enClic = false;
352
							}
299
							}
353
							
300
							
354
						};
301
						};
355
						enClic = true;
302
						enClic = true;
356
						t.schedule(800);
303
						t.schedule(800);
357
					}
304
					}
358
				}
305
				}
359
			}
306
			}
360
			
-
 
361
		});
307
		});
362
		
308
		
-
 
309
		image.addLoadHandler(new LoadHandler() {
-
 
310
			
363
		image.addMouseWheelListener(new MouseWheelListener() {
-
 
364
 
-
 
365
			public void onMouseWheel(Widget sender, MouseWheelVelocity velocity) {
311
			public void onLoad(LoadEvent event) {
366
				
312
 
367
				if(velocity.getDeltaY() > 0) {
-
 
368
					if(scroll) {
-
 
369
						zoomOut();
313
				verifierEtRetaillerImage();
370
					} else {
-
 
371
						suiv.click();
-
 
372
					}
-
 
373
				} else {
-
 
374
					if(scroll) {
-
 
375
						zoomIn();
-
 
376
					} else {
-
 
377
						prev.click();
-
 
378
					}
314
				Ext.get(image.getElement()).center(imageConteneur.getElement());
379
				}
-
 
380
			}
315
				demasquerChargement();
381
			
316
			}
382
		});
-
 
383
		
-
 
384
		image.addMouseListener(new MouseListener() {
-
 
385
 
-
 
386
			public void onMouseDown(Widget sender, int x, int y) {
-
 
387
				if(scroll) {
-
 
388
					Event.getCurrentEvent().preventDefault();
-
 
389
					scroll = true;
-
 
390
					sourisX = x;
-
 
391
					sourisY = y;
-
 
392
					image.addStyleName("img-curseur-depl");
-
 
393
				}
-
 
394
			}
-
 
395
 
-
 
396
			public void onMouseEnter(Widget sender) {
-
 
397
				// TODO Auto-generated method stub
-
 
398
				
-
 
399
			}
-
 
400
 
-
 
401
			public void onMouseLeave(Widget sender) {
-
 
402
				// TODO Auto-generated method stub
317
		});
403
				
318
		
404
			}
-
 
405
 
-
 
406
			public void onMouseMove(Widget sender, int x, int y) {
-
 
407
				
-
 
408
				sourisXFin = x;
-
 
409
				sourisYFin = y;
-
 
410
				Event.getCurrentEvent().preventDefault();
-
 
411
			}
319
		image.addMouseWheelHandler(new MouseWheelHandler() {
412
 
-
 
413
			public void onMouseUp(Widget sender, int x, int y) {
-
 
414
				
320
			
415
				if(scroll) {
321
			public void onMouseWheel(MouseWheelEvent event) {
416
					Event.getCurrentEvent().preventDefault();
-
 
417
					
-
 
418
					if(sourisX - sourisXFin > 0) {
-
 
419
						Ext.get(image.getElement()).move(Direction.LEFT, sourisX - sourisXFin, false);
-
 
420
					}
322
				
421
					
-
 
422
					if(sourisXFin - sourisX > 0) {
323
				if(event.isNorth()) {
423
						Ext.get(image.getElement()).move(Direction.RIGHT, sourisXFin - sourisX, false);
324
					masquerChargement();
424
					}
-
 
425
					
-
 
426
					if(sourisY - sourisYFin > 0) {
-
 
427
						Ext.get(image.getElement()).move(Direction.UP, sourisY - sourisYFin, false);
-
 
428
					}
-
 
429
					
325
					getIMediateur().clicBoutonZoomImage("suiv");
430
					if(sourisYFin - sourisY > 0) {
326
				} else {
431
						Ext.get(image.getElement()).move(Direction.DOWN, sourisYFin - sourisY, false);
-
 
432
					}
327
					masquerChargement();
433
				}
328
					getIMediateur().clicBoutonZoomImage("prev");
434
			}
329
				}			
435
			
330
			}
436
		});
331
		});
437
		
332
		
438
		// gestion du clic sur le bouton précedent
333
		// gestion du clic sur le bouton précedent
439
		prev.addClickListener(new ClickListener() {
334
		prev.addClickHandler(new ClickHandler() {
440
 
335
 
441
			// en cas de clic
336
			// en cas de clic
442
			public void onClick(Widget sender) {
337
			public void onClick(ClickEvent event) {
443
				// on notifie le médiateur
338
				// on notifie le médiateur
444
				masquerChargement();
339
				masquerChargement();
445
				getIMediateur().clicBoutonZoomImage("prev");
340
				getIMediateur().clicBoutonZoomImage("prev");
446
			}
341
			}
447
 
-
 
448
		});
342
		});
449
 
343
 
450
		// gestion du clic sur le bouton suivant
344
		// gestion du clic sur le bouton suivant
451
		suiv.addClickListener(new ClickListener() {
345
		suiv.addClickHandler(new ClickHandler() {
452
 
346
 
453
			// en cas de clic
347
			// en cas de clic
454
			public void onClick(Widget sender) {
348
			public void onClick(ClickEvent event) {
455
				// on notifie le médiateur
349
				// on notifie le médiateur
456
				masquerChargement();
350
				masquerChargement();
457
				getIMediateur().clicBoutonZoomImage("suiv");
351
				getIMediateur().clicBoutonZoomImage("suiv");
458
			}
352
			}
459
 
353
 
460
		});
354
		});
461
 
355
 
462
		// gestion du redimensionnement
356
		// gestion du redimensionnement
463
		this.addListener(new PanelListenerAdapter() {
357
		this.addListener(new PanelListenerAdapter() {
464
 
358
 
465
			// lors d'un redimensionnement de l'application
359
			// lors d'un redimensionnement de l'application
466
 
360
 
467
			public void onBodyResize(Panel panel, java.lang.String width,
361
			public void onBodyResize(Panel panel, java.lang.String width,
468
					java.lang.String height) {
362
					java.lang.String height) {
469
				// on vérifie et on retaille l'image
363
				// on vérifie et on retaille l'image
470
				verifierEtRetaillerImage();
364
				verifierEtRetaillerImage();
471
			}
365
			}
472
		});
366
		});
473
 
367
 
474
		// gestion du redimensionnement lors de l'affichage du conteneur
368
		// gestion du redimensionnement lors de l'affichage du conteneur
475
		imageConteneur.addListener(new PanelListenerAdapter() {
369
		imageConteneur.addListener(new PanelListenerAdapter() {
476
 
370
 
477
			// avant de finir d'afficher
371
			// avant de finir d'afficher
478
 
372
 
479
			public void onAfterLayout(Container self) {
373
			public void onAfterLayout(Container self) {
480
				// on redimensionne
374
				// on redimensionne
481
				verifierEtRetaillerImage();
375
				verifierEtRetaillerImage();
482
			}
376
			}
483
		});
377
		});
484
	}
378
	}
485
 
379
 
486
	/**
380
	/**
487
	 * 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
488
	 * echeant
382
	 * echeant
489
	 */
383
	 */
490
	public void verifierEtRetaillerImage() {
384
	public void verifierEtRetaillerImage() {
-
 
385
		
491
		// si l'image est nulle
386
		// si l'image est nulle
492
		if (image == null) {
387
		if (image == null) {
493
			// on ne fait rien
388
			// on ne fait rien
494
			return;
389
			return;
495
		}
390
		}
496
 
391
		
497
		// on prend la taille originale de l'image
-
 
498
		/*int originalX = getTailleImage()[0];
-
 
499
		int originalY = getTailleImage()[1];
-
 
500
 
-
 
501
		// on la transforme en float (la division entre entier donne de curieux
-
 
502
		// résultats)
-
 
503
		float fOriginalX = (new Float(originalX)).floatValue();
-
 
504
		float fOriginalY = (new Float(originalY)).floatValue();
-
 
505
 
-
 
506
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
-
 
507
		float rapportTaille = fOriginalX / fOriginalY;
-
 
508
 
-
 
509
		// la nouvelle taille est pour le moment égale à l'ancienne
-
 
510
		int nouvelleTailleX = originalX;
-
 
511
		int nouvelleTailleY = originalY;
-
 
512
 
-
 
513
		// on prend la taille du conteneur
-
 
514
		int tailleConteneurX = imageConteneur.getWidth();
-
 
515
		int tailleConteneurY = imageConteneur.getHeight();*/
-
 
516
 
-
 
517
		// si celle-ci est égale à 0 (conteneur mal initialisé)
-
 
518
		/*
-
 
519
		 * if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0) { // on
-
 
520
		 * essaie de la calculer en fonction de la taille du parent et des
-
 
521
		 * frères tailleConteneurY = this.getHeight() ; tailleConteneurX =
-
 
522
		 * this.getWidth() - prev.getOffsetWidth() * 2 ;
-
 
523
		 *  }
-
 
524
		 */
-
 
525
/*
-
 
526
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
-
 
527
		// grande)
-
 
528
		if (originalY > tailleConteneurY || originalX > tailleConteneurX) {
-
 
529
			// si la longueur de l'image est la plus grande des deux
-
 
530
			if (originalX > originalY) {
-
 
531
				// on prend la longueur comme taille de référence, qu'on met à
-
 
532
				// la longueur du conteneur
-
 
533
				nouvelleTailleX = tailleConteneurX;
-
 
534
				// et on recalcule la hauteur, par rapport à la nouvelle
-
 
535
				// longueur, en gardant le format de 'limage
-
 
536
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
-
 
537
						/ rapportTaille);
-
 
538
			} else {
-
 
539
				// si la hauteur est la plus grande, on fait le même genre
-
 
540
				// d'opération en prenant la hauteur comme référence
-
 
541
				nouvelleTailleY = tailleConteneurY;
-
 
542
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
-
 
543
						* rapportTaille);
-
 
544
			}
-
 
545
		}
-
 
546
*/
-
 
547
		// 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
548
		int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
393
		int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
549
		
394
		
550
		int[] tailleImage = new int[2];
395
		int[] tailleImage = new int[2];
551
		ExtElement imgElement = Ext.get(image.getElement());
-
 
552
		
-
 
553
		if(max == imageConteneur.getHeight()) {
-
 
554
			//tailleImage[0] = getTailleImage()[0];
-
 
555
			//tailleImage[1] = max;
-
 
556
			imgElement.setHeight(max, false);
-
 
557
		} else {
-
 
558
			//tailleImage[1] = getTailleImage()[0];
-
 
559
			//tailleImage[0] = max;
-
 
560
			imgElement.setWidth(max, false);
-
 
561
		}
-
 
562
		
-
 
563
		//int[] tailleImage = calculerDimensions(getTailleImage(), max, max);
-
 
564
		//imgElement.
396
		
565
		/*if(animerTransition) {
-
 
566
			AnimationConfig a = new AnimationConfig() ;
-
 
567
			a.setDuration((float) dureeAnimation);
397
		if(Ext.isIE()) {
568
			imgElement.setHeight(tailleImage[1], a);
398
			image.setHeight(calculerDimensions(getTailleImage(),max,max)[1]+"px");
569
			imgElement.setWidth(tailleImage[0], a);
399
			image.setWidth(calculerDimensions(getTailleImage(),max,max)[0]+"px");
570
		} else {
-
 
571
			imgElement.setHeight(tailleImage[1], false);
-
 
572
			imgElement.setWidth(tailleImage[0], false);
-
 
573
		}*/
-
 
574
		
-
 
575
		String strZoom = ""+niveauZoom+"";
-
 
-
 
400
		} else {
-
 
401
		
-
 
402
			if(max == imageConteneur.getHeight()) {
576
		strZoom = strZoom.substring(0,3);
403
				tailleImage[0] = getTailleImage()[0];
-
 
404
				tailleImage[1] = max;			
-
 
405
				image.setHeight(max+"px");
-
 
406
	
-
 
407
			} else {
-
 
408
				tailleImage[1] = getTailleImage()[0];
-
 
409
				tailleImage[0] = max;
-
 
410
				image.setWidth(max+"px");
577
		
411
			}
578
		valeurZoom.setText("x "+strZoom);
412
		}
579
	}
413
	}
580
	
414
	
581
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
415
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
582
	    
416
	    
583
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
417
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
584
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
418
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
585
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
419
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
586
        float[] XYresize = new float[2];
420
        float[] XYresize = new float[2];
587
        
421
        
588
        if(maxTaille == tailleXY[0]) {
422
        if(maxTaille == tailleXY[0]) {
589
            float rapport = tailleXYf[1]/tailleXYf[0] ;
423
            float rapport = tailleXYf[1]/tailleXYf[0] ;
590
            XYresize[0] = tailleOr ;
424
            XYresize[0] = tailleOr ;
591
            XYresize[1] = tailleOr*rapport ;
425
            XYresize[1] = tailleOr*rapport ;
592
        }else {
426
        }else {
593
            float rapport = tailleXYf[0]/tailleXYf[1] ;
427
            float rapport = tailleXYf[0]/tailleXYf[1] ;
594
            XYresize[1] = tailleOr ;
428
            XYresize[1] = tailleOr ;
595
            XYresize[0] = tailleOr*rapport ;
429
            XYresize[0] = tailleOr*rapport ;
596
        }
430
        }
597
        
431
        
598
        int[] res = {(int)Math.round(XYresize[0]*niveauZoom),(int) Math.round(XYresize[1]*niveauZoom)} ;
432
        int[] res = {(int)Math.round(XYresize[0]),(int) Math.round(XYresize[1])} ;
599
        
433
        
600
        return res;
434
        return res;
601
    }
435
    }
602
	
436
	
603
	public void configDragAndDrop()
437
	public void configDragAndDrop()
604
	{
438
	{
605
 
439
 
606
		// on fabrique la nouvelle configuration
440
		// on fabrique la nouvelle configuration
607
		// 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
608
		DropTargetConfig dtc = new DropTargetConfig();
442
		DropTargetConfig dtc = new DropTargetConfig();
609
		dtc.setdDdGroup("DragGroupName");
443
		dtc.setdDdGroup("DragGroupName");
610
 
444
 
611
		//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
612
		@SuppressWarnings("unused")
446
		@SuppressWarnings("unused")
613
		DropTarget tg = new DropTarget(this, dtc)
447
		DropTarget tg = new DropTarget(this, dtc)
614
		{
448
		{
615
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
449
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
616
				
450
				
617
				// si on reçoit des données provenant d'une grille
451
				// si on reçoit des données provenant d'une grille
618
				if(data instanceof GridDragData)
452
				if(data instanceof GridDragData)
619
		    	  {
453
		    	  {
620
		    		  		// on appelle le médiateur
454
		    		  		// on appelle le médiateur
621
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
455
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
622
		    	  }
456
		    	  }
623
				return false ;
457
				return false ;
624
			}
458
			}
625
			
459
			
626
			public String notifyOver(DragSource source, EventObject e, DragData data){
460
			public String notifyOver(DragSource source, EventObject e, DragData data){
627
			    return "x-dd-drop-ok";
461
			    return "x-dd-drop-ok";
628
			}
462
			}
629
		};
463
		};
630
        
464
        
631
	}
465
	}
632
 
466
 
633
	/**
467
	/**
634
	 * Accesseur pour le médiateur
468
	 * Accesseur pour le médiateur
635
	 * 
469
	 * 
636
	 * @return le médiateur associé à la vue
470
	 * @return le médiateur associé à la vue
637
	 */
471
	 */
638
	public ImageMediateur getIMediateur() {
472
	public ImageMediateur getIMediateur() {
639
		return iMediateur;
473
		return iMediateur;
640
	}
474
	}
641
 
475
 
642
	/**
476
	/**
643
	 * Accesseur au conteneur de l'image
477
	 * Accesseur au conteneur de l'image
644
	 * 
478
	 * 
645
	 * @return le conteneur de l'image
479
	 * @return le conteneur de l'image
646
	 */
480
	 */
647
	public Image getImage() {
481
	public Image getImage() {
648
		return image;
482
		return image;
649
	}
483
	}
650
	
484
	
651
	/**
485
	/**
652
	 * Acesseurs pour l'identifiant de l'image
486
	 * Acesseurs pour l'identifiant de l'image
653
	 * @return l'id de l'image
487
	 * @return l'id de l'image
654
	 */
488
	 */
655
	public String getIdImage()
489
	public String getIdImage()
656
	{
490
	{
657
		return idImage ;
491
		return idImage ;
658
	}
492
	}
659
 
493
 
660
	/**
494
	/**
661
	 * Accesseur pour le bouton précédent
495
	 * Accesseur pour le bouton précédent
662
	 * 
496
	 * 
663
	 * @return le bouton précédent
497
	 * @return le bouton précédent
664
	 */
498
	 */
665
	public com.google.gwt.user.client.ui.Button getPrev() {
499
	public com.google.gwt.user.client.ui.Button getPrev() {
666
		return prev;
500
		return prev;
667
	}
501
	}
668
 
502
 
669
	/**
503
	/**
670
	 * Accesseur pour le bouton suivant
504
	 * Accesseur pour le bouton suivant
671
	 * 
505
	 * 
672
	 * @return le bouton suivant
506
	 * @return le bouton suivant
673
	 */
507
	 */
674
	public com.google.gwt.user.client.ui.Button getSuiv() {
508
	public com.google.gwt.user.client.ui.Button getSuiv() {
675
		return suiv;
509
		return suiv;
676
	}
510
	}
677
 
511
 
678
	/**
512
	/**
679
	 * Setter pour la taille de l'image
513
	 * Setter pour la taille de l'image
680
	 * 
514
	 * 
681
	 * @param x
515
	 * @param x
682
	 *            la largeur en pixels
516
	 *            la largeur en pixels
683
	 * @param y
517
	 * @param y
684
	 *            la hauteur en pixels
518
	 *            la hauteur en pixels
685
	 */
519
	 */
686
	public void setTailleImage(int x, int y) {
520
	public void setTailleImage(int x, int y) {
687
		imageHeight = y;
521
		imageHeight = y;
688
		imageWidth = x;
522
		imageWidth = x;
689
	}
523
	}
690
	
524
	
691
	/**
525
	/**
692
	 * Setteur pour l'identifiant de l'image
526
	 * Setteur pour l'identifiant de l'image
693
	 * @param id le nouvel identifiant
527
	 * @param id le nouvel identifiant
694
	 */
528
	 */
695
	public void setIdImage(String id)
529
	public void setIdImage(String id)
696
	{
530
	{
697
		idImage = id ;
531
		idImage = id ;
698
	}
532
	}
-
 
533
	
-
 
534
	public void setInfosTaxon(String nomTaxon) {
-
 
535
	
-
 
536
		if(nomTaxon != null && !nomTaxon.equals("")) {
-
 
537
			nomTaxon = getNomsObservationsFormatees(nomTaxon);
-
 
538
		}
-
 
539
		
-
 
540
		infosTaxon.setHtml("<div id='infos_taxon'><span class='texte_info_taxon'>"+nomTaxon+"</span></div>");
-
 
541
		infosTaxon.doLayout();
-
 
542
	}
699
 
543
 
700
	/**
544
	/**
701
	 * renvoie la taille originale de l'image
545
	 * renvoie la taille originale de l'image
702
	 * 
546
	 * 
703
	 * @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
704
	 */
548
	 */
705
	public int[] getTailleImage() {
549
	public int[] getTailleImage() {
706
		int[] taille = { imageHeight, imageWidth };
550
		int[] taille = { imageHeight, imageWidth };
707
 
551
 
708
		return taille;
552
		return taille;
709
	}
553
	}
-
 
554
	
-
 
555
	public boolean estPortrait() {
-
 
556
		return imageHeight > imageWidth;
-
 
557
	}
-
 
558
	
-
 
559
	public boolean estPaysage() {
-
 
560
		return !estPortrait();
-
 
561
	}
710
	
562
	
711
	/**
563
	/**
712
	 * Accesseur pour le conteneur de l'image
564
	 * Accesseur pour le conteneur de l'image
713
	 * @return le conteur de l'image
565
	 * @return le conteur de l'image
714
	 */
566
	 */
715
	public Panel getImageConteneur() {
567
	public Panel getImageConteneur() {
716
 
568
 
717
		return imageConteneur;
569
		return imageConteneur;
718
 
570
 
719
	}
571
	}
720
	
572
	
-
 
573
	private String getNomsObservationsFormatees(String nomObs) {
721
	private void zoomOut() {
574
		
-
 
575
		String htmlInfobulle = "";
722
		if(niveauZoom >= minZoom) {
576
		
-
 
577
		String[][] obs = getObservationsAssociees(nomObs);
723
			niveauZoom -= pasZoom;
578
		
-
 
579
		for(int i = 0; i < obs.length; i++) {
-
 
580
						
724
			if(niveauZoom <= minZoom) {
581
			if(obs[i].length == 3 && obs[i][1] != null && !obs[i][1].equals("")) {
725
				niveauZoom = minZoom;
582
				htmlInfobulle += ", "+obs[i][1];
726
			}
-
 
727
			verifierEtRetaillerImage();
-
 
728
			gererDecalage(false);
583
			}
-
 
584
		}
-
 
585
		
-
 
586
		htmlInfobulle = htmlInfobulle.replaceFirst(", ", "");
-
 
587
		
729
		}
588
		return htmlInfobulle;
730
	}
589
	}
731
 
590
	
-
 
591
	private String[][] getObservationsAssociees(String nomObs) {
732
	private void zoomIn() {
592
		
733
		if(niveauZoom < maxZoom ) { 
593
		if(nomObs.trim().equals("")) {
-
 
594
			return new String[0][0];
-
 
595
		}
734
			niveauZoom += pasZoom;
596
		
735
			if(niveauZoom >= maxZoom) {
597
		String[] obsTab = nomObs.split(";;");
736
				niveauZoom = maxZoom;
598
		String[][] obsAnalysees = new String[obsTab.length][3];
737
			}
599
		
-
 
600
		for(int i = 0; i < obsTab.length; i++) {
738
			verifierEtRetaillerImage();
601
			
-
 
602
			obsAnalysees[i] = obsTab[i].split("#");
739
			gererDecalage(true);
603
			
-
 
604
		}
-
 
605
		
740
		}
606
		return obsAnalysees;
741
	}
607
	}
-
 
608
	
742
	
609
	private boolean[] estAssocieeTransmise(String nomObs) {
743
	private void gererDecalage(boolean in) {
610
		
744
		
611
		String[][] obs = getObservationsAssociees(nomObs);
745
		float nZoom = niveauZoom;
612
		boolean[] associeesTranmises = {false, false};
746
		
-
 
747
		if(niveauZoom < 1) {
-
 
748
			nZoom = 1/niveauZoom;
-
 
749
		}
-
 
750
		
-
 
751
		if(!in) {
-
 
752
			int diffX = imageConteneur.getWidth()/2 - sourisX;
-
 
753
			int diffY = imageConteneur.getHeight()/2 - sourisY;
-
 
754
			
-
 
755
			if(diffX > 0) {
-
 
756
				Ext.get(image.getElement()).move(Direction.RIGHT, (int)((diffX/maxZoom)/nZoom), false);
-
 
757
			}
-
 
758
			
-
 
759
			if(-diffX > 0) {
-
 
760
				Ext.get(image.getElement()).move(Direction.LEFT, (int)(-(diffX/maxZoom)/nZoom), false);
-
 
761
			}
-
 
762
			
-
 
763
			if(diffY > 0) {
-
 
764
				Ext.get(image.getElement()).move(Direction.DOWN, (int)((diffY/maxZoom)/nZoom), false);
-
 
765
			}
-
 
766
			
613
		
767
			if(-diffY > 0) {
-
 
768
				Ext.get(image.getElement()).move(Direction.UP, (int)(-(diffY/maxZoom)/nZoom), false);
-
 
769
			}
-
 
770
		} else {
-
 
771
			int diffX = imageConteneur.getWidth()/2;
-
 
772
			int diffY = imageConteneur.getHeight()/2;
-
 
773
			if(diffX > 0) {
-
 
774
				Ext.get(image.getElement()).move(Direction.LEFT, (int)((diffX/maxZoom)/nZoom), false);
-
 
775
			}
-
 
776
			
-
 
777
			if(-diffX > 0) {
-
 
778
				Ext.get(image.getElement()).move(Direction.RIGHT, (int)((-diffX/maxZoom)/nZoom), false);
-
 
779
			}
614
		if(obs.length > 0) {
780
			
615
			associeesTranmises[0] = true;
781
			if(diffY > 0) {
616
		}
782
				Ext.get(image.getElement()).move(Direction.UP, (int)((diffY/maxZoom)/nZoom), false);
617
		
-
 
618
		for(int i = 0; i < obs.length; i++) {
-
 
619
			
783
			}
620
			if(obs[i].length == 3 && obs[i][2] != null && obs[i][2].equals("1")) {
784
			
621
				associeesTranmises[1] = true;
785
			if(-diffY > 0) {
622
			}
786
				Ext.get(image.getElement()).move(Direction.DOWN, (int)(-(diffY/maxZoom)/nZoom), false);
623
		}
787
			}
624
		
788
		}
625
		return associeesTranmises;
789
	}
626
	}
790
}
627
}