Subversion Repositories eFlore/Applications.cel

Rev

Rev 97 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
94 jpm 1
package org.tela_botanica.client.vues;
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.observation.ObservationMediateur;
6
 
7
import com.google.gwt.user.client.DOM;
8
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.Window;
10
import com.google.gwt.user.client.ui.ClickListener;
11
import com.google.gwt.user.client.ui.Image;
12
import com.google.gwt.user.client.ui.Widget;
13
import com.gwtext.client.core.EventObject;
14
import com.gwtext.client.core.RegionPosition;
15
import com.gwtext.client.dd.DragData;
16
import com.gwtext.client.dd.DragSource;
17
import com.gwtext.client.dd.DropTarget;
18
import com.gwtext.client.dd.DropTargetConfig;
19
import com.gwtext.client.widgets.Container;
20
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.event.PanelListenerAdapter;
22
import com.gwtext.client.widgets.grid.GridDragData;
23
import com.gwtext.client.widgets.layout.BorderLayout;
24
import com.gwtext.client.widgets.layout.BorderLayoutData;
25
 
26
/**
27
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
28
 *
29
 * @author aurelien
30
 *
31
 */
32
public class MiniZoomImageVue extends Panel implements Rafraichissable {
33
 
34
	/**
35
	 * Le médiateur associé à la vue
36
	 */
37
	private ObservationMediateur oMediateur = null;
38
 
39
	/**
40
	 * Panneau conteneur pour l'image
41
	 */
42
	private Panel imageConteneur = null;
43
	/**
44
	 * l'image à afficher
45
	 */
46
	private Image image = new Image("vide.jpg");
47
	/**
48
	 * Bouton précédent
49
	 */
50
	private final com.google.gwt.user.client.ui.Button prev = new com.google.gwt.user.client.ui.Button();
51
	/**
52
	 * Bouton suivant
53
	 */
54
	private final com.google.gwt.user.client.ui.Button suiv = new com.google.gwt.user.client.ui.Button();
55
 
56
	/**
57
	 * Taille originale Y de l'image
58
	 */
59
	private int imageHeight = 0;
60
 
61
	/**
62
	 * Taille originale X de l'image
63
	 */
64
	private int imageWidth = 0;
65
 
66
	/**
67
	 * Identifiant de l'image
68
	 */
69
	private String idImage = "0" ;
70
 
71
	private String[] infosImages = null ;
72
 
73
	private int index = 0 ;
74
 
75
	/**
76
	 * Booleen d'initalisation général
77
	 */
78
	private boolean initialise = false;
79
 
80
	/**
81
	 * Booleen d'initalisation du conteneur d'image
82
	 */
83
	private boolean conteneurInitialise = false;
84
 
85
	/**
86
	 * Constructeur sans argument (privé car ne doit être utilisé)
87
	 */
88
	@SuppressWarnings("unused")
89
	private MiniZoomImageVue() {
90
		super();
91
	}
92
 
93
	/**
94
	 * Constructeur avec argument
95
	 *
96
	 * @param im
97
	 *            le médiateur à associer à la vue
98
	 */
99
	public MiniZoomImageVue(ObservationMediateur im) {
100
		super("Image liées");
101
		setId("x-view-mini-zoom-panel");
102
		// on associe le médiateur
103
		oMediateur = im;
104
 
105
		prev.setStylePrimaryName("x-view-zoom-button-p");
106
		suiv.setStylePrimaryName("x-view-zoom-button-s");
107
 
108
		// on crée une image qui gère le double clic et la roulette de la souris
109
		image = new Image() {
110
 
111
			public void onBrowserEvent(Event event) {
112
 
113
				// lors d'un déplacement de la roulette
114
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
115
 
116
					// on simule un clic sur le bouton précédent
117
					if (event.getMouseWheelVelocityY() >= 1) {
118
						prev.click();
119
					}
120
 
121
					// ou suivant
122
					if (event.getMouseWheelVelocityY() <= -1) {
123
						suiv.click();
124
					}
125
				}
126
			}
127
 
128
		};
129
 
130
		infosImages = new String[0] ;
131
 
132
		this.setHeader(true);
133
 
134
		imageConteneur = new Panel() ;
135
		imageConteneur.setBorder(false);
136
 
137
		imageConteneur.add(image);
138
		imageConteneur.setId("x-view-mini-zoom-img");
139
 
140
		// il n'existe pas de méthode pour ajouter un listener pour le double
141
		// clic sur une image
142
		// alors on lui dit manuellement de capter l'évènement double clic
143
		image.sinkEvents(Event.ONDBLCLICK);
144
		image.sinkEvents(Event.ONMOUSEWHEEL);
145
 
146
		// l'image de base est vide
147
		image.setUrl("vide_s.jpg");
148
 
149
		this.setLayout(new BorderLayout());
150
 
151
		prev.setWidth("60px");
152
		suiv.setWidth("60px");
153
 
154
		this.add(prev, new BorderLayoutData(RegionPosition.WEST));
155
		this.add(imageConteneur, new BorderLayoutData(RegionPosition.CENTER));
156
		this.add(suiv, new BorderLayoutData(RegionPosition.EAST));
157
 
158
		imageConteneur.setMaskDisabled(true);
159
		this.setBorder(false);
160
 
161
		conteneurInitialise = true;
162
		initialise = true;
163
 
164
		// on ajoute les listeners
165
		ajouterListeners();
166
 
167
	}
