Subversion Repositories eFlore/Applications.cel

Rev

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

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