Subversion Repositories eFlore/Applications.cel

Rev

Rev 199 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 199 Rev 213
Line 4... Line 4...
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;
Line 6... Line 6...
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.ui.ClickListener;
10
import com.google.gwt.user.client.ui.ClickListener;
-
 
11
import com.google.gwt.user.client.ui.Image;
10
import com.google.gwt.user.client.ui.Image;
12
import com.google.gwt.user.client.ui.LoadListener;
-
 
13
import com.google.gwt.user.client.ui.Widget;
11
import com.google.gwt.user.client.ui.Widget;
14
import com.gwtext.client.core.AnimationConfig;
-
 
15
import com.gwtext.client.core.EventObject;
-
 
16
import com.gwtext.client.core.Ext;
12
import com.gwtext.client.core.EventObject;
17
import com.gwtext.client.core.ExtElement;
13
import com.gwtext.client.core.RegionPosition;
18
import com.gwtext.client.core.RegionPosition;
-
 
19
import com.gwtext.client.widgets.Panel;
14
import com.gwtext.client.widgets.Panel;
20
import com.gwtext.client.widgets.ToolTip;
15
import com.gwtext.client.widgets.layout.BorderLayout;
21
import com.gwtext.client.widgets.layout.BorderLayout;
16
import com.gwtext.client.widgets.layout.BorderLayoutData;
22
import com.gwtext.client.widgets.layout.BorderLayoutData;
17
import com.gwtext.client.widgets.menu.BaseItem;
23
import com.gwtext.client.widgets.menu.BaseItem;
18
import com.gwtext.client.widgets.menu.Item;
24
import com.gwtext.client.widgets.menu.Item;
Line 62... Line 68...
62
	/**
68
	/**
63
	 * Identifiant de l'image
69
	 * Identifiant de l'image
64
	 */
70
	 */
65
	private String idImage = "0" ;
71
	private String idImage = "0" ;
Line 66... Line 72...
66
	
72
	
Line 67... Line 73...
67
	private String[] infosImages = null ;
73
	private String[] infosImages[] = null ;
Line 68... Line 74...
68
	
74
	
-
 
75
	private int index = 0 ;
-
 
76
 
-
 
77
	/**
-
 
78
	 * true pour animer les transitions
-
 
79
	 */
-
 
80
	private boolean animerTransition = false;
-
 
81
	/**
-
 
82
	 * Détermine la durée de la transition
-
 
83
	 */
69
	private int index = 0 ;
84
	private float dureeAnimation = (float) 0.15;
70
 
85
	
71
	/**
86
	/**
Line 72... Line 87...
72
	 * Booleen d'initalisation général
87
	 * Booleen d'initalisation général
73
	 */
88
	 */
74
	private boolean initialise = false;
89
	private boolean initialise = false;
75
 
90
 
-
 
91
	/**
-
 
92
	 * Booleen d'initalisation du conteneur d'image
-
 
93
	 */
-
 
94
	private boolean conteneurInitialise = false;
-
 
95
	
-
 
96
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ;
Line 76... Line 97...
76
	/**
97
	
77
	 * Booleen d'initalisation du conteneur d'image
98
	com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("Agrandissement") ;
78
	 */
99
	
79
	private boolean conteneurInitialise = false;
100
	Image imgAgrandie = null;
Line 99... Line 120...
99
		oMediateur = im;
120
		oMediateur = im;
Line 100... Line 121...
100
 
121
 
101
		prev.setStylePrimaryName("x-view-zoom-button-p");
122
		prev.setStylePrimaryName("x-view-zoom-button-p");
Line -... Line 123...
-
 
123
		suiv.setStylePrimaryName("x-view-zoom-button-s");
-
 
124
 
102
		suiv.setStylePrimaryName("x-view-zoom-button-s");
125
		imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;
103
 
126
		
Line 104... Line 127...
104
		// on crée une image qui gère le double clic et la roulette de la souris
127
		// on crée une image qui gère le double clic et la roulette de la souris
Line 124... Line 147...
124
					
147
					
125
					event.preventDefault() ;
148
					event.preventDefault() ;
126
					int[] xy = {event.getClientX(),event.getClientY()} ;
149
					int[] xy = {event.getClientX(),event.getClientY()} ;
127
					afficherMenu(xy) ;
150
					afficherMenu(xy) ;
-
 
