Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 195 Rev 207
1
package org.tela_botanica.client.vues.image;
1
package org.tela_botanica.client.vues.image;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
 
-
 
6
import com.google.gwt.user.client.DOM;
5
 
-
 
6
import com.google.gwt.user.client.Event;
-
 
7
import com.google.gwt.user.client.Timer;
7
import com.google.gwt.user.client.Event;
8
import com.google.gwt.user.client.Window;
8
import com.google.gwt.user.client.ui.ClickListener;
9
import com.google.gwt.user.client.ui.ClickListener;
-
 
10
import com.google.gwt.user.client.ui.Image;
-
 
11
import com.google.gwt.user.client.ui.LoadListener;
-
 
12
import com.google.gwt.user.client.ui.MouseWheelListener;
9
import com.google.gwt.user.client.ui.Image;
13
import com.google.gwt.user.client.ui.MouseWheelVelocity;
-
 
14
import com.google.gwt.user.client.ui.Widget;
10
import com.google.gwt.user.client.ui.Widget;
15
import com.gwtext.client.core.AnimationConfig;
-
 
16
import com.gwtext.client.core.EventObject;
-
 
17
import com.gwtext.client.core.Ext;
-
 
18
import com.gwtext.client.core.ExtElement;
11
import com.gwtext.client.core.EventObject;
19
 
12
import com.gwtext.client.core.RegionPosition;
20
import com.gwtext.client.core.RegionPosition;
13
import com.gwtext.client.dd.DragData;
21
import com.gwtext.client.dd.DragData;
14
import com.gwtext.client.dd.DragSource;
22
import com.gwtext.client.dd.DragSource;
15
import com.gwtext.client.dd.DropTarget;
23
import com.gwtext.client.dd.DropTarget;
16
import com.gwtext.client.dd.DropTargetConfig;
24
import com.gwtext.client.dd.DropTargetConfig;
17
import com.gwtext.client.widgets.Container;
25
import com.gwtext.client.widgets.Container;
18
import com.gwtext.client.widgets.Panel;
26
import com.gwtext.client.widgets.Panel;
19
import com.gwtext.client.widgets.ToolTip;
27
import com.gwtext.client.widgets.ToolTip;
20
import com.gwtext.client.widgets.event.PanelListenerAdapter;
28
import com.gwtext.client.widgets.event.PanelListenerAdapter;
21
import com.gwtext.client.widgets.grid.GridDragData;
29
import com.gwtext.client.widgets.grid.GridDragData;
22
import com.gwtext.client.widgets.layout.BorderLayout;
30
import com.gwtext.client.widgets.layout.BorderLayout;
23
import com.gwtext.client.widgets.layout.BorderLayoutData;
31
import com.gwtext.client.widgets.layout.BorderLayoutData;
24
 
32
 
25
/**
33
/**
26
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
34
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
27
 * 
35
 * 
28
 * @author aurelien
36
 * @author aurelien
29
 * 
37
 * 
30
 */
38
 */
