Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2627 Rev 2656
1
package org.tela_botanica.client.vues.observation.indicateurs;
1
package org.tela_botanica.client.vues.observation.indicateurs;
2
 
2
 
3
import org.tela_botanica.client.i18n.Msg;
3
import org.tela_botanica.client.i18n.Msg;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.modeles.objets.ImageCarnet;
5
import org.tela_botanica.client.modeles.objets.ImageCarnet;
6
import org.tela_botanica.client.observation.ObservationMediateur;
6
import org.tela_botanica.client.observation.ObservationMediateur;
7
 
7
 
8
import com.google.gwt.event.dom.client.ClickEvent;
8
import com.google.gwt.event.dom.client.ClickEvent;
9
import com.google.gwt.event.dom.client.ClickHandler;
9
import com.google.gwt.event.dom.client.ClickHandler;
10
import com.google.gwt.event.dom.client.LoadEvent;
10
import com.google.gwt.event.dom.client.LoadEvent;
11
import com.google.gwt.event.dom.client.LoadHandler;
11
import com.google.gwt.event.dom.client.LoadHandler;
12
import com.google.gwt.user.client.DOM;
12
import com.google.gwt.user.client.DOM;
13
import com.google.gwt.user.client.Event;
13
import com.google.gwt.user.client.Event;
14
import com.google.gwt.user.client.Window;
14
import com.google.gwt.user.client.Window;
-
 
15
import com.google.gwt.user.client.ui.HTML;
15
import com.google.gwt.user.client.ui.Image;
16
import com.google.gwt.user.client.ui.Image;
16
import com.gwtext.client.core.AnimationConfig;
17
import com.gwtext.client.core.AnimationConfig;
17
import com.gwtext.client.core.EventObject;
18
import com.gwtext.client.core.EventObject;
18
import com.gwtext.client.core.Ext;
19
import com.gwtext.client.core.Ext;
19
import com.gwtext.client.core.ExtElement;
20
import com.gwtext.client.core.ExtElement;
20
import com.gwtext.client.core.RegionPosition;
21
import com.gwtext.client.core.RegionPosition;
21
import com.gwtext.client.widgets.Panel;
22
import com.gwtext.client.widgets.Panel;
22
import com.gwtext.client.widgets.ToolTip;
23
import com.gwtext.client.widgets.ToolTip;
23
import com.gwtext.client.widgets.layout.BorderLayout;
24
import com.gwtext.client.widgets.layout.BorderLayout;
24
import com.gwtext.client.widgets.layout.BorderLayoutData;
25
import com.gwtext.client.widgets.layout.BorderLayoutData;
25
import com.gwtext.client.widgets.menu.BaseItem;
26
import com.gwtext.client.widgets.menu.BaseItem;
26
import com.gwtext.client.widgets.menu.Item;
27
import com.gwtext.client.widgets.menu.Item;
27
import com.gwtext.client.widgets.menu.Menu;
28
import com.gwtext.client.widgets.menu.Menu;
28
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
29
import com.gwtext.client.widgets.menu.event.MenuListenerAdapter;
29
 
30
 
30
/**
31
/**
31
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
32
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
32
 * 
33
 * 
33
 * @author aurelien
34
 * @author aurelien
34
 * 
35
 * 
35
 */
36
 */
