Subversion Repositories eFlore/Applications.cel

Rev

Rev 130 | Rev 195 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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