Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2 Rev 5
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import org.tela_botanica.client.image.ImageMediateur;
3
import org.tela_botanica.client.image.ImageMediateur;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.VueListable;
5
import org.tela_botanica.client.interfaces.VueListable;
6
 
6
 
7
import com.google.gwt.user.client.Element;
7
import com.google.gwt.user.client.Element;
8
import com.google.gwt.user.client.Window;
-
 
9
import com.gwtext.client.core.EventObject;
8
import com.gwtext.client.core.EventObject;
10
import com.gwtext.client.core.XTemplate;
9
import com.gwtext.client.core.XTemplate;
11
import com.gwtext.client.data.FieldDef;
10
import com.gwtext.client.data.FieldDef;
12
import com.gwtext.client.data.IntegerFieldDef;
11
import com.gwtext.client.data.IntegerFieldDef;
13
import com.gwtext.client.data.Record;
12
import com.gwtext.client.data.Record;
14
import com.gwtext.client.data.RecordDef;
13
import com.gwtext.client.data.RecordDef;
15
import com.gwtext.client.data.Store;
14
import com.gwtext.client.data.Store;
16
import com.gwtext.client.data.StringFieldDef;
15
import com.gwtext.client.data.StringFieldDef;
-
 
16
import com.gwtext.client.dd.DragData;
-
 
17
import com.gwtext.client.dd.DragSource;
-
 
18
import com.gwtext.client.dd.DropTarget;
-
 
19
import com.gwtext.client.dd.DropTargetConfig;
17
import com.gwtext.client.util.Format;
20
import com.gwtext.client.util.Format;
18
import com.gwtext.client.widgets.Component;
21
import com.gwtext.client.widgets.Component;
19
import com.gwtext.client.widgets.DataView;
22
import com.gwtext.client.widgets.DataView;
20
import com.gwtext.client.widgets.Panel;
23
import com.gwtext.client.widgets.Panel;
21
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
24
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
22
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
25
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
-
 
26
import com.gwtext.client.widgets.grid.GridDragData;
23
 
27
 
24
/**
28
/**
25
 * Galerie d'images miniatures
29
 * Galerie d'images miniatures Avec barre de pagination
26
 * Avec barre de pagination 
30
 * 
27
 * @author aurelien
31
 * @author aurelien
28
 */
32
 */
-
 