36
public class MiniZoomImageVue extends Panel implements Rafraichissable {
37
public class MiniZoomImageVue extends Panel implements Rafraichissable {
37
 
38
 
38
	/**
39
	/**
39
	 * Le médiateur associé à la vue
40
	 * Le médiateur associé à la vue
40
	 */
41
	 */
41
	private ObservationMediateur oMediateur = null;
42
	private ObservationMediateur oMediateur = null;
42
	
43
	
43
	/**
44
	/**
44
	 * Le titre du panneau
45
	 * Le titre du panneau
45
	 */
46
	 */
46
	private static String titrePanneau = Msg.get("images-liees");
47
	private static String titrePanneau = Msg.get("images-liees");
47
 
48
 
48
	/**
49
	/**
49
	 * Panneau conteneur pour l'image
50
	 * Panneau conteneur pour l'image
50
	 */
51
	 */
51
	private Panel imageConteneur = null;
52
	private Panel imageConteneur = null;
52
	/**
53
	/**
53
	 * l'image à afficher
54
	 * l'image à afficher
54
	 */
55
	 */
55
	private Image image = new Image("");
56
	private Image image = new Image("");
56
	/**
57
	/**
57
	 * Bouton précédent
58
	 * Bouton précédent
58
	 */
59
	 */
59
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
60
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
60
	/**
61
	/**
61
	 * Bouton suivant
62
	 * Bouton suivant
62
	 */
63
	 */
63
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
64
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
64
 
65
 
65
	/**
66
	/**
66
	 * Taille originale Y de l'image
67
	 * Taille originale Y de l'image
67
	 */
68
	 */
68
	private int imageHeight = 0;
69
	private int imageHeight = 0;
69
 
70
 
70
	/**
71
	/**
71
	 * Taille originale X de l'image
72
	 * Taille originale X de l'image
72
	 */
73
	 */
73
	private int imageWidth = 0;
74
	private int imageWidth = 0;
74
	
75
	
75
	/**
76
	/**
76
	 * Identifiant de l'image
77
	 * Identifiant de l'image
77
	 */
78
	 */
78
	private String idImage = "0" ;
79
	private String idImage = "0" ;
79
	
80
	
80
	private String[] infosImages[] = null ;
81
	private String[] infosImages[] = null ;
81
	
82
	
82
	private int index = 0 ;
83
	private int index = 0 ;
83
 
84
 
84
	/**
85
	/**
85
	 * true pour animer les transitions
86
	 * true pour animer les transitions
86
	 */
87
	 */
87
	private boolean animerTransition = false;
88
	private boolean animerTransition = false;
88
	/**
89
	/**
89
	 * Détermine la durée de la transition
90
	 * Détermine la durée de la transition
90
	 */
91
	 */
91
	private float dureeAnimation = (float) 0.15;
92
	private float dureeAnimation = (float) 0.15;
92
	
93
	
93
	/**
94
	/**
94
	 * Booleen d'initalisation général
95
	 * Booleen d'initalisation général
95
	 */
96
	 */
96
	private boolean initialise = false;
97
	private boolean initialise = false;
97
 
98
 
98
	/**
99
	/**
99
	 * Booleen d'initalisation du conteneur d'image
100
	 * Booleen d'initalisation du conteneur d'image
100
	 */
101
	 */
101
	private boolean conteneurInitialise = false;
102
	private boolean conteneurInitialise = false;
102
	
103
	
103
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> " + Msg.get("double-clic-agrandir") + " </div>") ;
104
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> " + Msg.get("double-clic-agrandir") + " </div>") ;
104
	
105
	
105
	com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window(Msg.get("agrandissement")) ;
106
	com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window(Msg.get("agrandissement")) ;
106
	
107
	
107
	Image imgAgrandie = null;
108
	Image imgAgrandie = null;
-
 
109
	
-
 
110
	private HTML htmlVide = new HTML();
108
 
111
 
109
	/**
112
	/**
110
	 * Constructeur sans argument (privé car ne doit être utilisé)
113
	 * Constructeur sans argument (privé car ne doit être utilisé)
111
	 */
114
	 */
112
	@SuppressWarnings("unused")
115
	@SuppressWarnings("unused")
113
	private MiniZoomImageVue() {
116
	private MiniZoomImageVue() {
114
		super();
117
		super();
115
	}
118
	}
116
 
119
 
117
	/**
120
	/**
118
	 * Constructeur avec argument
121
	 * Constructeur avec argument
119
	 * 
122
	 * 
120
	 * @param im
123
	 * @param im
121
	 *            le médiateur à associer à la vue
124
	 *            le médiateur à associer à la vue
122
	 */
125
	 */
123
	public MiniZoomImageVue(ObservationMediateur im) {
126
	public MiniZoomImageVue(ObservationMediateur im) {
124
		super(titrePanneau);
127
		super(titrePanneau);
125
		setId("x-view-mini-zoom-panel");
128
		setId("x-view-mini-zoom-panel");
126
		// on associe le médiateur
129
		// on associe le médiateur
127
		oMediateur = im;
130
		oMediateur = im;
128
 
131
 
129
		prev.setStylePrimaryName("x-view-zoom-button-p");
132
		prev.setStylePrimaryName("x-view-zoom-button-p");
130
		suiv.setStylePrimaryName("x-view-zoom-button-s");
133
		suiv.setStylePrimaryName("x-view-zoom-button-s");
131
 
134
 
132
		imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;
135
		imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;
133
		imgZoom.setConstrain(true);
136
		imgZoom.setConstrain(true);
134
		
137
		
135
		// on crée une image qui gère le double clic et la roulette de la souris
138
		// on crée une image qui gère le double clic et la roulette de la souris
136
		image = new Image() {
139
		image = new Image() {
137
 
140
 
138
			@Override
141
			@Override
139
			public void onBrowserEvent(Event event) {
142
			public void onBrowserEvent(Event event) {
140
 
143
 
141
				// lors d'un déplacement de la roulette
144
				// lors d'un déplacement de la roulette
142
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
145
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
143
 
146
 
144
					// on simule un clic sur le bouton précédent
147
					// on simule un clic sur le bouton précédent
145
					if (event.getMouseWheelVelocityY() >= 1) {
148
					if (event.getMouseWheelVelocityY() >= 1) {
146
						prev.click();
149
						prev.click();
147
					}
150
					}
148
 
151
 
149
					// ou suivant
152
					// ou suivant
150
					if (event.getMouseWheelVelocityY() <= -1) {
153
					if (event.getMouseWheelVelocityY() <= -1) {
151
						suiv.click();
154
						suiv.click();
152
					}
155
					}
153
				}
156
				}
154
				
157
				
155
				if(Event.ONCONTEXTMENU == DOM.eventGetType(event)) {
158
				if(Event.ONCONTEXTMENU == DOM.eventGetType(event)) {
156
					
159
					
157
					event.preventDefault() ;
160
					event.preventDefault() ;
158
					int[] xy = {event.getClientX(),event.getClientY()} ;
161
					int[] xy = {event.getClientX(),event.getClientY()} ;
159
					afficherMenu(xy) ;
162
					afficherMenu(xy) ;
160
				}
163
				}
161
				
164
				
162
				// lors du double clic
165
				// lors du double clic
163
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
166
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
164
					if(imgZoom.isVisible()) {
167
					if(imgZoom.isVisible()) {
165
							imgZoom.hide();
168
							imgZoom.hide();
166
					} else {
169
					} else {
167
						afficherPanneauAgrandi();
170
						afficherPanneauAgrandi();
168
					}
171
					}
169
				}
172
				}
170
			}
173
			}
171
			
174
			
172
		};
175
		};
