Subversion Repositories eFlore/Applications.cel

Rev

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