Subversion Repositories eFlore/Applications.cel

Rev

Rev 2 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2 Rev 5
Line 1... Line 1...
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
Line 2... Line -...
2
 
-
 
3
 
2
 
4
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
Line 5... Line 4...
5
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
5
 
7
import com.google.gwt.user.client.DOM;
6
import com.google.gwt.user.client.DOM;
8
import com.google.gwt.user.client.Event;
7
import com.google.gwt.user.client.Event;
9
import com.google.gwt.user.client.ui.ClickListener;
8
import com.google.gwt.user.client.ui.ClickListener;
-
 
9
import com.google.gwt.user.client.ui.Image;
10
import com.google.gwt.user.client.ui.Image;
10
import com.google.gwt.user.client.ui.Widget;
-
 
11
import com.gwtext.client.core.EventObject;
-
 
12
import com.gwtext.client.core.RegionPosition;
-
 
13
import com.gwtext.client.dd.DragData;
-
 
14
import com.gwtext.client.dd.DragSource;
11
import com.google.gwt.user.client.ui.Widget;
15
import com.gwtext.client.dd.DropTarget;
12
import com.gwtext.client.core.RegionPosition;
16
import com.gwtext.client.dd.DropTargetConfig;
13
import com.gwtext.client.widgets.Container;
17
import com.gwtext.client.widgets.Container;
-
 
18
import com.gwtext.client.widgets.Panel;
14
import com.gwtext.client.widgets.Panel;
19
import com.gwtext.client.widgets.event.PanelListenerAdapter;
15
import com.gwtext.client.widgets.event.PanelListenerAdapter;
20
import com.gwtext.client.widgets.grid.GridDragData;
Line 16... Line 21...
16
import com.gwtext.client.widgets.layout.BorderLayout;
21
import com.gwtext.client.widgets.layout.BorderLayout;
17
import com.gwtext.client.widgets.layout.BorderLayoutData;
22
import com.gwtext.client.widgets.layout.BorderLayoutData;
-
 
23
 
18
 
24
/**
19
/**
25
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
20
 * Panneau d'affichage d'une image avec des boutons précdents et suivant
26
 * 
21
 * @author aurelien
27
 * @author aurelien
Line 54... Line 60...
54
	 * Taille originale X de l'image
60
	 * Taille originale X de l'image
55
	 */
61
	 */
56
	private int imageWidth = 0 ;
62
	private int imageWidth = 0;
Line 57... Line 63...
57
	
63
	
-
 
64
	/**
-
 
65
	 * Identifiant de l'image
-
 
66
	 */
-
 
67
	private String idImage = "0" ;
-
 
68
 
58
	/**
69
	/**
59
	 * Booleen d'initalisation général
70
	 * Booleen d'initalisation général
60
	 */
71
	 */
Line 61... Line 72...
61
	private boolean initialise = false ;
72
	private boolean initialise = false;
Line 67... Line 78...
67
	
78
 
68
	/**
79
	/**
69
	 * Constructeur sans argument (privé car ne doit être utilisé)
80
	 * Constructeur sans argument (privé car ne doit être utilisé)
70
	 */
81
	 */
71
	@SuppressWarnings("unused")
82
	@SuppressWarnings("unused")
72
	private ZoomImageVue()
-
 
73
	{
83
	private ZoomImageVue() {
74
		super() ;
84
		super();
Line 75... Line 85...
75
	}
85
	}
76
	
86
 
-
 
87
	/**
-
 
88
	 * Constructeur avec argument
77
	/**
89
	 * 
78
	 * Constructeur avec argument
90
	 * @param im
79
	 * @param im le médiateur à associer à la vue 
91
	 *            le médiateur à associer à la vue
80
	 */
-
 
81
	public ZoomImageVue(ImageMediateur im)
92
	 */