151
				}
-
 
152
				
-
 
153
				// lors du double clic
-
 
154
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
-
 
155
					afficherPanneauAgrandi();
128
				}
156
				}
Line 129... Line 157...
129
			}
157
			}
Line 130... Line 158...
130
			
158
			
Line 131... Line 159...
131
		};
159
		};
Line 132... Line 160...
132
		
160
		
Line 133... Line 161...
133
		image.setPixelSize(150, 150);
161
		image.setPixelSize(150, 150);
134
		
162
		
Line 182... Line 210...
182
	 */
210
	 */
183
	public void rafraichir(Object nouvelleDonnees,
211
	public void rafraichir(Object nouvelleDonnees,
184
			boolean repandreRafraichissement) {
212
			boolean repandreRafraichissement) {
Line 185... Line 213...
185
 
213
 
186
		// si on reçoit une string
214
		// si on reçoit une string
187
		if (nouvelleDonnees instanceof String[] && initialise
215
		if (nouvelleDonnees instanceof String[][] && initialise
188
				&& conteneurInitialise && ((String[])nouvelleDonnees).length != 0) {
216
				&& conteneurInitialise && ((String[][])nouvelleDonnees).length != 0) {
189
			infosImages = (String[]) nouvelleDonnees;
217
			infosImages = (String[][]) nouvelleDonnees;
190
			index = 0 ;
218
			index = 0 ;
Line 191... Line 219...
191
			afficherImage() ;
219
			afficherImage() ;
192
			
220
			
193
		} else {
221
		} else {
194
			// sinon on met une image vide
-
 
195
			infosImages = new String[0] ;
-
 
196
			getImage().setUrl("ill_liaison.png");
-
 
197
			imageWidth = getImage().getWidth();
222
			// sinon on met une image vide
-
 
223
			infosImages = null ;
198
			imageHeight = getImage().getHeight();
224
			afficherImage();
199
			verifierEtRetaillerImage();
225
			
Line 200... Line 226...
200
		}
226
		}
201
	}
227
	}
202
 
228
 
203
	public void afficherImage()
229
	public void afficherImage()
204
	{
230
	{
205
		// c'est l'url de l'image qu'on associe à la vue
231
		// c'est l'url de l'image qu'on associe à la vue
206
		if(infosImages.length != 0)
232
		if(infosImages != null && infosImages.length != 0)
207
		{
233
		{
208
			activerPanneau() ;
234
			activerPanneau() ;
209
			getImage().setUrl(convertirIdEnUrl(infosImages[index]));
235
			getImage().setUrl(convertirIdEnUrl(infosImages[index][0]));
-
 
236
			imageWidth = Integer.parseInt(infosImages[index][1]);
-
 
237
			imageHeight = Integer.parseInt(infosImages[index][2]);
-
 
238
			verifierEtRetaillerImage();
-
 
239
		} else {
-
 
240
			getImage().setUrl("ill_liaison.png");
-
 
241
			imageWidth = getImage().getWidth();
-
 
242
			imageHeight = getImage().getHeight();
-
 
243
			if(imgZoom.isVisible()) {
-
 
244
				agrandirImage();
210
			imageWidth =getImage().getWidth();
245
			}
211
			imageHeight = getImage().getHeight();
-
 
212
			verifierEtRetaillerImage();
-
 
213
		}
-
 
214
		else
-
 
215
		{
-
 
216
			desactiverPanneau() ;
-
 
217
		}
-
 
218
	}
-
 
219
 
-
 
220
	/**
-
 
221
	 * Desactive visuellement le panneau et les boutons
-
 
222
	 */
-
 
223
	public void desactiverPanneau() {
-
 
224
		getImage().setUrl("");
246
			prev.setEnabled(false);
Line 225... Line 247...
225
		prev.setEnabled(false);
247
			suiv.setEnabled(false);
226
		suiv.setEnabled(false);
248
		}
227
	}
249
	}
Line 308... Line 330...
308
	 * Acesseurs pour l'identifiant de l'image
330
	 * Acesseurs pour l'identifiant de l'image
309
	 * @return l'id de l'image
331
	 * @return l'id de l'image
310
	 */
332
	 */
311
	public String getIdImage()
333
	public String getIdImage()
312
	{
334
	{
313
		return infosImages[index] ;
335
		return infosImages[index][0] ;
314
	}
336
	}