31
public class ZoomImageVue extends Panel implements Rafraichissable {
39
public class ZoomImageVue extends Panel implements Rafraichissable {
32
 
40
 
33
	/**
41
	/**
34
	 * Le médiateur associé à la vue
42
	 * Le médiateur associé à la vue
35
	 */
43
	 */
36
	private ImageMediateur iMediateur = null;
44
	private ImageMediateur iMediateur = null;
37
 
45
 
38
	/**
46
	/**
39
	 * Panneau conteneur pour l'image
47
	 * Panneau conteneur pour l'image
40
	 */
48
	 */
41
	private Panel imageConteneur = null;
49
	private Panel imageConteneur = null;
42
	/**
50
	/**
43
	 * l'image à afficher
51
	 * l'image à afficher
44
	 */
52
	 */
45
	private Image image = new Image("vide.jpg");
53
	private Image image = new Image("vide.jpg");
46
	/**
54
	/**
47
	 * Bouton précédent
55
	 * Bouton précédent
48
	 */
56
	 */
49
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
57
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
50
	/**
58
	/**
51
	 * Bouton suivant
59
	 * Bouton suivant
52
	 */
60
	 */
53
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
61
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
54
 
62
 
55
	/**
63
	/**
56
	 * Taille originale Y de l'image
64
	 * Taille originale Y de l'image
57
	 */
65
	 */
58
	private int imageHeight = 0;
66
	private int imageHeight = 0;
59
 
67
 
60
	/**
68
	/**
61
	 * Taille originale X de l'image
69
	 * Taille originale X de l'image
62
	 */
70
	 */
63
	private int imageWidth = 0;
71
	private int imageWidth = 0;
64
	
72
	
65
	/**
73
	/**
66
	 * Identifiant de l'image
74
	 * Identifiant de l'image
67
	 */
75
	 */
68
	private String idImage = "0" ;
76
	private String idImage = "0" ;
69
 
77
 
70
	/**
78
	/**
71
	 * Booleen d'initalisation général
79
	 * Booleen d'initalisation général
72
	 */
80
	 */
73
	private boolean initialise = false;
81
	private boolean initialise = false;
74
 
82
 
75
	/**
83
	/**
76
	 * Booleen d'initalisation du conteneur d'image
84
	 * Booleen d'initalisation du conteneur d'image
77
	 */
85
	 */
78
	private boolean conteneurInitialise = false;
86
	private boolean conteneurInitialise = false;
79
	
87
	
80
	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>") ;
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>") ;
81
 
89
 
82
	/**
90
	/**
-
 
91
	 * true pour animer les transitions des animations
-
 
92
	 */
-
 
93
	private boolean animerTransition = false;
-
 
94
	
-
 
95
	/**
-
 
96
	 * duree des animation
-
 
97
	 */
-
 
98
	private float dureeAnimation = (float) 0.15 ;
-
 
99
	
-
 
100
	/**.
-
 
101
	 * boolean de gestion du double clic
-
 
102
	 */
-
 
103
	private boolean enClic = false;
-
 
104
	
-
 
105
	/**
83
	 * Constructeur sans argument (privé car ne doit être utilisé)
106
	 * Constructeur sans argument (privé car ne doit être utilisé)
84
	 */
107
	 */
85
	@SuppressWarnings("unused")
108
	@SuppressWarnings("unused")
86
	private ZoomImageVue() {
109
	private ZoomImageVue() {
87
		super();
110
		super();
88
	}
111
	}
89
 
112
 
90
	/**
113
	/**
91
	 * Constructeur avec argument
114
	 * Constructeur avec argument
92
	 * 
115
	 * 
93
	 * @param im
116
	 * @param im
94
	 *            le médiateur à associer à la vue
117
	 *            le médiateur à associer à la vue
95
	 */
118
	 */
96
	public ZoomImageVue(ImageMediateur im) {
119
	public ZoomImageVue(ImageMediateur im) {
97
		super("Zoom");
120
		super("Zoom");
98
		setId("x-view-zoom-panel");
121
		setId("x-view-zoom-panel");
99
		// on associe le médiateur
122
		// on associe le médiateur
100
		iMediateur = im;
123
		iMediateur = im;
101
 
124
 
102
		prev.setStylePrimaryName("x-view-zoom-button-p");
125
		prev.setStylePrimaryName("x-view-zoom-button-p");
103
		suiv.setStylePrimaryName("x-view-zoom-button-s");
126
		suiv.setStylePrimaryName("x-view-zoom-button-s");
104
 
127
 
105
		// on crée une image qui gère le double clic et la roulette de la souris
128
		// on crée une image qui gère le double clic et la roulette de la souris
106
		image = new Image() {
129
		image = new Image();
107
 
-
 
108
			public void onBrowserEvent(Event event) {
-
 
109
				
-
 
110
				// lors du double clic
-
 
111
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
-
 
112
 
-
 
113
					// on notifie le médiateur
-
 
114
					getIMediateur().doubleClicZoomImage();
-
 
115
				}
-
 
116
 
-
 
117
				// lors d'un déplacement de la roulette
-
 
118
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
-
 
119
 
-
 
120
					// on simule un clic sur le bouton précédent
-
 
121
					if (event.getMouseWheelVelocityY() >= 1) {
-
 
122
						prev.click();
-
 
123
					}
-
 
124
 
-
 
125
					// ou suivant
-
 
126
					if (event.getMouseWheelVelocityY() <= -1) {
-
 
127
						suiv.click();
-
 
128
					}
-
 
129
				}
-
 
130
			}
-
 
131
			
-
 
132
		};
-
 
133
 
130
		
134
		this.setHeader(false);
131
		this.setHeader(false);
135
 
132
 
-
 
133
		imageConteneur = new Panel();
136
		imageConteneur = new Panel() ;
134
		
137
		imageConteneur.setBorder(false);
135
		imageConteneur.setBorder(false);
138
 
136
 
139
		imageConteneur.add(image);
137
		imageConteneur.add(image);
140
		imageConteneur.setId("x-view-zoom-img");
138
		imageConteneur.setId("x-view-zoom-img");
141
 
139
 
142
		// il n'existe pas de méthode pour ajouter un listener pour le double
140
		// il n'existe pas de méthode pour ajouter un listener pour le double
143
		// clic sur une image
141
		// clic sur une image
144
		// alors on lui dit manuellement de capter l'évènement double clic
142
		// alors on lui dit manuellement de capter l'évènement double clic
145
		image.sinkEvents(Event.ONDBLCLICK);
-
 
146
		image.sinkEvents(Event.ONMOUSEWHEEL);
143
		//imageConteneur.sinkEvents(Event.ONMOUSEWHEEL);
147
 
144
 
148
		// l'image de base est vide
145
		// l'image de base est vide
149
		image.setUrl("vide.jpg");
146
		image.setUrl("vide.jpg");
150
 
147
 
151
		this.setLayout(new BorderLayout());
148
		this.setLayout(new BorderLayout());
152
 
149
 
153
		prev.setWidth("60px");
150
		prev.setWidth("60px");
154
		suiv.setWidth("60px");
151
		suiv.setWidth("60px");
155
 
152
 
156
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
153
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
157
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
154
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
158
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
155
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
159
 
156
 
160
		imageConteneur.setMaskDisabled(true);
157
		imageConteneur.setMaskDisabled(true);
161
		this.setBorder(false);
158
		this.setBorder(false);
162
 
159
 
163
		conteneurInitialise = true;
160
		conteneurInitialise = true;
164
		initialise = true;
161
		initialise = true;
165
		
162
		
166
		configDragAndDrop() ;
163
		configDragAndDrop() ;
167
 
164
 
168
		// on ajoute les listeners
165
		// on ajoute les listeners
169
		ajouterListeners();
166
		ajouterListeners();
170
		
167
		
171
		tp.setDismissDelay(1750);
168
		tp.setDismissDelay(1750);
172
		tp.applyTo(image.getElement()) ;
169
		tp.applyTo(image.getElement()) ;
173
 
170
 
174
	}
171
	}