173
		
176
		
174
		image.setPixelSize(150, 150);
177
		image.setPixelSize(150, 150);
175
		
178
		
176
		infosImages = new String[0][0] ;
179
		infosImages = new String[0][0] ;
177
 
180
 
178
		this.setHeader(true);
181
		this.setHeader(true);
179
 
182
 
180
		imageConteneur = new Panel() ;
183
		imageConteneur = new Panel() ;
181
		imageConteneur.setBorder(false);
184
		imageConteneur.setBorder(false);
182
 
185
 
183
		imageConteneur.add(image);
186
		imageConteneur.add(image);
184
		imageConteneur.setId("x-view-mini-zoom-img");
187
		imageConteneur.setId("x-view-mini-zoom-img");
-
 
188
		imageConteneur.add(htmlVide);
185
 
189
 
186
		// il n'existe pas de méthode pour ajouter un listener pour le double
190
		// il n'existe pas de méthode pour ajouter un listener pour le double
187
		// clic sur une image
191
		// clic sur une image
188
		// alors on lui dit manuellement de capter l'évènement double clic
192
		// alors on lui dit manuellement de capter l'évènement double clic
189
		image.sinkEvents(Event.ONDBLCLICK);
193
		image.sinkEvents(Event.ONDBLCLICK);
190
		image.sinkEvents(Event.ONMOUSEWHEEL);
194
		image.sinkEvents(Event.ONMOUSEWHEEL);
191
		image.sinkEvents(Event.ONCONTEXTMENU) ;
195
		image.sinkEvents(Event.ONCONTEXTMENU) ;
192
 
-
 
193
		// l'image de base est vide
-
 
194
		image.setUrl("");
-
 
195
 
196
 
196
		this.setLayout(new BorderLayout());
197
		this.setLayout(new BorderLayout());
197
 
198
 
198
		prev.setWidth("15%");
199
		prev.setWidth("15%");
199
		suiv.setWidth("15%");
200
		suiv.setWidth("15%");
200
 
201
 
201
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
202
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
202
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
203
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
203
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
204
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
204
 
205
 
205
		imageConteneur.setMaskDisabled(true);
206
		imageConteneur.setMaskDisabled(true);
206
		this.setBorder(false);
207
		this.setBorder(false);
207
 
208
 
208
		conteneurInitialise = true;
209
		conteneurInitialise = true;
209
		initialise = true;
210
		initialise = true;
-
 
211
 
-
 
212
		image.setVisible(false);
-
 
213
		
210
 
214
		afficherImageSinonAfficherMessage(false);
211
		// on ajoute les listeners
215
		// on ajoute les listeners
212
		ajouterListeners();
216
		ajouterListeners();
213
 
217
 
214
	}
218
	}
215
 
219
 
216
	/**
220
	/**
217
	 * Méthode héritée de l'interface rafraichissable
221
	 * Méthode héritée de l'interface rafraichissable
218
	 * 
222
	 * 
219
	 * @param nouvelleDonnees
223
	 * @param nouvelleDonnees
220
	 *            les nouvelles données
224
	 *            les nouvelles données
221
	 * @param repandreRafraichissement
225
	 * @param repandreRafraichissement
222
	 *            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
223
	 */
