Subversion Repositories eFlore/Applications.cel

Rev

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

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