Line 315... Line 337...
315
 
337
 
316
	/**
338
	/**
317
	 * Accesseur pour le bouton précédent
339
	 * Accesseur pour le bouton précédent
Line 374... Line 396...
374
 
396
 
Line 375... Line 397...
375
	}
397
	}
Line 376... Line 398...
376
 
398
 
377
	public void raz() {
399
	public void raz() {
Line 378... Line 400...
378
		
400
		
Line 379... Line 401...
379
		infosImages = new String[0] ;
401
		infosImages = new String[0][0] ;
Line 387... Line 409...
387
			
409
			
388
			getImage().setUrl("") ;
410
			getImage().setUrl("") ;
389
			int nouvelleTaille = infosImages.length - 1 ;
411
			int nouvelleTaille = infosImages.length - 1 ;
Line 390... Line 412...
390
			int indexSupp = index ;
412
			int indexSupp = index ;
391
			
413
			
Line 392... Line 414...
392
			String[] nouveauInfosImages = new String[nouvelleTaille] ;
414
			String[][] nouveauInfosImages = new String[nouvelleTaille][3] ;
Line 393... Line 415...
393
			int j = 0 ;
415
			int j = 0 ;
Line 458... Line 480...
458
	/**
480
	/**
459
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
481
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
460
	 * echeant
482
	 * echeant
461
	 */
483
	 */
462
	public void verifierEtRetaillerImage() {
484
	public void verifierEtRetaillerImage() {
-
 
485
		
463
		// si l'image est nulle
486
		// si l'image est nulle
464
		if (image == null) {
487
		if (image == null) {
465
			// on ne fait rien
488
			// on ne fait rien
466
			return;
489
			return;
467
		}
490
		}
468
		/*
-
 
469
		// on prend la taille originale de l'image
-
 
470
		int originalX = getTailleImage()[0];
-
 
471
		int originalY = getTailleImage()[1];
-
 
472
 
491
		
473
		// on la transforme en float (la division entre entier donne de curieux
-
 
474
		// résultats)
-
 
475
		float fOriginalX = (new Float(originalX)).floatValue();
-
 
476
		float fOriginalY = (new Float(originalY)).floatValue();
-
 
477
 
-
 
478
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
-
 
479
		float rapportTaille = fOriginalX / fOriginalY;
-
 
480
 
-
 
481
		// la nouvelle taille est pour le moment égale à l'ancienne
-
 
482
		int nouvelleTailleX = originalX;
-
 
483
		int nouvelleTailleY = originalY;
-
 
484
 
-
 
485
		// on prend la taille du conteneur
-
 
486
		int tailleConteneurX = imageConteneur.getWidth();
-
 
487
		int tailleConteneurY = imageConteneur.getHeight();
-
 
488
		
-
 
489
		int maxConteneur = Math.min(tailleConteneurX, tailleConteneurY);
-
 
490
		int max = Math.min(maxConteneur, 300);
-
 
491
		
-
 
492
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
-
 
493
		// grande)	
-
 
494
		// si la longueur de l'image est la plus grande des deux
-
 
495
			
-
 
496
			int maxImage = Math.max(originalX, originalY);
-
 
497
			
-
 
498
			if(maxImage == originalX) {
-
 
499
				// on prend la longueur comme taille de référence, qu'on met à
-
 
500
				// la longueur du conteneur
-
 
501
				nouvelleTailleX = max;
-
 
502
				// et on recalcule la hauteur, par rapport à la nouvelle
-
 
503
				// longueur, en gardant le format de 'limage
-
 
504
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
-
 
505
						/ rapportTaille);
-
 
506
			} 
-
 
507
			else
-
 
508
			{	
-
 
509
				// si la hauteur est la plus grande, on fait le même genre
-
 
510
				// d'opération en prenant la hauteur comme référence
-
 
511
				nouvelleTailleY = max;
-
 
512
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
-
 
513
						* rapportTaille);
-
 
514
			}
-
 
515
		*/
-
 
516
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
-
 
517
		int[] dim = calculerDimensions(getTailleImage());
492
		int[] dim = calculerDimensions(getTailleImage(),300,imageConteneur.getWidth());
518
		getImage().setSize("" + dim[0] + "px",
493
		getImage().setSize("" + dim[0] + "px",
519
				"" + dim[1] + "px");
494
				"" + dim[1] + "px");
Line 520... Line -...
520
		
-
 
521
		
495
		
-
 
496
		doLayout();
-
 
497
		
-
 
498
		if(imgZoom.isVisible()) {
-
 
499
			agrandirImage();
522
		doLayout();
500
		}
Line 523... Line 501...
523
	}
501
	}
