Subversion Repositories eFlore/Applications.cel

Rev

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

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