82
	{
93
	public ZoomImageVue(ImageMediateur im) {
83
		super("Zoom");
94
		super("Zoom");
84
		setId("x-view-zoom-panel") ;
95
		setId("x-view-zoom-panel");
Line 85... Line 96...
85
		// on associe le médiateur
96
		// on associe le médiateur
86
		iMediateur = im ;
97
		iMediateur = im;
Line 87... Line -...
87
		
-
 
88
		prev.setStylePrimaryName("x-view-zoom-button-p") ;
98
 
89
		suiv.setStylePrimaryName("x-view-zoom-button-s") ;
99
		prev.setStylePrimaryName("x-view-zoom-button-p");
Line 90... Line 100...
90
 
100
		suiv.setStylePrimaryName("x-view-zoom-button-s");
Line 103... Line 113...
103
				
113
 
104
				// lors d'un déplacement de la roulette
114
				// lors d'un déplacement de la roulette
Line 105... Line 115...
105
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
115
				if (Event.ONMOUSEWHEEL == DOM.eventGetType(event)) {
106
 
116
 
107
					// on simule un clic sur le bouton précédent
-
 
108
					if(event.getMouseWheelVelocityY() >= 1)
117
					// on simule un clic sur le bouton précédent
109
					{
118
					if (event.getMouseWheelVelocityY() >= 1) {
Line 110... Line 119...
110
						prev.click() ;		
119
						prev.click();
111
					}
120
					}
112
					
-
 
113
					// ou suivant
121
 
114
					if(event.getMouseWheelVelocityY() <= -1)
122
					// ou suivant
115
					{
123
					if (event.getMouseWheelVelocityY() <= -1) {
116
						suiv.click() ;
124
						suiv.click();
117
					}
-
 
Line -... Line 125...
-
 
125
					}
Line 118... Line 126...
118
				}
126
				}
Line 119... Line -...
119
			}
-
 
120
		};
127
			}
121
		
128
			
Line 122... Line 129...
122
		
129
		};
123
		this.setHeader(false) ;
130
 
Line 124... Line 131...
124
		
131
		this.setHeader(false);
-
 
132
 
125
		
133
		imageConteneur = new Panel() ;
126
		imageConteneur = new Panel()  ;
134
		imageConteneur.setBorder(false);
127
		imageConteneur.setBorder(false);
135
 
Line 128... Line 136...
128
		
136
		imageConteneur.add(image);
Line 150... Line 158...
150
		this.setBorder(false);
158
		this.setBorder(false);
Line 151... Line 159...
151
		
159
 
152
		conteneurInitialise = true ;
160
		conteneurInitialise = true;
Line -... Line 161...
-
 
161
		initialise = true;
-
 
162
		
153
		initialise = true ;
163
		configDragAndDrop() ;
154
		
164
 
Line 155... Line 165...
155
		// on ajoute les listeners
165
		// on ajoute les listeners
Line 156... Line 166...
156
		ajouterListeners();
166
		ajouterListeners();
157
 
167
 
-
 
168
	}
-
 
169
 
158
	}
170
	/**
-
 
171
	 * Méthode héritée de l'interface rafraichissable
159
 
172
	 * 
160
	/**
173
	 * @param nouvelleDonnees
161
	 * Méthode héritée de l'interface rafraichissable
174
	 *            les nouvelles données
-
 
175
	 * @param repandreRafraichissement
Line 162... Line 176...
162
	 * @param nouvelleDonnees les nouvelles données
176
	 *            le booleen qui dit si on doit répnadre l'évènement
163
	 * @param repandreRafraichissement le booleen qui dit si on doit répnadre l'évènement
177
	 */
164
	 */
178
	public void rafraichir(Object nouvelleDonnees,
165
	public void rafraichir(Object nouvelleDonnees, boolean repandreRafraichissement) {
179
			boolean repandreRafraichissement) {
166
		
180
 
-
 
181
		// si on reçoit une string
167
		// si on reçoit une string
182
		if (nouvelleDonnees instanceof String[] && initialise
168
		if(nouvelleDonnees instanceof String[] && initialise && conteneurInitialise)
-
 
169
		{
-
 
170
			String[] infos = (String[])nouvelleDonnees ;
-
 
171
			// c'est l'url de l'image qu'on associe à la vue
-
 
172
			getImage().setUrl(infos[0]);
183
				&& conteneurInitialise) {
173
			
184
			String[] infos = (String[]) nouvelleDonnees;
Line 174... Line 185...
174
			
185
			// c'est l'url de l'image qu'on associe à la vue
Line -... Line 186...
-
 
186
			if (infos[0] != null && infos[1] != null && infos[2] != null && infos[3] != null) {
-
 
187
				getImage().setUrl(infos[0]);
175
			if(infos[1] != null && infos[2] != null)
188
				int x = Integer.parseInt(infos[1]);
176
			{
189
				int y = Integer.parseInt(infos[2]);
177
				int x = Integer.parseInt(infos[1]) ;
-
 
178
				int y = Integer.parseInt(infos[2]) ;
190
 
179
				
-
 
180
				setTailleImage(x,y) ;
191
				setTailleImage(x, y);
181
				
192
				
182
				verifierEtRetaillerImage() ;
193
				setIdImage(infos[3]) ;
183
			}
194
 
Line 184... Line 195...
184
		}
195
				verifierEtRetaillerImage();
185
		else
196
			}
186
		{
197
		} else {
187
			// sinon on met une image vide
198
			// sinon on met une image vide
188
			getImage().setUrl("vide.jpeg") ;
-
 
189
		}
199
			getImage().setUrl("vide.jpeg");
190
	}
200
		}
191
	
201
	}