175
 
172
 
176
	/**
173
	/**
177
	 * Méthode héritée de l'interface rafraichissable
174
	 * Méthode héritée de l'interface rafraichissable
178
	 * 
175
	 * 
179
	 * @param nouvelleDonnees
176
	 * @param nouvelleDonnees
180
	 *            les nouvelles données
177
	 *            les nouvelles données
181
	 * @param repandreRafraichissement
178
	 * @param repandreRafraichissement
182
	 *            le booleen qui dit si on doit répnadre l'évènement
179
	 *            le booleen qui dit si on doit répnadre l'évènement
183
	 */
180
	 */
184
	public void rafraichir(Object nouvelleDonnees,
181
	public void rafraichir(Object nouvelleDonnees,
185
			boolean repandreRafraichissement) {
182
			boolean repandreRafraichissement) {
186
 
183
 
187
		// si on reçoit une string
184
		// si on reçoit une string
188
		if (nouvelleDonnees instanceof String[] && initialise
185
		if (nouvelleDonnees instanceof String[] && initialise
189
				&& conteneurInitialise) {
186
				&& conteneurInitialise) {
190
			String[] infos = (String[]) nouvelleDonnees;
187
			String[] infos = (String[]) nouvelleDonnees;
191
			// c'est l'url de l'image qu'on associe à la vue
188
			// c'est l'url de l'image qu'on associe à la vue
192
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
189
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
193
				getImage().setUrl(infos[0]);
190
				getImage().setUrl(infos[0]);
194
				int x = Integer.parseInt(infos[1]);
191
				int x = Integer.parseInt(infos[1]);
195
				int y = Integer.parseInt(infos[2]);
192
				int y = Integer.parseInt(infos[2]);
196
 
193
 
197
				setTailleImage(x, y);
194
				setTailleImage(x, y);
198
				
195
				
199
				setIdImage(infos[3]) ;
196
				setIdImage(infos[3]) ;
200
 
197
 
201
				verifierEtRetaillerImage();
198
				//verifierEtRetaillerImage();
202
			}
199
			}
203
		} else {
200
		} else {
204
			// sinon on met une image vide
201
			// sinon on met une image vide
205
			getImage().setUrl("vide.jpg");
202
			getImage().setUrl("vide.jpg");
206
		}
203
		}
