Subversion Repositories eFlore/Applications.cel

Rev

Rev 94 | Rev 104 | Go to most recent revision | Details | Compare with Previous | 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
	 */
97 jpm 46
	private Image image = new Image("");
94 jpm 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
97 jpm 147
		image.setUrl("");
94 jpm 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] ;
97 jpm 190
			getImage().setUrl("");
94 jpm 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
		{
97 jpm 199
			activerPanneau() ;
94 jpm 200
			getImage().setUrl(infosImages[index]);
201
		}
202
		else
203
		{
97 jpm 204
			//getImage().setUrl("");
205
			desactiverPanneau() ;
94 jpm 206
		}
207
	}
208
 
209
	/**
210
	 * Desactive visuellement le panneau et les boutons
211
	 */
212
	public void desactiverPanneau() {
97 jpm 213
		getImage().setUrl("");
94 jpm 214
		prev.setEnabled(false);
215
		suiv.setEnabled(false);
216
	}
217
 
218
	/**
219
	 * Active visuellement le panneau et les boutons
220
	 */
221
	public void activerPanneau() {
222
		prev.setEnabled(true);
223
		suiv.setEnabled(true);
224
	}
225
 
226
	/**
227
	 * Ajoute les listeners pour la gestions d'évènement
228
	 */
229
	public void ajouterListeners() {
230
 
231
		// gestion du clic sur le bouton précedent
232
		prev.addClickListener(new ClickListener() {
233
 
234
			// en cas de clic
235
			public void onClick(Widget sender) {
236
 
237
				if(infosImages.length != 0) {
238
					if(index == 0)
239
					{
240
						index = infosImages.length - 1 ;
241
					}
242
					else
243
					{
244
						index-- ;
245
					}
246
 
247
					afficherImage() ;
248
				}
249
			}
250
 
251
		});
252
 
253
		// gestion du clic sur le bouton suivant
254
		suiv.addClickListener(new ClickListener() {
255
 
256
			// en cas de clic
257
			public void onClick(Widget sender) {
258
 
259
				if(infosImages.length != 0) {
260
					if(index == infosImages.length - 1)
261
					{
262
						index = 0 ;
263
					}
264
					else
265
					{
266
						index++ ;
267
					}
268
 
269
					afficherImage() ;
270
				}
271
 
272
			}
273
 
274
		});
275
 
276
	}
277
 
278
	/**
279
	 * Accesseur pour le médiateur
280
	 *
281
	 * @return le médiateur associé à la vue
282
	 */
283
	public ObservationMediateur getIMediateur() {
284
		return oMediateur;
285
	}
286
 
287
	/**
288
	 * Accesseur au conteneur de l'image
289
	 *
290
	 * @return le conteneur de l'image
291
	 */
292
	public Image getImage() {
293
		return image;
294
	}
295
 
296
	/**
297
	 * Acesseurs pour l'identifiant de l'image
298
	 * @return l'id de l'image
299
	 */
300
	public String getIdImage()
301
	{
302
		return idImage ;
303
	}
304
 
305
	/**
306
	 * Accesseur pour le bouton précédent
307
	 *
308
	 * @return le bouton précédent
309
	 */
310
	public com.google.gwt.user.client.ui.Button getPrev() {
311
		return prev;
312
	}
313
 
314
	/**
315
	 * Accesseur pour le bouton suivant
316
	 *
317
	 * @return le bouton suivant
318
	 */
319
	public com.google.gwt.user.client.ui.Button getSuiv() {
320
		return suiv;
321
	}
322
 
323
	/**
324
	 * Setter pour la taille de l'image
325
	 *
326
	 * @param x
327
	 *            la largeur en pixels
328
	 * @param y
329
	 *            la hauteur en pixels
330
	 */
331
	public void setTailleImage(int x, int y) {
332
		imageHeight = y;
333
		imageWidth = x;
334
	}
335
 
336
	/**
337
	 * Setteur pour l'identifiant de l'image
338
	 * @param id le nouvel identifiant
339
	 */
340
	public void setIdImage(String id)
341
	{
342
		idImage = id ;
343
	}
344
 
345
	/**
346
	 * renvoie la taille originale de l'image
347
	 *
348
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
349
	 */
350
	public int[] getTailleImage() {
351
		int[] taille = { imageHeight, imageWidth };
352
 
353
		return taille;
354
	}
355
 
356
	/**
357
	 * Accesseur pour le conteneur de l'image
358
	 * @return le conteur de l'image
359
	 */
360
	public Panel getImageConteneur() {
361
 
362
		return imageConteneur;
363
 
364
	}
365
}
366