33
public class GalerieImageVue extends Panel implements Rafraichissable,
29
public class GalerieImageVue extends Panel implements Rafraichissable, VueListable {
34
		VueListable {
30
 
35
 
31
	/**
36
	/**
32
	 * instance du médiateur
37
	 * instance du médiateur
33
	 */ 
38
	 */
34
	private ImageMediateur	iMediateur	= null;
39
	private ImageMediateur iMediateur = null;
-
 
40
	/**
-
 
41
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
-
 
42
	 * d'afficher les données
-
 
43
	 */
-
 
44
	private DataView dView = null;
35
	/**
45
	/**
36
	 * Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
46
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
37
	 */ 
-
 
38
	private DataView		dView		= null;
47
	 * d'afficher les données
39
	/**
-
 
40
	 * Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
-
 
41
	 */ 
48
	 */
42
	private Store			st			= null;
49
	private Store st = null;
43
	/**
50
	/**
44
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par page et la navigation entre eux
51
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par
-
 
52
	 * page et la navigation entre eux
45
	 */ 
53
	 */
46
	private pageToolBarVue	pt 			= null ;
54
	private pageToolBarVue pt = null;
47
	/**
55
	/**
48
	 * Booleen indiquant si la galerie est instanciée ou pas
56
	 * Booleen indiquant si la galerie est instanciée ou pas
49
	 */ 
57
	 */
50
	private boolean 		estInstancie = false ;
58
	private boolean estInstancie = false;
51
 
59
 
52
	/**
60
	/**
53
	 * Constructeur sans argument, privé car ne doit pas être utilisé
61
	 * Constructeur sans argument, privé car ne doit pas être utilisé
54
	 */
62
	 */
55
	@SuppressWarnings("unused")
63
	@SuppressWarnings("unused")
56
	private GalerieImageVue()
64
	private GalerieImageVue() {
57
	{
-
 
58
		super() ;
65
		super();
59
	}
66
	}
60
	
67
 
61
	/**
68
	/**
62
	 * Constructeur avec argument
69
	 * Constructeur avec argument
-
 
70
	 * 
-
 
71
	 * @param im
63
	 * @param im le médiateur avec lequel la vue va communiquer
72
	 *            le médiateur avec lequel la vue va communiquer
64
	 */
73
	 */
65
	public GalerieImageVue(ImageMediateur im) {
74
	public GalerieImageVue(ImageMediateur im) {
66
		super("Galerie");
75
		super("Galerie");
67
		iMediateur = im;
76
		iMediateur = im;
68
		
77
 
69
		// on ajoute des listeners au composant tout entier
78
		// on ajoute des listeners au composant tout entier
70
		this.addListener(new ContainerListenerAdapter() {
79
		this.addListener(new ContainerListenerAdapter() {
71
 
80
 
-
 
81
			// pour gagner du temps on n'instancie la vue en elle même que lors
72
			// pour gagner du temps on n'instancie la vue en elle même que lors du premier affichage (lazy rendering)
82
			// du premier affichage (lazy rendering)
73
			
83
 
74
			public void onShow(Component component) {
84
			public void onShow(Component component) {
75
 
85
 
76
				if (!estInstancie) {
86
				if (!estInstancie) {
77
					initialiser();
87
					initialiser();
78
				}
88
				}
79
			}
89
			}
80
 
90
 
81
		});
91
		});
82
		
92
 
83
		// et on ajoute la tool bar
93
		// et on ajoute la tool bar
84
		pt = new pageToolBarVue(im) ;
94
		pt = new pageToolBarVue(im);
85
		this.setBottomToolbar(pt) ;
95
		this.setBottomToolbar(pt);
86
 
96
 
87
	}
97
	}
88
 
98
 
89
	/**
99
	/**
90
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la vue de données
100
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la
-
 
101
	 * vue de données
91
	 */
102
	 */
92
	public void ajouterListenersDataView() {
103
	public void ajouterListenersDataView() {
93
 
104
 
94
		// ajout de listeners pour la gestion de la selection
105
		// ajout de listeners pour la gestion de la selection
95
		// dans la galerie
106
		// dans la galerie
96
		dView.addListener(new DataViewListenerAdapter() {
107
		dView.addListener(new DataViewListenerAdapter() {
97
			
108
 
98
			// gestion du clic sur une image
109
			// gestion du clic sur une image
99
			
110
 
100
			public void onClick(DataView source, int index, Element node,
111
			public void onClick(DataView source, int index, Element node,
101
					EventObject e) {
112
					EventObject e) {
102
				
113
 
103
				// on en notifie le médiateur
114
				// on en notifie le médiateur
104
				getIMediateur().clicGalerieImage(index, node, e);
115
				getIMediateur().clicGalerieImage(index, node, e);
105
 
116
 
106
			}
117
			}
107
 
118
 
108
			// gestion du clic droit
119
			// gestion du clic droit
109
			
120
 
110
			public void onContextMenu(DataView source, int index, Element node,
121
			public void onContextMenu(DataView source, int index, Element node,
111
					EventObject e) {
122
					EventObject e) {
112
 
123
 
113
				// on stoppe l'évenement       
124
				// on stoppe l'évenement
114
				e.stopEvent();
125
				e.stopEvent();
115
				// et on notifie le médiateur
126
				// et on notifie le médiateur
116
				getIMediateur().montrerContextMenu(e);
127
				getIMediateur().montrerContextMenu(e);
117
 
128
 
118
			}
129
			}
119
 
130
 
120
			// gestion du double clic
131
			// gestion du double clic
121
			
132
 
122
			public void onDblClick(DataView source, int index, Element node,
133
			public void onDblClick(DataView source, int index, Element node,
123
					EventObject e) {
134
					EventObject e) {
124
 
135
 
125
				// on notife le mediateur
136
				// on notife le mediateur
126
				getIMediateur().clicGalerieImage(index, node, e);
137
				getIMediateur().clicGalerieImage(index, node, e);
127
				
138
 
128
			}
139
			}
129
 
140
 
130
			// gestion des actions en fonction de la selection
141
			// gestion des actions en fonction de la selection
131
			
142
 
132
			public void onSelectionChange(DataView view, Element[] selections) {
143
			public void onSelectionChange(DataView view, Element[] selections) {
133
 
144
 
134
				// s'il n'y a aucun élement sélectionné
145
				// s'il n'y a aucun élement sélectionné
135
				if (selections.length <= 0) {
146
				if (selections.length <= 0) {
136
					// on en notifie le médiateur
147
					// on en notifie le médiateur
137
					getIMediateur().aucuneSelection();
148
					getIMediateur().aucuneSelection();
138
				} else {
149
				} else {
139
					// sinon on notifie le médiateur
150
					// sinon on notifie le médiateur
140
					getIMediateur().selection();
151
					getIMediateur().selection();
141
					// et on lui demande de synchroniser la séléction avec les autres vues
152
					// et on lui demande de synchroniser la séléction avec les
-
 
153
					// autres vues
142
					getIMediateur().synchroniserSelection("galerie");
154
					getIMediateur().synchroniserSelection("galerie");
143
				}
155
				}
144
			}
156
			}
145
 
157
 
146
		});
158
		});
147
	}
159
	}
148
 
160
 
149
	/**
161
	/**
150
	 * Accesseur pour la dataview
162
	 * Accesseur pour la dataview
-
 
163
	 * 
151
	 * @return la dataview 
164
	 * @return la dataview
152
	 */
165
	 */
153
	public DataView getDView() {
166
	public DataView getDView() {
154
		return dView;
167
		return dView;
155
	}
168
	}
156
 
169
 
157
	/**
170
	/**
158
	 * Renvoie les ids des images sélectionnées
171
	 * Renvoie les ids des images sélectionnées
-
 
172
	 * 
159
	 * @return un tableau de String contenant les identifiants des images sélectionnées
173
	 * @return un tableau de String contenant les identifiants des images
-
 
174
	 *         sélectionnées
160
	 */
175
	 */
161
	public String[] getIdSelectionnees() {
176
	public String[] getIdSelectionnees() {
162
		Record[] selection = getDView().getSelectedRecords();
177
		Record[] selection = getDView().getSelectedRecords();
163
		int taille = selection.length;
178
		int taille = selection.length;
164
		String id_selection[] = new String[taille];
179
		String id_selection[] = new String[taille];
165
 
180
 
166
		for (int i = 0; i < selection.length; i++) {
181
		for (int i = 0; i < selection.length; i++) {
167
 
182
 
168
			id_selection[i] = selection[i].getAsString("num_image");
183
			id_selection[i] = selection[i].getAsString("num_image");
169
		}
184
		}
170
 
185
 
171
		return id_selection;
186
		return id_selection;
172
	}
187
	}
173
 
188
 
174
	/**
189
	/**
175
	 * Accesseur pour le médiateur
190
	 * Accesseur pour le médiateur
-
 
191
	 * 
176
	 * @return le médiateur associé à la vue
192
	 * @return le médiateur associé à la vue
177
	 */
193
	 */
178
	public ImageMediateur getIMediateur() {
194
	public ImageMediateur getIMediateur() {
179
		return iMediateur;
195
		return iMediateur;
180
	}
196
	}
181
 
197
 
182
	/**
198
	/**
183
	 * Accesseur pour le store
199
	 * Accesseur pour le store
-
 
200
	 * 
184
	 * @return le store associé à la vue
201
	 * @return le store associé à la vue
185
	 */
202
	 */
186
	public Store getSt() {
203
	public Store getSt() {
187
		return st;
204
		return st;
188
	}
205
	}
189
	
206
 
190
	/**
207
	/**
191
	 * Accesseur pour la toolbar 
208
	 * Accesseur pour la toolbar
-
 
209
	 * 
192
	 * @return la toolbar associée à la vue
210
	 * @return la toolbar associée à la vue
193
	 */
211
	 */
194
	public pageToolBarVue getToolBarVue()
212
	public pageToolBarVue getToolBarVue() {
195
	{
-
 
196
		return pt ;
213
		return pt;
197
	}
214
	}
198
 
215
 
199
	/**
216
	/**
200
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage de la liste)
217
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage
-
 
218
	 * de la liste)
201
	 */
219
	 */
202
	public void initialiser() {
220
	public void initialiser() {
203
		
221
 
204
		// Preparation de la dataview et du template
222
		// Preparation de la dataview et du template
205
		// le template va créer une div contenant une image
223
		// le template va créer une div contenant une image
206
		// pour chacune des photos
224
		// pour chacune des photos
207
		final XTemplate template = new XTemplate(
225
		final XTemplate template = new XTemplate(
208
				new String[] {
226
				new String[] {
209
						"<tpl for='.'>",
227
						"<tpl for='.'>",
210
						"<div class='thumb-wrap' id='{num_image}'>",
228
						"<div class='thumb-wrap' id='{num_image}'>",
211
						"<div class='thumb'><img src='{url_image_M}' title='{num_image}'></div>",
229
						"<div class='thumb'><img src='{url_image_M}' title='{num_image}'></div>",
212
						"<span>{nom}</span></div>", "</tpl>",
230
						"<span>{nom}</span></div>", "</tpl>",
213
						"<div class='x-clear'></div>" });
231
						"<div class='x-clear'></div>" });
214
		// pour des raisons de performances on compile le template en une fonction
232
		// pour des raisons de performances on compile le template en une
-
 
233
		// fonction
215
		template.compile();
234
		template.compile();
216
 
235
 
217
		// la dataview affichera les images en accord avec le template
236
		// la dataview affichera les images en accord avec le template
218
		// cree precedemment
237
		// cree precedemment
219
		dView = new DataView("div.thumb-wrap") {
238
		dView = new DataView("div.thumb-wrap") {
220
 
-
 
221
			
239
 
222
			public void prepareData(Data data) {
240
			public void prepareData(Data data) {
223
				data.setProperty("shortName", Format.ellipsis(data
241
				data.setProperty("shortName", Format.ellipsis(data
224
						.getProperty("num_image"), 15));
242
						.getProperty("num_image"), 15));	
-
 
243
			}
225
			}
244
			
226
		};
245
		};
227
		dView.setTpl(template);
246
		dView.setTpl(template);
228
 
247
 
229
		// parametre d'affichage de la dataview
248
		// parametre d'affichage de la dataview
230
		this.setAutoScroll(true);
249
		this.setAutoScroll(true);
231
		dView.setAutoHeight(true);
250
		dView.setAutoHeight(true);
232
		dView.setMultiSelect(true);
251
		dView.setMultiSelect(true);
233
		dView.setOverCls("x-view-over");
252
		dView.setOverCls("x-view-over");
234
		dView.setEmptyText("Aucune image à afficher");
253
		dView.setEmptyText("Aucune image à afficher");
235
 
254
 
236
		// creation du store
255
		// creation du store
237
		FieldDef defNumImage = new IntegerFieldDef("num_image");
256
		FieldDef defNumImage = new IntegerFieldDef("num_image");
238
		FieldDef defDatImage = new StringFieldDef("dat_image");
257
		FieldDef defDatImage = new StringFieldDef("dat_image");
239
		FieldDef defLieImage = new StringFieldDef("lie_image");
258
		FieldDef defLieImage = new StringFieldDef("lie_image");
240
		FieldDef defAppImage = new StringFieldDef("app_image");
259
		FieldDef defAppImage = new StringFieldDef("app_image");
241
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
260
		FieldDef defUrlImageS = new StringFieldDef("url_image_S");
242
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
261
		FieldDef defUrlImageM = new StringFieldDef("url_image_M");
243
		FieldDef defUrlImage = new StringFieldDef("url_image");
262
		FieldDef defUrlImage = new StringFieldDef("url_image");
244
		FieldDef[] defTab = { defNumImage, defDatImage, defLieImage,
263
		FieldDef[] defTab = { defNumImage, defDatImage, defLieImage,
245
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage };
264
				defAppImage, defUrlImageS, defUrlImageM, defUrlImage };
246
		RecordDef rd = new RecordDef(defTab);
265
		RecordDef rd = new RecordDef(defTab);
247
		st = new Store(rd);
266
		st = new Store(rd);
248
		dView.setStore(st);
267
		dView.setStore(st);
249
		
-
 
250
 
268
 
251
		this.getDView().setLoadingText("chargement");
269
		this.getDView().setLoadingText("chargement");
252
 
270
 
253
		// ajouts de la gestion des evenements pour la dataview
271
		// ajouts de la gestion des evenements pour la dataview
254
		ajouterListenersDataView();
272
		ajouterListenersDataView();
-
 
273
		configDragAndDrop() ;
255
 
274
 
256
		this.add(dView);
275
		this.add(dView);
257
		
276
 
258
		// enfin on envoie une demande de données au médiateur
277
		// enfin on envoie une demande de données au médiateur
259
		getIMediateur().obtenirPhotoGalerie(this);
278
		getIMediateur().obtenirPhotoGalerie(this);
260
		// et on déclare le composant comme instancié
279
		// et on déclare le composant comme instancié
261
		estInstancie = true ;
280
		estInstancie = true;
-
 
281
	}
-
 
282
	
-
 
283
	public void configDragAndDrop()
-
 
284
	{
-
 
285
		// on fabrique la nouvelle configuration
-
 
286
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
-
 
287
		DropTargetConfig dtc = new DropTargetConfig();
-
 
288
		dtc.setdDdGroup("DragGroupName");
-
 
289
 
-
 
290
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
-
 
291
		@SuppressWarnings("unused")
-
 
292
		DropTarget tg = new DropTarget(this, dtc)
-
 
293
		{
-
 
294
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){		
-
 
295
				
-
 
296
				// si les données proviennent d'une grille
-
 
297
				if(data instanceof GridDragData)
-
 
298
		    	{
-
 
299
					// on appelle le médiateur
-
 
300
		    		  	return iMediateur.lierObsDD(source, e, data,getId()) ;   
-
 
301
		    	}
-
 
302
				return false ;
-
 
303
			}
-
 
304
			
-
 
305
			public String notifyOver(DragSource source, EventObject e, DragData data){
-
 
306
			    return "x-dd-drop-ok";
-
 
307
			}
-
 
308
		};
-
 
309
        
262
	}
310
	}
263
 
311
 
264
	/**
312
	/**
265
	 * Méthode héritée de l'interface rafraichissable
313
	 * Méthode héritée de l'interface rafraichissable
266
	 */
314
	 */
267
	public void rafraichir(Object nouvelleDonnees,
315
	public void rafraichir(Object nouvelleDonnees,
268
			boolean repandreRafraichissement) {
316
			boolean repandreRafraichissement) {
269
 
317
 
270
		// si l'objet reçu est un store
318
		// si l'objet reçu est un store
271
		if (nouvelleDonnees instanceof Store) {
319
		if (nouvelleDonnees instanceof Store) {
272
			
320
 
273
			st = (Store) nouvelleDonnees;
321
			st = (Store) nouvelleDonnees;
274
			// on le charge
322
			// on le charge
275
			st.load();
323
			st.load();
276
			// on l'affecte à la vue
324
			// on l'affecte à la vue
277
			dView.setStore(st);
325
			dView.setStore(st);
278
			// et on rafrachit la vue
326
			// et on rafrachit la vue
279
			dView.refresh();
327
			dView.refresh();
280
			
328
 
281
		}
329
		}
282
 
330
 
283
		// si le composant doit répandre le rafraichissement
331
		// si le composant doit répandre le rafraichissement
284
		if (repandreRafraichissement) {
332
		if (repandreRafraichissement) {
285
			// il en notifie le médiateur en lui donnant une copie des données et en notifiant qu'il en est l'expéditeur
333
			// il en notifie le médiateur en lui donnant une copie des données
-
 
334
			// et en notifiant qu'il en est l'expéditeur
286
			getIMediateur().synchroniserDonneesZoomListeGalerie(
335
			getIMediateur().synchroniserDonneesZoomListeGalerie(
287
					nouvelleDonnees, this);
336
					nouvelleDonnees, this);
288
		}
337
		}
289
		
338
 
290
		// si c'est la première mise à jour que l'on reçoit
339
		// si c'est la première mise à jour que l'on reçoit
291
		if(!estInstancie)
340
		if (!estInstancie) {
292
		{
-
 
293
			// alors le composant est considéré comme instancié
341
			// alors le composant est considéré comme instancié
294
			estInstancie = true ;
342
			estInstancie = true;
295
		}
343
		}
296
	}
344
	}
297
 
345
 
298
	/**
346
	/**
299
	 * Méthode héritée de l'interface VueListable
347
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
300
	 * Sélectionne les images dans la galerie suivant les identifiants donnés en paramètres
348
	 * galerie suivant les identifiants donnés en paramètres
-
 
349
	 * 
-
 
350
	 * @param ids
301
	 * @param ids les identifiants des images à sélectionner
351
	 *            les identifiants des images à sélectionner
302
	 */
352
	 */
303
	public void selectionnerImages(int[] ids) {
353
	public void selectionnerImages(int[] ids) {
304
 
354
 
305
		getDView().select(ids);
355
		getDView().select(ids);
306
 
356
 
307
	}
357
	}
308
	
358
 
309
}
359
}