Line 524... Line 502...
524
	
502
	
525
	public int[] calculerDimensions(int[] tailleXY) {
503
	public int[] calculerDimensions(int[] tailleXY, double tailleMax, double tailleConteneur) {
526
	    
504
	    
527
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
505
		float[] tailleXYf = {new Float(tailleXY[0]),new Float(tailleXY[1])} ;
Line 528... Line 506...
528
        float tailleOr = Math.min(300,imageConteneur.getWidth()) ;
506
        float tailleOr = Math.min(new Float(tailleMax),new Float(tailleConteneur)) ;
529
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
507
        float maxTaille = Math.max(tailleXYf[1],tailleXYf[0]) ;
Line 541... Line 519...
541
        
519
        
Line 542... Line 520...
542
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
520
        int[] res = {Math.round(XYresize[0]),Math.round(XYresize[1])} ;
543
        
521
        
-
 
522
        return res;
-
 
523
    }
-
 
524
	
-
 
525
	protected void agrandirImage() {
-
 
526
		
-
 
527
			String urlAgrandie = "";
-
 
528
			
-
 
529
			if(infosImages == null) {
-
 
530
				urlAgrandie = "ill_liaison.png";
-
 
531
				setTailleImage(265, 270);
-
 
532
			} else {
-
 
533
				urlAgrandie = convertirIdEnUrl(infosImages[index][0]).replace("_M", "_L") ;
-
 
534
				urlAgrandie = urlAgrandie.replace("/M/", "/L/") ;
-
 
535
			}
-
 
536
			
-
 
537
			if(imgAgrandie == null) {
-
 
538
				imgAgrandie = new Image(urlAgrandie); 
-
 
539
				imgZoom.add(imgAgrandie);
-
 
540
				
-
 
541
				imgAgrandie.addLoadListener(new LoadListener() {
-
 
542
 
-
 
543
					public void onError(Widget sender) {
-
 
544
						// TODO Auto-generated method stub
-
 
545
						
-
 
546
					}
-
 
547
 
-
 
548
					public void onLoad(Widget sender) {
-
 
549
						int[] tailleImage = calculerDimensions(getTailleImage(),getTailleImage()[1],Window.getClientHeight()*0.75);
-
 
550
						//imgZoom.setSize(tailleImage[0], tailleImage[1]);
-
 
551
						//imgAgrandie.setSize(tailleImage[0]+"px", tailleImage[1]+"px");
-
 
552
						ExtElement imgElement = Ext.get(imgAgrandie.getElement());
-
 
553
						if(animerTransition) {
-
 
554
							AnimationConfig a = new AnimationConfig() ;
-
 
555
							a.setDuration((float) dureeAnimation);
-
 
556
							imgElement.setHeight(tailleImage[1], a);
-
 
557
							imgElement.setWidth(tailleImage[0], a);
-
 
558
							
-
 
559
							ExtElement winElement = Ext.get(imgZoom.getElement());
-
 
560
							winElement.setHeight(tailleImage[1], a);
-
 
561
							winElement.setWidth(tailleImage[0], a);
-
 
562
						} else {
-
 
563
							imgElement.setHeight(tailleImage[1], false);
-
 
564
							imgElement.setWidth(tailleImage[0], false);
-
 
565
							
-
 
566
							ExtElement winElement = Ext.get(imgZoom.getElement());
-
 
567
							winElement.setHeight(tailleImage[1], false);
-
 
568
							winElement.setWidth(tailleImage[0], false);
-
 
569
						}
-
 
570
					}
-
 
571
					
-
 
572
					
-
 
573
				});
-
 
574
				
-
 
575
			} else {
-
 
576
				imgAgrandie.setUrl(urlAgrandie);
-
 
577
				imgAgrandie.setVisible(true);
-
 
578
			}
-
 
579
	}
-
 
580
	
-
 
581
	private void afficherPanneauAgrandi() {
-
 
582
			imgZoom.show(this.getElement());
544
        return res;
583
			agrandirImage();