207
	}
204
	}
208
 
205
 
209
	/**
206
	/**
210
	 * Desactive visuellement le panneau et les boutons
207
	 * Desactive visuellement le panneau et les boutons
211
	 */
208
	 */
212
	public void desactiverPanneau() {
209
	public void desactiverPanneau() {
213
		getImage().setUrl("vide.jpeg");
210
		getImage().setUrl("vide.jpeg");
214
		prev.setEnabled(false);
211
		prev.setEnabled(false);
215
		suiv.setEnabled(false);
212
		suiv.setEnabled(false);
216
	}
213
	}
217
 
214
 
218
	/**
215
	/**
219
	 * Active visuellement le panneau et les boutons
216
	 * Active visuellement le panneau et les boutons
220
	 */
217
	 */
221
	public void activerPanneau() {
218
	public void activerPanneau() {
222
		prev.setEnabled(true);
219
		prev.setEnabled(true);
223
		suiv.setEnabled(true);
220
		suiv.setEnabled(true);
224
	}
221
	}
225
 
222
 
226
	/**
223
	/**
227
	 * Ajoute les listeners pour la gestions d'évènement
224
	 * Ajoute les listeners pour la gestions d'évènement
228
	 */
225
	 */
229
	public void ajouterListeners() {
226
	public void ajouterListeners() {
-
 
227
 
-
 
228
		image.addLoadListener(new LoadListener() {
-
 
229
 
-
 
230
			public void onError(Widget sender) {
-
 
231
				// TODO Auto-generated method stub
-
 
232
				
-
 
233
			}
-
 
234
 
-
 
235
			public void onLoad(Widget sender) {
-
 
236
				
-
 
237
				int max = Math.min(imageConteneur.getHeight(), imageConteneur.getWidth());
-
 
238
				int[] tailleImage = calculerDimensions(getTailleImage(), max, max);
-
 
239
				ExtElement imgElement = Ext.get(image.getElement());
-
 
240
				if(animerTransition) {
-
 
241
					AnimationConfig a = new AnimationConfig() ;
-
 
242
					a.setDuration((float) dureeAnimation);
-
 
243
					imgElement.setHeight(tailleImage[1], a);
-
 
244
					imgElement.setWidth(tailleImage[0], a);
-
 
245
				} else {
-
 
246
					imgElement.setHeight(tailleImage[1], false);
-
 
247
					imgElement.setWidth(tailleImage[0], false);
-
 
248
				}
-
 
249
				
-
 
250
			}
-
 
251
			
-
 
252
		});
-
 
253
		
-
 
254
		image.addClickListener(new ClickListener() {
-
 
255
 
-
 
256
			public void onClick(Widget sender) {
-
 
257
				
-
 
258
				Window.alert(""+Event.getCurrentEvent().getButton());
-
 
259
					if(enClic) {
-
 
260
						getIMediateur().doubleClicZoomImage();
-
 
261
					} else {
-
 
262
						Timer t = new Timer() {
-
 
263
							public void run() {
-
 
264
								enClic = false;
-
 
265
							}
-
 
266
							
-
 
267
						};
-
 
268
						enClic = true;
-
 
269
						t.schedule(800);
-
 
270
					}
-
 
271
			}
-
 
272
			
-
 
273
		});
-
 
274
		
-
 
275
		image.addMouseWheelListener(new MouseWheelListener() {
-
 
276
 
-
 
277
			public void onMouseWheel(Widget sender, MouseWheelVelocity velocity) {
-
 
278
				
-
 
279
				if(velocity.getDeltaY() > 0) {
-
 
280
					suiv.click();
-
 
281
				} else {
-
 
282
					prev.click();
-
 
283
				}
-
 
284
			}
-
 
285
			
-
 
286
		});
230
 
287
		
231
		// gestion du clic sur le bouton précedent
288
		// gestion du clic sur le bouton précedent
232
		prev.addClickListener(new ClickListener() {
289
		prev.addClickListener(new ClickListener() {
233
 
290
 
234
			// en cas de clic
291
			// en cas de clic
235
			public void onClick(Widget sender) {
292
			public void onClick(Widget sender) {
236
				// on notifie le médiateur
293
				// on notifie le médiateur
237
				getIMediateur().clicBoutonZoomImage("prev");
294
				getIMediateur().clicBoutonZoomImage("prev");
238
			}
295
			}
239
 
296
 
240
		});
297
		});
241
 
298
 
242
		// gestion du clic sur le bouton suivant
299
		// gestion du clic sur le bouton suivant
243
		suiv.addClickListener(new ClickListener() {
300
		suiv.addClickListener(new ClickListener() {
244
 
301
 
245
			// en cas de clic
302
			// en cas de clic
246
			public void onClick(Widget sender) {
303
			public void onClick(Widget sender) {
247
				// on notifie le médiateur
304
				// on notifie le médiateur
248
				getIMediateur().clicBoutonZoomImage("suiv");
305
				getIMediateur().clicBoutonZoomImage("suiv");
249
			}
306
			}
250
 
307
 
251
		});
308
		});
252
 
309
 
253
		// gestion du redimensionnement
310
		// gestion du redimensionnement
254
		this.addListener(new PanelListenerAdapter() {
311
		this.addListener(new PanelListenerAdapter() {
255
 
312
 
256
			// lors d'un redimensionnement de l'application
313
			// lors d'un redimensionnement de l'application
257
 
314
 
258
			public void onBodyResize(Panel panel, java.lang.String width,
315
			public void onBodyResize(Panel panel, java.lang.String width,
259
					java.lang.String height) {
316
					java.lang.String height) {
260
				// on vérifie et on retaille l'image
317
				// on vérifie et on retaille l'image
261
				verifierEtRetaillerImage();
318
				verifierEtRetaillerImage();
262
			}
319
			}
263
		});
320
		});
264
 
321
 
265
		// gestion du redimensionnement lors de l'affichage du conteneur
322
		// gestion du redimensionnement lors de l'affichage du conteneur
266
		imageConteneur.addListener(new PanelListenerAdapter() {
323
		imageConteneur.addListener(new PanelListenerAdapter() {
267
 
324
 
268
			// avant de finir d'afficher
325
			// avant de finir d'afficher
269
 
326
 
270
			public void onAfterLayout(Container self) {
327
			public void onAfterLayout(Container self) {
271
				// on redimensionne
328
				// on redimensionne
272
				verifierEtRetaillerImage();
329
				verifierEtRetaillerImage();
273
			}
330
			}
274
		});
331
		});
275
 
-
 
276
	}
332
	}