227
	 */
224
	@Override
228
	@Override
225
	public void rafraichir(Object nouvelleDonnees,
229
	public void rafraichir(Object nouvelleDonnees,
226
			boolean repandreRafraichissement) {
230
			boolean repandreRafraichissement) {
227
 
231
 
228
		// si on reçoit une string
232
		// si on reçoit une string
229
		if (nouvelleDonnees instanceof String[][] && initialise
233
		if (nouvelleDonnees instanceof String[][] && initialise
230
				&& conteneurInitialise && ((String[][])nouvelleDonnees).length != 0) {
234
				&& conteneurInitialise && ((String[][])nouvelleDonnees).length != 0) {
231
			infosImages = (String[][]) nouvelleDonnees;
235
			infosImages = (String[][]) nouvelleDonnees;
232
			index = 0 ;
236
			index = 0 ;
-
 
237
			afficherImageSinonAfficherMessage(true);
233
			afficherImage() ;
238
			afficherImage() ;
234
			
-
 
235
		} else {
239
		} else {
236
			// sinon on met une image vide
-
 
237
			infosImages = null ;
-
 
238
			afficherImage();
-
 
-
 
240
			
239
			
241
			afficherImageSinonAfficherMessage(false);
240
		}
242
		}
241
	}
243
	}
242
 
244
 
243
	public void afficherImage()
245
	public void afficherImage()
244
	{
246
	{
245
		// c'est l'url de l'image qu'on associe à la vue
247
		// c'est l'url de l'image qu'on associe à la vue
246
		if(infosImages != null && infosImages.length != 0)
248
		if(infosImages != null && infosImages.length != 0)
247
		{
249
		{
248
			setTitle(titrePanneau+"         "+(index+1)+" / "+infosImages.length);
250
			setTitle(titrePanneau+"         "+(index+1)+" / "+infosImages.length);		
249
			
-
 
250
			getImage().setUrl(getUrlMiniature(index));
251
			getImage().setUrl(getUrlMiniature(index));
251
			imageWidth = Integer.parseInt(infosImages[index][1]);
252
			imageWidth = Integer.parseInt(infosImages[index][1]);
252
			imageHeight = Integer.parseInt(infosImages[index][2]);
253
			imageHeight = Integer.parseInt(infosImages[index][2]);
253
			verifierEtRetaillerImage();
254
			verifierEtRetaillerImage();
254
			activerPanneau(true);
255
			activerPanneau(true);
255
		} else {
-
 
256
			setTitle(titrePanneau);
-
 
257
			getImage().setUrl("ill_liaison.png");
-
 
258
			imageWidth = getImage().getWidth();
-
 
259
			imageHeight = getImage().getHeight();
-
 
260
			if(imgZoom.isVisible()) {
-
 
261
				agrandirImage();
-
 
262
			}
-
 
263
			activerPanneau(false);
-
 
264
		}
256
		}
265
		
257
		
266
		if(infosImages != null && infosImages.length > 1) {
258
		if(infosImages != null && infosImages.length > 1) {
267
			prev.setEnabled(true);
259
			prev.setEnabled(true);
268
			suiv.setEnabled(true);
260
			suiv.setEnabled(true);
269
		} else {
261
		} else {
270
			prev.setEnabled(false);
262
			prev.setEnabled(false);
271
			suiv.setEnabled(false);
263
			suiv.setEnabled(false);
272
		}
264
		}
273
	}
265
	}
-
 
266
	
-
 
267
	private void afficherImageSinonAfficherMessage(boolean afficherImage) {
-
 
268
		if(afficherImage) {
-
 
269
			htmlVide.setVisible(false);
-
 
270
		} else {
-
 
271
			setTitle(Msg.get("aucune-image-liee"));
-
 
272
			afficherHtmlVide();
-
 
273
		}
-
 
274
		image.setVisible(afficherImage);
-
 
275
	}
-
 
276
	
-
 
277
	
-
 
278
	private void afficherHtmlVide() {  
-
 
279
		String htmlDivVide = "<div class=\"aucune_image_pour\"> "+Msg.get("aucune-image-liee")+"</div>";
-
 
280
		htmlVide.setHeight("150px");
-
 
281
		htmlVide.setHTML(htmlDivVide);
-
 
282
		htmlVide.setVisible(true);
-
 
283
	}
274
 
284
 
275
	/**
285
	/**
276
	 * Active visuellement le panneau et les boutons
286
	 * Active visuellement le panneau et les boutons
277
	 */
287
	 */
