Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 36 | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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