Subversion Repositories eFlore/Archives.cel-v2

Rev

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

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