277
 
333
 
278
	/**
334
	/**
279
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
335
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
280
	 * echeant
336
	 * echeant
281
	 */
337
	 */
282
	public void verifierEtRetaillerImage() {
338
	public void verifierEtRetaillerImage() {
283
		// si l'image est nulle
339
		// si l'image est nulle
284
		if (image == null) {
340
		if (image == null) {
285
			// on ne fait rien
341
			// on ne fait rien
286
			return;
342
			return;
287
		}
343
		}
288
 
344
 
289
		// on prend la taille originale de l'image
345
		// on prend la taille originale de l'image
290
		int originalX = getTailleImage()[0];
346
		int originalX = getTailleImage()[0];
291
		int originalY = getTailleImage()[1];
347
		int originalY = getTailleImage()[1];
292
 
348
 
293
		// on la transforme en float (la division entre entier donne de curieux
349
		// on la transforme en float (la division entre entier donne de curieux
294
		// résultats)
350
		// résultats)
295
		float fOriginalX = (new Float(originalX)).floatValue();
351
		float fOriginalX = (new Float(originalX)).floatValue();
296
		float fOriginalY = (new Float(originalY)).floatValue();
352
		float fOriginalY = (new Float(originalY)).floatValue();
297
 
353
 
298
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
354
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
299
		float rapportTaille = fOriginalX / fOriginalY;
355
		float rapportTaille = fOriginalX / fOriginalY;
300
 
356
 
301
		// la nouvelle taille est pour le moment égale à l'ancienne
357
		// la nouvelle taille est pour le moment égale à l'ancienne
302
		int nouvelleTailleX = originalX;
358
		int nouvelleTailleX = originalX;
303
		int nouvelleTailleY = originalY;
359
		int nouvelleTailleY = originalY;
304
 
360
 
305
		// on prend la taille du conteneur
361
		// on prend la taille du conteneur
306
		int tailleConteneurX = imageConteneur.getWidth();
362
		int tailleConteneurX = imageConteneur.getWidth();
307
		int tailleConteneurY = imageConteneur.getHeight();
363
		int tailleConteneurY = imageConteneur.getHeight();
308
 
364
 
309
		// si celle-ci est égale à 0 (conteneur mal initialisé)
365
		// si celle-ci est égale à 0 (conteneur mal initialisé)
310
		/*
366
		/*
311
		 * if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0) { // on
367
		 * if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0) { // on
312
		 * essaie de la calculer en fonction de la taille du parent et des
368
		 * essaie de la calculer en fonction de la taille du parent et des
313
		 * frères tailleConteneurY = this.getHeight() ; tailleConteneurX =
369
		 * frères tailleConteneurY = this.getHeight() ; tailleConteneurX =
314
		 * this.getWidth() - prev.getOffsetWidth() * 2 ;
370
		 * this.getWidth() - prev.getOffsetWidth() * 2 ;
315
		 *  }
371
		 *  }
316
		 */
372
		 */
317
 
373
 
318
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
374
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
319
		// grande)
375
		// grande)
320
		if (originalY > tailleConteneurY || originalX > tailleConteneurX) {
376
		if (originalY > tailleConteneurY || originalX > tailleConteneurX) {
321
			// si la longueur de l'image est la plus grande des deux
377
			// si la longueur de l'image est la plus grande des deux
322
			if (originalX > originalY) {
378
			if (originalX > originalY) {
323
				// on prend la longueur comme taille de référence, qu'on met à
379
				// on prend la longueur comme taille de référence, qu'on met à
324
				// la longueur du conteneur
380
				// la longueur du conteneur
325
				nouvelleTailleX = tailleConteneurX;
381
				nouvelleTailleX = tailleConteneurX;
326
				// et on recalcule la hauteur, par rapport à la nouvelle
382
				// et on recalcule la hauteur, par rapport à la nouvelle
327
				// longueur, en gardant le format de 'limage
383
				// longueur, en gardant le format de 'limage
328
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
384
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
329
						/ rapportTaille);
385
						/ rapportTaille);
330
			} else {
386
			} else {
331
				// si la hauteur est la plus grande, on fait le même genre
387
				// si la hauteur est la plus grande, on fait le même genre
332
				// d'opération en prenant la hauteur comme référence
388
				// d'opération en prenant la hauteur comme référence
333
				nouvelleTailleY = tailleConteneurY;
389
				nouvelleTailleY = tailleConteneurY;
334
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
390
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
335
						* rapportTaille);
391
						* rapportTaille);
336
			}
392
			}