278
	public void activerPanneau(boolean activer) {
288
	public void activerPanneau(boolean activer) {
279
		if(activer) {
289
		if(activer) {
280
			this.getEl().unmask();
290
			this.getEl().unmask();
281
		} else {
291
		} else {
282
			this.getEl().mask();
292
			this.getEl().mask();
283
		}
293
		}
284
	}
294
	}
285
 
295
 
286
	/**
296
	/**
287
	 * Ajoute les listeners pour la gestions d'évènement
297
	 * Ajoute les listeners pour la gestions d'évènement
288
	 */
298
	 */
289
	public void ajouterListeners() {
299
	public void ajouterListeners() {
290
 
300
 
291
		// gestion du clic sur le bouton précedent
301
		// gestion du clic sur le bouton précedent
292
		prev.addClickHandler(new ClickHandler() {
302
		prev.addClickHandler(new ClickHandler() {
293
 
303
 
294
			@Override
304
			@Override
295
			public void onClick(ClickEvent event) {
305
			public void onClick(ClickEvent event) {
296
				if(infosImages.length != 0) {
306
				if(infosImages.length != 0) {
297
					if(index == 0)
307
					if(index == 0)
298
					{
308
					{
299
						index = infosImages.length - 1 ;
309
						index = infosImages.length - 1 ;
300
					}
310
					}
301
					else
311
					else
302
					{
312
					{
303
						index-- ;
313
						index-- ;
304
					}
314
					}
305
									
315
									
306
					afficherImage() ;
316
					afficherImage() ;
307
				}
317
				}
308
			}
318
			}
309
 
319
 
310
		});
320
		});
311
 
321
 
312
		// gestion du clic sur le bouton suivant
322
		// gestion du clic sur le bouton suivant
313
		suiv.addClickHandler(new ClickHandler() {
323
		suiv.addClickHandler(new ClickHandler() {
314
 
324
 
315
			// en cas de clic
325
			// en cas de clic
316
			@Override
326
			@Override
317
			public void onClick(ClickEvent event) {
327
			public void onClick(ClickEvent event) {
318
				
328
				
319
				if(infosImages.length != 0) {
329
				if(infosImages.length != 0) {
320
					if(index == infosImages.length - 1)
330
					if(index == infosImages.length - 1)
321
					{
331
					{
322
						index = 0 ;
332
						index = 0 ;
323
					}
333
					}
324
					else
334
					else
325
					{
335
					{
326
						index++ ;
336
						index++ ;
327
					}
337
					}
328
									
338
									
329
					afficherImage() ;
339
					afficherImage() ;
330
				}
340
				}
331
					
341
					
332
			}
342
			}
333
 
343
 
334
		});
344
		});
335
		
345
		
336
	}
346
	}
337
 
347
 
338
	/**
348
	/**
339
	 * Accesseur pour le médiateur
349
	 * Accesseur pour le médiateur
340
	 * 
350
	 * 
341
	 * @return le médiateur associé à la vue
351
	 * @return le médiateur associé à la vue
342
	 */
352
	 */
343
	public ObservationMediateur getIMediateur() {
353
	public ObservationMediateur getIMediateur() {
344
		return oMediateur;
354
		return oMediateur;
345
	}
355
	}
346
 
356
 
347
	/**
357
	/**
348
	 * Accesseur au conteneur de l'image
358
	 * Accesseur au conteneur de l'image
349
	 * 
359
	 * 
350
	 * @return le conteneur de l'image
360
	 * @return le conteneur de l'image
351
	 */
361
	 */
352
	public Image getImage() {
362
	public Image getImage() {
353
		return image;
363
		return image;
354
	}
364
	}
355
	
365
	
356
	/**
366
	/**
357
	 * Acesseurs pour l'identifiant de l'image
367
	 * Acesseurs pour l'identifiant de l'image
358
	 * @return l'id de l'image
368
	 * @return l'id de l'image
359
	 */
369
	 */
360
	public String getIdImage()
370
	public String getIdImage()
361
	{
371
	{
362
		return infosImages[index][0] ;
372
		return infosImages[index][0] ;
363
	}
373
	}
364
 
374
 
365
	/**
375
	/**
366
	 * Accesseur pour le bouton précédent
376
	 * Accesseur pour le bouton précédent
367
	 * 
377
	 * 
368
	 * @return le bouton précédent
378
	 * @return le bouton précédent
369
	 */
379
	 */
370
	public com.google.gwt.user.client.ui.Button getPrev() {
380
	public com.google.gwt.user.client.ui.Button getPrev() {
371
		return prev;
381
		return prev;
372
	}
382
	}
373
 
383
 
374
	/**
384
	/**
375
	 * Accesseur pour le bouton suivant
385
	 * Accesseur pour le bouton suivant
376
	 * 
386
	 * 
377
	 * @return le bouton suivant
387
	 * @return le bouton suivant
378
	 */
