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