Subversion Repositories eFlore/Applications.cel

Rev

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

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