337
		}
393
		}
338
 
394
 
339
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
395
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
340
		getImage().setSize("" + nouvelleTailleX + "px",
396
		getImage().setSize("" + nouvelleTailleX + "px",
341
				"" + nouvelleTailleY + "px");
397
				"" + nouvelleTailleY + "px");
342
	}
398
	}
-
 
399
	
-
 
400
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
-
 
401
	    
-
 
402
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
-
 
403
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
-
 
404
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
-
 
405
        float[] XYresize = new float[2];
-
 
406
        
-
 
407
        if(maxTaille == tailleXY[0]) {
-
 
408
            float rapport = tailleXYf[1]/tailleXYf[0] ;
-
 
409
            XYresize[0] = tailleOr ;
-
 
410
            XYresize[1] = tailleOr*rapport ;
-
 
411
        }else {
-
 
412
            float rapport = tailleXYf[0]/tailleXYf[1] ;
-
 
413
            XYresize[1] = tailleOr ;
-
 
414
            XYresize[0] = tailleOr*rapport ;
-
 
415
        }
-
 
416
        
-
 
417
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
-
 
418
        
-
 
419
        return res;
-
 
420
    }
343
	
421
	
344
	public void configDragAndDrop()
422
	public void configDragAndDrop()
345
	{
423
	{
346
 
424
 
347
		// on fabrique la nouvelle configuration
425
		// on fabrique la nouvelle configuration
348
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
426
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
349
		DropTargetConfig dtc = new DropTargetConfig();
427
		DropTargetConfig dtc = new DropTargetConfig();
350
		dtc.setdDdGroup("DragGroupName");
428
		dtc.setdDdGroup("DragGroupName");
351
 
429
 
352
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
430
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
353
		@SuppressWarnings("unused")
431
		@SuppressWarnings("unused")
354
		DropTarget tg = new DropTarget(this, dtc)
432
		DropTarget tg = new DropTarget(this, dtc)
355
		{
433
		{
356
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
434
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
357
				
435
				
358
				// si on reçoit des données provenant d'une grille
436
				// si on reçoit des données provenant d'une grille
359
				if(data instanceof GridDragData)
437
				if(data instanceof GridDragData)
360
		    	  {
438
		    	  {
361
		    		  		// on appelle le médiateur
439
		    		  		// on appelle le médiateur
362
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
440
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
363
		    	  }
441
		    	  }
364
				return false ;
442
				return false ;
365
			}
443
			}
366
			
444
			
367
			public String notifyOver(DragSource source, EventObject e, DragData data){
445
			public String notifyOver(DragSource source, EventObject e, DragData data){
368
			    return "x-dd-drop-ok";
446
			    return "x-dd-drop-ok";
369
			}
447
			}
370
		};
448
		};
