Subversion Repositories eFlore/Applications.cel

Rev

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