388
	 */
379
	public com.google.gwt.user.client.ui.Button getSuiv() {
389
	public com.google.gwt.user.client.ui.Button getSuiv() {
380
		return suiv;
390
		return suiv;
381
	}
391
	}
382
 
392
 
383
	/**
393
	/**
384
	 * Setter pour la taille de l'image
394
	 * Setter pour la taille de l'image
385
	 * 
395
	 * 
386
	 * @param x
396
	 * @param x
387
	 *            la largeur en pixels
397
	 *            la largeur en pixels
388
	 * @param y
398
	 * @param y
389
	 *            la hauteur en pixels
399
	 *            la hauteur en pixels
390
	 */
400
	 */
391
	public void setTailleImage(int x, int y) {
401
	public void setTailleImage(int x, int y) {
392
		imageHeight = y;
402
		imageHeight = y;
393
		imageWidth = x;
403
		imageWidth = x;
394
	}
404
	}
395
	
405
	
396
	/**
406
	/**
397
	 * Setteur pour l'identifiant de l'image
407
	 * Setteur pour l'identifiant de l'image
398
	 * @param id le nouvel identifiant
408
	 * @param id le nouvel identifiant
399
	 */
409
	 */
400
	public void setIdImage(String id)
410
	public void setIdImage(String id)
401
	{
411
	{
402
		idImage = id ;
412
		idImage = id ;
403
	}
413
	}
404
 
414
 
405
	/**
415
	/**
406
	 * renvoie la taille originale de l'image
416
	 * renvoie la taille originale de l'image
407
	 * 
417
	 * 
408
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
418
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
409
	 */
419
	 */
410
	public int[] getTailleImage() {
420
	public int[] getTailleImage() {
411
		int[] taille = { imageHeight, imageWidth };
421
		int[] taille = { imageHeight, imageWidth };
412
 
422
 
413
		return taille;
423
		return taille;
414
	}
424
	}
415
	
425
	
416
	/**
426
	/**
417
	 * Accesseur pour le conteneur de l'image
427
	 * Accesseur pour le conteneur de l'image
418
	 * @return le conteur de l'image
428
	 * @return le conteur de l'image
419
	 */
429
	 */
420
	public Panel getImageConteneur() {
430
	public Panel getImageConteneur() {
421
 
431
 
422
		return imageConteneur;
432
		return imageConteneur;
423
 
433
 
424
	}
434
	}
425
 
435
 
426
	public void raz() {
436
	public void raz() {
427
		
437
		
428
		infosImages = new String[0][0] ;
438
		infosImages = new String[0][0] ;
429
		getImage().setUrl("");
439
		getImage().setUrl("");
430
		
440
		
431
	}
441
	}
432
	
442
	
433
	public void supprimerLiaisonImage() {
443
	public void supprimerLiaisonImage() {
434
		
444
		
435
		if(infosImages.length > 0) {
445
		if(infosImages.length > 0) {
436
			
446
			
437
			getImage().setUrl("") ;
447
			getImage().setUrl("") ;
438
			int nouvelleTaille = infosImages.length - 1 ;
448
			int nouvelleTaille = infosImages.length - 1 ;
439
			int indexSupp = index ;
449
			int indexSupp = index ;
440
			
450
			
441
			String[][] nouveauInfosImages = new String[nouvelleTaille][3] ;
451
			String[][] nouveauInfosImages = new String[nouvelleTaille][3] ;
442
			int j = 0 ;
452
			int j = 0 ;
443
			
453
			
444
			for(int i = 0 ; i < infosImages.length ; i++) {
454
			for(int i = 0 ; i < infosImages.length ; i++) {
445
				
455
				
446
				if(i != indexSupp) {
456
				if(i != indexSupp) {
447
					
457
					
448
					nouveauInfosImages[j] = infosImages[i] ;
458
					nouveauInfosImages[j] = infosImages[i] ;
449
					j++ ;
459
					j++ ;
450
				}
460
				}
451
			}
461
			}
452
			
462
			
453
			infosImages = nouveauInfosImages ;
463
			infosImages = nouveauInfosImages ;
454
			index = 0 ;
464
			index = 0 ;
455
			
465
			
456
			afficherImage() ;
466
			afficherImage() ;
457
		}
467
		}
458
	}
468
	}
459
	
469
	