192
	/**
202
 
Line 193... Line 203...
193
	 * Desactive visuellement le panneau et les boutons
203
	/**
194
	 */
204
	 * Desactive visuellement le panneau et les boutons
195
	public void desactiverPanneau()
205
	 */
196
	{
206
	public void desactiverPanneau() {
197
		getImage().setUrl("vide.jpeg") ;
-
 
198
		prev.setEnabled(false) ;
207
		getImage().setUrl("vide.jpeg");
199
		suiv.setEnabled(false);
208
		prev.setEnabled(false);
200
	}
209
		suiv.setEnabled(false);
Line 201... Line 210...
201
	
210
	}
202
	/**
211
 
203
	 * Active visuellement le panneau et les boutons
212
	/**
204
	 */
213
	 * Active visuellement le panneau et les boutons
205
	public void activerPanneau()
-
 
Line 206... Line 214...
206
	{
214
	 */
207
		prev.setEnabled(true);
215
	public void activerPanneau() {
Line 208... Line 216...
208
		suiv.setEnabled(true);
216
		prev.setEnabled(true);
Line 239... Line 247...
239
		// gestion du redimensionnement
247
		// gestion du redimensionnement
240
		this.addListener(new PanelListenerAdapter() {
248
		this.addListener(new PanelListenerAdapter() {
Line 241... Line 249...
241
			
249
 
Line 242... Line 250...
242
			// lors d'un redimensionnement de l'application
250
			// lors d'un redimensionnement de l'application
243
			
251
 
244
			public void onBodyResize(Panel panel,java.lang.String width,java.lang.String height)
252
			public void onBodyResize(Panel panel, java.lang.String width,
245
			{
253
					java.lang.String height) {
246
				// on vérifie et on retaille l'image
254
				// on vérifie et on retaille l'image
247
				verifierEtRetaillerImage() ;
255
				verifierEtRetaillerImage();
Line 248... Line 256...
248
			}
256
			}
249
		}) ;
257
		});
Line 250... Line 258...
250
		
258
 
Line 251... Line 259...
251
		// gestion du redimensionnement lors de l'affichage du conteneur
259
		// gestion du redimensionnement lors de l'affichage du conteneur
252
		imageConteneur.addListener(new PanelListenerAdapter() {
-
 
253
			
260
		imageConteneur.addListener(new PanelListenerAdapter() {
254
			// avant de finir d'afficher
261
 
255
			
262
			// avant de finir d'afficher
256
			public void onAfterLayout(Container self)
263
 
Line 257... Line 264...
257
			{
264
			public void onAfterLayout(Container self) {
Line 258... Line 265...
258
				// on redimensionne
265
				// on redimensionne
259
				verifierEtRetaillerImage() ;
266
				verifierEtRetaillerImage();
-
 
267
			}
260
			}
268
		});
261
		}) ;
269
 
262
		
-
 
263
	}
270
	}
264
 
271
 
265
	/**
-
 
266
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas echeant
272
	/**
267
	 */
273
	 * Verifie si l'image est plus grande que le conteneur et la retaille le cas
268
	public void verifierEtRetaillerImage()
274
	 * echeant