168
 
169
	/**
170
	 * Méthode héritée de l'interface rafraichissable
171
	 *
172
	 * @param nouvelleDonnees
173
	 *            les nouvelles données
174
	 * @param repandreRafraichissement
175
	 *            le booleen qui dit si on doit répnadre l'évènement
176
	 */
177
	public void rafraichir(Object nouvelleDonnees,
178
			boolean repandreRafraichissement) {
179
 
180
		// si on reçoit une string
181
		if (nouvelleDonnees instanceof String[] && initialise
182
				&& conteneurInitialise) {
183
			infosImages = (String[]) nouvelleDonnees;
184
			index = 0 ;
185
			afficherImage() ;
186
 
187
		} else {
188
			// sinon on met une image vide
189
			infosImages = new String[0] ;
190
			getImage().setUrl("vide_s.jpg");
191
		}
192
	}
193
 
194
	public void afficherImage()
195
	{
196
		// c'est l'url de l'image qu'on associe à la vue
197
		if(infosImages.length != 0)
198
		{
199
			getImage().setUrl(infosImages[index]);
200
		}
201
		else
202
		{
203
			getImage().setUrl("vide_s.jpeg");
204
		}
205
	}
206
 
207
	/**
208
	 * Desactive visuellement le panneau et les boutons
209
	 */
210
	public void desactiverPanneau() {
211
		getImage().setUrl("vide_s.jpeg");
212
		prev.setEnabled(false);
213
		suiv.setEnabled(false);
214
	}
215
 
216
	/**
217
	 * Active visuellement le panneau et les boutons
218
	 */
219
	public void activerPanneau() {
220
		prev.setEnabled(true);
221
		suiv.setEnabled(true);
222
	}
223
 
224
	/**
225
	 * Ajoute les listeners pour la gestions d'évènement
226
	 */
227
	public void ajouterListeners() {
228
 
229
		// gestion du clic sur le bouton précedent
230
		prev.addClickListener(new ClickListener() {
231
 
232
			// en cas de clic
233
			public void onClick(Widget sender) {
234
 
235
				if(infosImages.length != 0) {
236
					if(index == 0)
237
					{
238
						index = infosImages.length - 1 ;
239
					}
240
					else
241
					{
242
						index-- ;
243
					}
244
 
245
					afficherImage() ;
246
				}
247
			}
248
 
249
		});
250
 
251
		// gestion du clic sur le bouton suivant
252
		suiv.addClickListener(new ClickListener() {
253
 
254
			// en cas de clic
255
			public void onClick(Widget sender) {
256
 
257
				if(infosImages.length != 0) {
258
					if(index == infosImages.length - 1)
259
					{
260
						index = 0 ;
261
					}
262
					else
263
					{
264
						index++ ;
265
					}
266
 
267
					afficherImage() ;
268
				}
269
 
270
			}
271
 
272
		});
273
 
274
	}
275
 
276
	/**
277
	 * Accesseur pour le médiateur
278
	 *
279
	 * @return le médiateur associé à la vue
280
	 */
281
	public ObservationMediateur getIMediateur() {
282
		return oMediateur;
283
	}
284
 
285
	/**
286
	 * Accesseur au conteneur de l'image
287
	 *
288
	 * @return le conteneur de l'image
289
	 */
290
	public Image getImage() {
291
		return image;
292
	}
293
 
294
	/**
295
	 * Acesseurs pour l'identifiant de l'image
296
	 * @return l'id de l'image
297
	 */
298
	public String getIdImage()
299
	{
300
		return idImage ;
301
	}
302
 
303
	/**
304
	 * Accesseur pour le bouton précédent
305
	 *
306
	 * @return le bouton précédent
307
	 */
308
	public com.google.gwt.user.client.ui.Button getPrev() {
309
		return prev;
310
	}
311
 
312
	/**
313
	 * Accesseur pour le bouton suivant
314
	 *
315
	 * @return le bouton suivant
316
	 */
317
	public com.google.gwt.user.client.ui.Button getSuiv() {
318
		return suiv;
319
	}
320
 
321
	/**
322
	 * Setter pour la taille de l'image
323
	 *
324
	 * @param x
325
	 *            la largeur en pixels
326
	 * @param y
327
	 *            la hauteur en pixels
328
	 */
329
	public void setTailleImage(int x, int y) {
330
		imageHeight = y;
331
		imageWidth = x;
332
	}
333
 
334
	/**
335
	 * Setteur pour l'identifiant de l'image
336
	 * @param id le nouvel identifiant
337
	 */
338
	public void setIdImage(String id)
339
	{
340
		idImage = id ;
341
	}
342
 
343
	/**
344
	 * renvoie la taille originale de l'image
345
	 *
346
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
347
	 */
348
	public int[] getTailleImage() {
349
		int[] taille = { imageHeight, imageWidth };
350
 
351
		return taille;
352
	}
353
 
354
	/**
355
	 * Accesseur pour le conteneur de l'image
356
	 * @return le conteur de l'image
357
	 */
358
	public Panel getImageConteneur() {
359
 
360
		return imageConteneur;
361
 
362
	}
363
}
364