Subversion Repositories eFlore/Applications.cel

Rev

Rev 2757 | Details | Compare with Previous | Last modification | View Log | RSS feed

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