460
	public void afficherMenu(int[] xy) {
470
	public void afficherMenu(int[] xy) {
461
		
471
		
462
		Menu mn = new Menu() ;
472
		Menu mn = new Menu() ;
463
		final Item suppLiaison = new Item(Msg.get("supprimer-liaison"));
473
		final Item suppLiaison = new Item(Msg.get("supprimer-liaison"));
464
		
474
		
465
		mn.addItem(suppLiaison) ;
475
		mn.addItem(suppLiaison) ;
466
		
476
		
467
		mn.addListener(new MenuListenerAdapter() {
477
		mn.addListener(new MenuListenerAdapter() {
468
			
478
			
469
			@Override
479
			@Override
470
			public void onItemClick(BaseItem item, EventObject e) {
480
			public void onItemClick(BaseItem item, EventObject e) {
471
				
481
				
472
				// si c'est l'aide
482
				// si c'est l'aide
473
				if (item.equals(suppLiaison)) {
483
				if (item.equals(suppLiaison)) {
474
					// on notifie le médiateur
484
					// on notifie le médiateur
475
					getIMediateur().supprimerLiaisonObsImage() ;
485
					getIMediateur().supprimerLiaisonObsImage() ;
476
				}
486
				}
477
			}
487
			}
478
			
488
			
479
		}) ;
489
		}) ;
480
		
490
		
481
		mn.showAt(xy) ;
491
		mn.showAt(xy) ;
482
	}
492
	}
483
		
493
		
484
	/**
494
	/**
485
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
495
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
486
	 * echeant
496
	 * echeant
487
	 */
497
	 */
488
	public void verifierEtRetaillerImage() {
498
	public void verifierEtRetaillerImage() {
489
		
499
		
490
		// si l'image est nulle
500
		// si l'image est nulle
491
		if (image == null) {
501
		if (image == null) {
492
			// on ne fait rien
502
			// on ne fait rien
493
			return;
503
			return;
494
		}
504
		}
495
		
505
		
496
		int[] dim = calculerDimensions(getTailleImage(),300,imageConteneur.getWidth());
506
		int[] dim = calculerDimensions(getTailleImage(),300,imageConteneur.getWidth());
497
		getImage().setSize("" + dim[0] + "px",
507
		getImage().setSize("" + dim[0] + "px",
498
				"" + dim[1] + "px");
508
				"" + dim[1] + "px");
499
		
509
		
500
		doLayout();
510
		doLayout();
501
		
511
		
502
		if(imgZoom.isVisible()) {
512
		if(imgZoom.isVisible()) {
503
			agrandirImage();
513
			agrandirImage();
504
		}
514
		}
505
	}
515
	}
506
	
516
	
507
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
517
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
508
	    
518
	    
509
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
519
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
510
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
520
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
511
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
521
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
512
        float[] XYresize = new float[2];
522
        float[] XYresize = new float[2];
513
        
523
        
514
        if(maxTaille == tailleXY[0]) {
524
        if(maxTaille == tailleXY[0]) {
515
            float rapport = tailleXYf[1]/tailleXYf[0] ;
525
            float rapport = tailleXYf[1]/tailleXYf[0] ;
516
            XYresize[0] = tailleOr ;
526
            XYresize[0] = tailleOr ;
517
            XYresize[1] = tailleOr*rapport ;
527
            XYresize[1] = tailleOr*rapport ;
518
        }else {
528
        }else {
519
            float rapport = tailleXYf[0]/tailleXYf[1] ;
529
            float rapport = tailleXYf[0]/tailleXYf[1] ;
520
            XYresize[1] = tailleOr ;
530
            XYresize[1] = tailleOr ;
521
            XYresize[0] = tailleOr*rapport ;
531
            XYresize[0] = tailleOr*rapport ;
522
        }
532
        }
523
        
533
        
524
        int[] res = {(int)Math.round(XYresize[0]*0.85),(int)Math.round(XYresize[1]*0.85)} ;
534
        int[] res = {(int)Math.round(XYresize[0]*0.85),(int)Math.round(XYresize[1]*0.85)} ;
525
        
535
        
526
        return res;
536
        return res;
527
    }
537
    }
528
	
538
	
