Subversion Repositories eFlore/Applications.cel

Rev

Rev 241 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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