Line 269... Line 275...
269
	{
275
	 */
270
		// si l'image est nulle
276
	public void verifierEtRetaillerImage() {
271
		if(image == null)
277
		// si l'image est nulle
Line 272... Line 278...
272
		{
278
		if (image == null) {
-
 
279
			// on ne fait rien
273
			// on ne fait rien
280
			return;
274
			return ;
281
		}
Line 275... Line 282...
275
		}	
282
 
276
		
283
		// on prend la taille originale de l'image
Line 292... Line 299...
292
		// on prend la taille du conteneur
299
		// on prend la taille du conteneur
293
		int tailleConteneurX = imageConteneur.getWidth() ;
300
		int tailleConteneurX = imageConteneur.getWidth();
294
		int tailleConteneurY = imageConteneur.getHeight() ;
301
		int tailleConteneurY = imageConteneur.getHeight();
Line 295... Line 302...
295
		
302
 
-
 
303
		// si celle-ci est égale à 0 (conteneur mal initialisé)
296
		// si celle-ci est égale à 0 (conteneur mal initialisé)
304
		/*
-
 
305
		 * if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0) { // on
-
 
306
		 * essaie de la calculer en fonction de la taille du parent et des
-
 
307
		 * frères tailleConteneurY = this.getHeight() ; tailleConteneurX =
-
 
308
		 * this.getWidth() - prev.getOffsetWidth() * 2 ;
-
 
309
		 *  }
-
 
310
		 */
-
 
311
 
-
 
312
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop
-
 
313
		// grande)
-
 
314
		if (originalY > tailleConteneurY || originalX > tailleConteneurX) {
-
 
315
			// si la longueur de l'image est la plus grande des deux
-
 
316
			if (originalX > originalY) {
-
 
317
				// on prend la longueur comme taille de référence, qu'on met à
-
 
318
				// la longueur du conteneur
-
 
319
				nouvelleTailleX = tailleConteneurX;
-
 
320
				// et on recalcule la hauteur, par rapport à la nouvelle
-
 
321
				// longueur, en gardant le format de 'limage
-
 
322
				nouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1
-
 
323
						/ rapportTaille);
-
 
324
			} else {
-
 
325
				// si la hauteur est la plus grande, on fait le même genre
-
 
326
				// d'opération en prenant la hauteur comme référence
-
 
327
				nouvelleTailleY = tailleConteneurY;
-
 
328
				nouvelleTailleX = (int) Math.floor(nouvelleTailleY
-
 
329
						* rapportTaille);
-
 
330
			}
-
 
331
		}
-
 
332
 
-
 
333
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
-
 
334
		getImage().setSize("" + nouvelleTailleX + "px",
-
 
335
				"" + nouvelleTailleY + "px");
-
 
336
	}
-
 
337
	
297
		/*if(imageConteneur.getHeight() == 0 && tailleConteneurX == 0)
338
	public void configDragAndDrop()
298
		{
-
 
299
			// on essaie de la calculer en fonction de la taille du parent et des frères
-
 
300
			tailleConteneurY = this.getHeight() ;
-
 
Line -... Line 339...
-
 
339
	{
-
 
340
 
-
 
341
		// on fabrique la nouvelle configuration
301
			tailleConteneurX = this.getWidth() - prev.getOffsetWidth() * 2 ;
342
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
Line 302... Line 343...
302
			
343
		DropTargetConfig dtc = new DropTargetConfig();
-
 
344
		dtc.setdDdGroup("DragGroupName");
303
		}*/
345
 
304
		 
346
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
-
 
347
		@SuppressWarnings("unused")
-
 
348
		DropTarget tg = new DropTarget(this, dtc)
305
		// si l'image ne rentre pas telle quelle (longueur ou hauteur trop grande)
349
		{
306
		if(originalY > tailleConteneurY || originalX > tailleConteneurX)
350
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
307
		{
351
				
308
			// si la longueur de l'image est la plus grande des deux
-
 
309
			if(originalX > originalY)
352
				// si on reçoit des données provenant d'une grille
310
			{		
-
 
311
				// on prend la longueur comme taille de référence, qu'on met à la longueur du conteneur
353
				if(data instanceof GridDragData)
312
				nouvelleTailleX = tailleConteneurX ;
354
		    	  {
313
				// et on recalcule la hauteur, par rapport à la nouvelle longueur, en gardant le format de 'limage
355
		    		  		// on appelle le médiateur
314
				nouvelleTailleY = (int)Math.floor(nouvelleTailleX*1/rapportTaille) ;
-
 
315
			}
-
 
316
			else
-
 
317
			{				
-
 
318
				// si la hauteur est la plus grande, on fait le même genre d'opération en prenant la hauteur comme référence
356
		    		  		return iMediateur.lierObsDD(source, e, data,getId()) ;   
-
 
357
		    	  }
-
 
358
				return false ;
-
 
359
			}
319
				nouvelleTailleY = tailleConteneurY ;
360
			
-
 
361
			public String notifyOver(DragSource source, EventObject e, DragData data){
Line 320... Line -...
320
				nouvelleTailleX = (int)Math.floor(nouvelleTailleY*rapportTaille) ;
-
 
321
			}		
-
 
322
		}
362
			    return "x-dd-drop-ok";
Line 323... Line 363...
323
		
363
			}