529
	protected void agrandirImage() {
539
	protected void agrandirImage() {
530
		
540
		
531
			String urlAgrandie = "";
541
			String urlAgrandie = "";
532
			
542
			
533
			if(infosImages == null) {
543
			if(infosImages == null) {
534
				urlAgrandie = "ill_liaison.png";
544
				urlAgrandie = "ill_liaison.png";
535
				setTailleImage(265, 270);
545
				setTailleImage(265, 270);
536
			} else {
546
			} else {
537
				urlAgrandie = getUrlAgrandie(index);
547
				urlAgrandie = getUrlAgrandie(index);
538
			}
548
			}
539
			
549
			
540
			if(imgAgrandie == null) {
550
			if(imgAgrandie == null) {
541
				imgAgrandie = new Image(urlAgrandie); 
551
				imgAgrandie = new Image(urlAgrandie); 
542
				imgZoom.add(imgAgrandie);
552
				imgZoom.add(imgAgrandie);
543
				
553
				
544
				imgAgrandie.addLoadHandler(new LoadHandler() {
554
				imgAgrandie.addLoadHandler(new LoadHandler() {
545
 
555
 
546
					@Override
556
					@Override
547
					public void onLoad(LoadEvent event) {
557
					public void onLoad(LoadEvent event) {
548
						int[] tailleImage = calculerDimensions(getTailleImage(),getTailleImage()[1],Window.getClientHeight()*0.75);
558
						int[] tailleImage = calculerDimensions(getTailleImage(),getTailleImage()[1],Window.getClientHeight()*0.75);
549
						ExtElement imgElement = Ext.get(imgAgrandie.getElement());
559
						ExtElement imgElement = Ext.get(imgAgrandie.getElement());
550
						if(animerTransition) {
560
						if(animerTransition) {
551
							AnimationConfig a = new AnimationConfig() ;
561
							AnimationConfig a = new AnimationConfig() ;
552
							a.setDuration(dureeAnimation);
562
							a.setDuration(dureeAnimation);
553
							imgElement.setHeight(tailleImage[1], a);
563
							imgElement.setHeight(tailleImage[1], a);
554
							imgElement.setWidth(tailleImage[0], a);
564
							imgElement.setWidth(tailleImage[0], a);
555
							
565
							
556
							ExtElement winElement = Ext.get(imgZoom.getElement());
566
							ExtElement winElement = Ext.get(imgZoom.getElement());
557
							winElement.setHeight(tailleImage[1], a);
567
							winElement.setHeight(tailleImage[1], a);
558
							winElement.setWidth(tailleImage[0], a);
568
							winElement.setWidth(tailleImage[0], a);
559
						} else {
569
						} else {
560
							imgElement.setHeight(tailleImage[1], false);
570
							imgElement.setHeight(tailleImage[1], false);
561
							imgElement.setWidth(tailleImage[0], false);
571
							imgElement.setWidth(tailleImage[0], false);
562
							
572
							
563
							ExtElement winElement = Ext.get(imgZoom.getElement());
573
							ExtElement winElement = Ext.get(imgZoom.getElement());
564
							winElement.setHeight(tailleImage[1], false);
574
							winElement.setHeight(tailleImage[1], false);
565
							winElement.setWidth(tailleImage[0], false);
575
							winElement.setWidth(tailleImage[0], false);
566
						}
576
						}
567
					}
577
					}
568
					
578
					
569
				});
579
				});
570
				
580
				
571
			} else {
581
			} else {
572
				imgAgrandie.setUrl(urlAgrandie);
582
				imgAgrandie.setUrl(urlAgrandie);
573
				imgAgrandie.setVisible(true);
583
				imgAgrandie.setVisible(true);
574
			}
584
			}
575
	}
585
	}
576
	
586
	
577
	private String getUrlMiniature(int index) {
587
	private String getUrlMiniature(int index) {
578
		
588
		
579
		String[][] paramsImage = {{"id_image",infosImages[index][0]}};
589
		String[][] paramsImage = {{"id_image",infosImages[index][0]}};
580
		ImageCarnet ic = new ImageCarnet(paramsImage);
590
		ImageCarnet ic = new ImageCarnet(paramsImage);
581
		
591
		
582
		return ic.getUrlFormatGalerie();
592
		return ic.getUrlFormatGalerie();
583
	}
593
	}
584
	
594
	
585
	private String getUrlAgrandie(int index) {
595
	private String getUrlAgrandie(int index) {
586
		String[][] paramsImage = {{"id_image",infosImages[index][0]}};
596
		String[][] paramsImage = {{"id_image",infosImages[index][0]}};
587
		ImageCarnet ic = new ImageCarnet(paramsImage);
597
		ImageCarnet ic = new ImageCarnet(paramsImage);
588
		
598
		
589
		return ic.getUrlFormatZoom();
599
		return ic.getUrlFormatZoom();
590
	}
600
	}
591
	
601
	
592
	private void afficherPanneauAgrandi() {
602
	private void afficherPanneauAgrandi() {
593
		agrandirImage();
603
		agrandirImage();
594
		imgZoom.show(this.getElement());
604
		imgZoom.show(this.getElement());
595
		imgZoom.setPosition((int)(Window.getClientWidth() - Window.getClientWidth()*0.50),(int)(Window.getClientHeight() - Window.getClientHeight()*0.85));
605
		imgZoom.setPosition((int)(Window.getClientWidth() - Window.getClientWidth()*0.50),(int)(Window.getClientHeight() - Window.getClientHeight()*0.85));
596
	}
606
	}
597
}
607
}
598
 
608