Subversion Repositories eFlore/Applications.cel

Rev

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

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