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