Subversion Repositories eFlore/Applications.cel

Rev

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

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