324
		// on modifie enfin la taille de l'image pour qu'elle soit affichée
364
		};
-
 
365
        
325
		getImage().setSize(""+nouvelleTailleX+"px", ""+nouvelleTailleY+"px") ;		
366
	}
326
	}
367
 
327
 
368
	/**
328
	/**
369
	 * Accesseur pour le médiateur
329
	 * Accesseur pour le médiateur
370
	 * 
Line 330... Line 371...
330
	 * @return le médiateur associé à la vue
371
	 * @return le médiateur associé à la vue
331
	 */
372
	 */
-
 
373
	public ImageMediateur getIMediateur() {
332
	public ImageMediateur getIMediateur() {
374
		return iMediateur;
333
		return iMediateur;
375
	}
334
	}
376
 
335
 
377
	/**
336
	/**
378
	 * Accesseur au conteneur de l'image
Line 337... Line 379...
337
	 * Accesseur au conteneur de l'image
379
	 * 
-
 
380
	 * @return le conteneur de l'image
-
 
381
	 */
-
 
382
	public Image getImage() {
-
 
383
		return image;
-
 
384
	}
-
 
385
	
-
 
386
	/**
-
 
387
	 * Acesseurs pour l'identifiant de l'image
-
 
388
	 * @return l'id de l'image
338
	 * @return le conteneur de l'image
389
	 */
-
 
390
	public String getIdImage()
339
	 */
391
	{
340
	public Image getImage() {
392
		return idImage ;
341
		return image;
393
	}
342
	}
394
 
343
 
395
	/**
Line 344... Line 396...
344
	/**
396
	 * Accesseur pour le bouton précédent
345
	 * Accesseur pour le bouton précédent
397
	 * 
-
 
398
	 * @return le bouton précédent
346
	 * @return le bouton précédent
399
	 */
347
	 */
400
	public com.google.gwt.user.client.ui.Button getPrev() {
348
	public com.google.gwt.user.client.ui.Button getPrev() {
401
		return prev;
349
		return prev;
402
	}
350
	}
403
 
Line 351... Line 404...
351
 
404
	/**
352
	/**
405
	 * Accesseur pour le bouton suivant
-
 
406
	 * 
-
 
407
	 * @return le bouton suivant
353
	 * Accesseur pour le bouton suivant
408
	 */
-
 
409
	public com.google.gwt.user.client.ui.Button getSuiv() {
354
	 * @return le bouton suivant
410
		return suiv;
355
	 */
411
	}
356
	public com.google.gwt.user.client.ui.Button getSuiv() {
412
 
357
		return suiv;
-
 
358
	}
413
	/**
359
	
414
	 * Setter pour la taille de l'image
360
	/**
415
	 * 
Line 361... Line 416...
361
	 * Setter pour la taille de l'image
416
	 * @param X
-
 
417
	 *            la largeur en pixels
-
 
418
	 * @param Y
-
 
419
	 *            la hauteur en pixels
-
 
420
	 */
-
 
421
	public void setTailleImage(int x, int y) {
-
 
422
		imageHeight = y;
-
 
423
		imageWidth = x;
-
 
424
	}
-
 
425
	
362
	 * @param X la largeur en pixels
426
	/**
-
 
427
	 * Setteur pour l'identifiant de l'image
363
	 * @param Y la hauteur en pixels
428
	 * @param id le nouvel identifiant
364
	 */
429
	 */
365
	public void setTailleImage(int x, int y)
430
	public void setIdImage(String id)
366
	{
-
 
367
		imageHeight = y ;
431
	{
Line 368... Line 432...
368
		imageWidth = x ;
432
		idImage = id ;
369
	}
433
	}
Line -... Line 434...
-
 
434
 
-
 
435
	/**
-
 
436
	 * renvoie la taille originale de l'image
-
 
437
	 * 
370
	
438
	 * @return un tableau de deux entiers contenant la largeur puis la hauteur
Line 371... Line 439...
371
	/**
439
	 */
Line 372... Line 440...
372
	 * renvoie la taille originale de l'image
440
	public int[] getTailleImage() {