371
        
449
        
372
	}
450
	}
373
 
451
 
374
	/**
452
	/**
375
	 * Accesseur pour le médiateur
453
	 * Accesseur pour le médiateur
376
	 * 
454
	 * 
377
	 * @return le médiateur associé à la vue
455
	 * @return le médiateur associé à la vue
378
	 */
456
	 */
379
	public ImageMediateur getIMediateur() {
457
	public ImageMediateur getIMediateur() {
380
		return iMediateur;
458
		return iMediateur;
381
	}
459
	}
382
 
460
 
383
	/**
461
	/**
384
	 * Accesseur au conteneur de l'image
462
	 * Accesseur au conteneur de l'image
385
	 * 
463
	 * 
386
	 * @return le conteneur de l'image
464
	 * @return le conteneur de l'image
387
	 */
465
	 */
388
	public Image getImage() {
466
	public Image getImage() {
389
		return image;
467
		return image;
390
	}
468
	}
391
	
469
	
392
	/**
470
	/**
393
	 * Acesseurs pour l'identifiant de l'image
471
	 * Acesseurs pour l'identifiant de l'image
394
	 * @return l'id de l'image
472
	 * @return l'id de l'image
395
	 */
473
	 */
396
	public String getIdImage()
474
	public String getIdImage()
