Subversion Repositories eFlore/Applications.cel

Rev

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