Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 298 Rev 338
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.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
5
 
5
 
6
import com.google.gwt.user.client.DOM;
6
import com.google.gwt.user.client.DOM;
7
import com.google.gwt.user.client.Event;
7
import com.google.gwt.user.client.Event;
8
import com.google.gwt.user.client.Window;
8
import com.google.gwt.user.client.Window;
9
import com.google.gwt.user.client.ui.Image;
9
import com.google.gwt.user.client.ui.Image;
10
import com.gwtext.client.widgets.Panel;
10
import com.gwtext.client.widgets.Panel;
11
import com.gwtext.client.widgets.ToolTip;
11
import com.gwtext.client.widgets.ToolTip;
12
 
12
 
13
/**
13
/**
14
 * Un panneau affichant une image generique provenant d eflore
14
 * Un panneau affichant une image generique provenant d eflore
15
 * 
15
 * 
16
 * @author David Delon
16
 * @author David Delon
17
 * 
17
 * 
18
 */
18
 */
19
public class ImageGeneriqueVue extends Panel implements Rafraichissable {
19
public class ImageGeneriqueVue extends Panel implements Rafraichissable {
20
 
20
 
21
	/**
21
	/**
22
	 * Le médiateur associé
22
	 * Le médiateur associé
23
	 */
23
	 */
24
	
24
	
25
	private ObservationMediateur observationMediateur = null;
25
	private ObservationMediateur observationMediateur = null;
26
	
26
	
27
	
27
	
28
	/**
28
	/**
29
	 * l'image à afficher
29
	 * l'image à afficher
30
	 */
30
	 */
31
	private Image image = new Image();
31
	private Image image = new Image();
32
	
32
	
33
	private String urlImage = "" ;
33
	private String urlImage = "" ;
34
	
34
	
35
	private com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("Agrandissement") ;
35
	private com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("Agrandissement") ;
36
	
36
	
37
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ;
37
	private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ;
38
	
38
	
39
	/**
39
	/**
40
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
40
	 * Constructeur sans argument (privé car ne doit pas être utilisé)
41
	 */
41
	 */
42
	
42
	
43
	@SuppressWarnings("unused")
43
	@SuppressWarnings("unused")
44
	private ImageGeneriqueVue() {
44
	private ImageGeneriqueVue() {
45
		super();
45
		super();
46
	}
46
	}
47
 
47
 
48
	/**
48
	/**
49
	 * Constructeur avec argument
49
	 * Constructeur avec argument
50
	 * @param obs le médiateur à associer
50
	 * @param obs le médiateur à associer
51
	 */
51
	 */
52
	
52
	
53
	
53
	
54
	public ImageGeneriqueVue(ObservationMediateur obs) {
54
	public ImageGeneriqueVue(ObservationMediateur obs) {
55
		
55
		
56
			
56
			
57
		this.observationMediateur = obs;
57
		this.observationMediateur = obs;
58
		imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;
58
		imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;
59
		image = new Image() {
59
		image = new Image() {
60
 
60
 
61
			public void onBrowserEvent(Event event) {
61
			public void onBrowserEvent(Event event) {
62
 
62
 
63
				// lors du double clic
63
				// lors du double clic
64
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
64
				if (Event.ONDBLCLICK == DOM.eventGetType(event)) {
65
 
65
 
66
					// on notifie le médiateur
66
					// on notifie le médiateur
67
					agrandirImage() ;
67
					agrandirImage() ;
68
				}
68
				}
69
			}
69
			}
70
			
70
			
71
		};
71
		};
72
		
72
		
73
		tp.applyTo(image.getElement()) ;
73
		tp.applyTo(image.getElement()) ;
74
		
74
		
75
		
75
		
76
		this.setCls("x-image-gen") ;
76
		this.setCls("x-image-gen") ;
-
 
77
		
-
 
78
		imgZoom.setConstrain(true);
-
 
79
		imgZoom.setAutoHeight(true) ;
-
 
80
		imgZoom.setAutoWidth(true) ;
77
 
81
 
78
		add(image);
82
		add(image);
79
		image.setPixelSize(150, 150);
83
		image.setPixelSize(150, 150);
80
		image.sinkEvents(Event.ONDBLCLICK);
84
		image.sinkEvents(Event.ONDBLCLICK);
81
		
85
		
82
		// on ajoute les listeners
86
		// on ajoute les listeners
83
		ajouterListeners();
87
		ajouterListeners();
84
 
88
 
85
	}
89
	}
86
 
90
 
87
 
91
 
88
	/**
92
	/**
89
	 * Affichage image generique
93
	 * Affichage image generique
90
	 * 
94
	 * 
91
	 */
95
	 */
92
	
96
	
93
	public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {
97
	public void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {
94
 
98
 
95
		// si on recoit une String contenant une URL
99
		// si on recoit une String contenant une URL
96
		if (nouvelleDonnees instanceof String) {
100
		if (nouvelleDonnees instanceof String) {
97
			
101
			
98
			urlImage=(String) nouvelleDonnees;
102
			urlImage=(String) nouvelleDonnees;
99
			
103
			
100
			if (urlImage == null || urlImage.equals("null") || urlImage.length()==0) {
104
			if (urlImage == null || urlImage.equals("null") || urlImage.length()==0) {
101
				image.setUrl("ill_taxon.png") ;
105
				image.setUrl("ill_taxon.png") ;
102
				image.setPixelSize(150, 150);
106
				image.setPixelSize(150, 150);
103
			}
107
			}
104
			else {
108
			else {
105
				image.setUrl(urlImage);
109
				image.setUrl(urlImage);
106
				verifierEtRetaillerImage();
110
				verifierEtRetaillerImage();
107
			}
111
			}
108
		}
112
		}
109
		
113
		
110
		observationMediateur.deMasquerChargementInfosObservations() ;
114
		observationMediateur.deMasquerChargementInfosObservations() ;
111
				
115
				
112
	}
116
	}
113
	
117
	
114
	public void agrandirImage() {
118
	public void agrandirImage() {
115
		
119
		
116
		if(!imgZoom.isVisible())
120
		if(!imgZoom.isVisible())
117
		{
121
		{
118
			String urlAgrandie = urlImage.replace("min", "max") ;
122
			String urlAgrandie = urlImage.replace("min", "max") ;
119
			imgZoom.setHtml("<img height="+Window.getClientHeight()*0.75+"px src=\""+urlAgrandie+"\" />") ;
123
			imgZoom.setHtml("<img height="+Window.getClientHeight()*0.75+"px src=\""+urlAgrandie+"\" />") ;
120
			imgZoom.setPagePosition( Window.getClientWidth()/2, Window.getClientHeight()/5) ;
124
			imgZoom.setPagePosition( Window.getClientWidth()/2, Window.getClientHeight()/5) ;
121
			imgZoom.setConstrain(true);
-
 
122
			imgZoom.setAutoHeight(true) ;
-
 
123
			imgZoom.setAutoWidth(true) ;
-
 
124
			imgZoom.show(this.getElement()) ;
125
			imgZoom.show(this.getElement()) ;
125
		} else {
126
		} else {
126
			imgZoom.hide();
127
			imgZoom.hide();
127
		}
128
		}
128
 
129
 
129
		
130
		
130
	}
131
	}
131
 
132
 
132
	
133
	
133
	/**
134
	/**
134
	 * Ajoute les listeners pour la gestions d'évènement
135
	 * Ajoute les listeners pour la gestions d'évènement
135
	 */
136
	 */
136
	public void ajouterListeners() {
137
	public void ajouterListeners() {
137
		
138
		
138
	}
139
	}
139
	
140
	
140
	public void raz() {
141
	public void raz() {
141
		image.setUrl("");
142
		image.setUrl("");
142
	}
143
	}
143
	
144
	
144
	public void verifierEtRetaillerImage() {
145
	public void verifierEtRetaillerImage() {
145
		// si l'image est nulle
146
		// si l'image est nulle
146
		if (image == null) {
147
		if (image == null) {
147
			// on ne fait rien
148
			// on ne fait rien
148
			return;
149
			return;
149
		}
150
		}
150
		
151
		
151
 
152
 
152
		// on prend la taille originale de l'image
153
		// on prend la taille originale de l'image
153
		int originalX = image.getWidth();
154
		int originalX = image.getWidth();
154
		int originalY = image.getHeight();
155
		int originalY = image.getHeight();
155
 
156
 
156
		// on la transforme en float (la division entre entier donne de curieux
157
		// on la transforme en float (la division entre entier donne de curieux
157
		// résultats)
158
		// résultats)
158
		float fOriginalX = (new Float(originalX)).floatValue();
159
		float fOriginalX = (new Float(originalX)).floatValue();
159
		float fOriginalY = (new Float(originalY)).floatValue();
160
		float fOriginalY = (new Float(originalY)).floatValue();
160
 
161
 
161
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
162
		// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)
162
		float rapportTaille = fOriginalX / fOriginalY;
163
		float rapportTaille = fOriginalX / fOriginalY;
163
 
164
 
164
		// la nouvelle taille est pour le moment égale à l'ancienne
165
		// la nouvelle taille est pour le moment égale à l'ancienne
165
		int nouvelleTailleX = originalX;
166
		int nouvelleTailleX = originalX;
166
		int nouvelleTailleY = originalY;
167
		int nouvelleTailleY = originalY;
167
 
168
 
168
		// on prend la taille du conteneur
169
		// on prend la taille du conteneur
169
		int tailleConteneurX = getWidth();
170
		int tailleConteneurX = getWidth();
170
		int tailleConteneurY = getHeight();
171
		int tailleConteneurY = getHeight();
171
		
172
		
172
		int maxConteneur = Math.min(tailleConteneurX, tailleConteneurY);
173
		int maxConteneur = Math.min(tailleConteneurX, tailleConteneurY);
173
		int max = Math.min(maxConteneur, 300);
174
		int max = Math.min(maxConteneur, 300);
174
		
175
		
175
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
176
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
176
		// grande)	
177
		// grande)	
177
		// si la longueur de l'image est la plus grande des deux
178
		// si la longueur de l'image est la plus grande des deux
178
			
179
			
179
			int maxImage = Math.max(originalX, originalY);
180
			int maxImage = Math.max(originalX, originalY);
180
			
181
			
181
			if(maxImage == originalX) {
182
			if(maxImage == originalX) {
182
				// on prend la longueur comme taille de référence, qu'on met à
183
				// on prend la longueur comme taille de référence, qu'on met à
183
				// la longueur du conteneur
184
				// la longueur du conteneur
184
				nouvelleTailleX = max;
185
				nouvelleTailleX = max;
185
				// et on recalcule la hauteur, par rapport à la nouvelle
186
				// et on recalcule la hauteur, par rapport à la nouvelle
186
				// longueur, en gardant le format de 'limage
187
				// longueur, en gardant le format de 'limage
187
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
188
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
188
						/ rapportTaille);
189
						/ rapportTaille);
189
			} 
190
			} 
190
			else
191
			else
191
			{	
192
			{	
192
				// si la hauteur est la plus grande, on fait le même genre
193
				// si la hauteur est la plus grande, on fait le même genre
193
				// d'opération en prenant la hauteur comme référence
194
				// d'opération en prenant la hauteur comme référence
194
				nouvelleTailleY = max;
195
				nouvelleTailleY = max;
195
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
196
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
196
						* rapportTaille);
197
						* rapportTaille);
197
			}
198
			}
198
 
199
 
199
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
200
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
200
			image.setPixelSize(nouvelleTailleX ,
201
			image.setPixelSize(nouvelleTailleX ,
201
					nouvelleTailleY);
202
					nouvelleTailleY);
202
		
203
		
203
		doLayout();
204
		doLayout();
204
	}
205
	}
205
}
206
}