397
	{
475
	{
398
		return idImage ;
476
		return idImage ;
399
	}
477
	}
400
 
478
 
401
	/**
479
	/**
402
	 * Accesseur pour le bouton précédent
480
	 * Accesseur pour le bouton précédent
403
	 * 
481
	 * 
404
	 * @return le bouton précédent
482
	 * @return le bouton précédent
405
	 */
483
	 */
406
	public com.google.gwt.user.client.ui.Button getPrev() {
484
	public com.google.gwt.user.client.ui.Button getPrev() {
407
		return prev;
485
		return prev;
408
	}
486
	}
409
 
487
 
410
	/**
488
	/**
411
	 * Accesseur pour le bouton suivant
489
	 * Accesseur pour le bouton suivant
412
	 * 
490
	 * 
413
	 * @return le bouton suivant
491
	 * @return le bouton suivant
414
	 */
492
	 */
415
	public com.google.gwt.user.client.ui.Button getSuiv() {
493
	public com.google.gwt.user.client.ui.Button getSuiv() {
416
		return suiv;
494
		return suiv;
417
	}
495
	}
418
 
496
 
419
	/**
497
	/**
420
	 * Setter pour la taille de l'image
498
	 * Setter pour la taille de l'image
421
	 * 
499
	 * 
422
	 * @param x
500
	 * @param x
423
	 *            la largeur en pixels
501
	 *            la largeur en pixels
424
	 * @param y
502
	 * @param y
425
	 *            la hauteur en pixels
503
	 *            la hauteur en pixels
426
	 */
504
	 */
427
	public void setTailleImage(int x, int y) {
505
	public void setTailleImage(int x, int y) {
428
		imageHeight = y;
506
		imageHeight = y;
429
		imageWidth = x;
507
		imageWidth = x;
430
	}
508
	}
431
	
509
	
432
	/**
510
	/**
433
	 * Setteur pour l'identifiant de l'image
511
	 * Setteur pour l'identifiant de l'image
434
	 * @param id le nouvel identifiant
512
	 * @param id le nouvel identifiant
435
	 */
513
	 */
436
	public void setIdImage(String id)
514
	public void setIdImage(String id)
437
	{
515
	{
438
		idImage = id ;
516
		idImage = id ;
439
	}
517
	}
440
 
518
 
441
	/**
519
	/**
442
	 * renvoie la taille originale de l'image
520
	 * renvoie la taille originale de l'image
443
	 * 
521
	 * 
444
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
522
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
445
	 */
523
	 */
446
	public int[] getTailleImage() {
524
	public int[] getTailleImage() {
447
		int[] taille = { imageHeight, imageWidth };
525
		int[] taille = { imageHeight, imageWidth };
448
 
526
 
449
		return taille;
527
		return taille;
450
	}
528
	}
451
	
529
	
452
	/**
530
	/**
453
	 * Accesseur pour le conteneur de l'image
531
	 * Accesseur pour le conteneur de l'image
454
	 * @return le conteur de l'image
532
	 * @return le conteur de l'image
455
	 */
533
	 */
456
	public Panel getImageConteneur() {
534
	public Panel getImageConteneur() {
457
 
535
 
458
		return imageConteneur;
536
		return imageConteneur;
459
 
537
 
460
	}
538
	}
461
}
539
}