Subversion Repositories eFlore/Applications.cel

Rev

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

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