Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 2 Rev 5
Line 3... Line 3...
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;
Line 6... Line 6...
6
 
6
 
7
import com.google.gwt.user.client.Element;
-
 
8
import com.google.gwt.user.client.Window;
7
import com.google.gwt.user.client.Element;
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;
-
 
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;
16
import com.gwtext.client.data.StringFieldDef;
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;
-
 
25
import com.gwtext.client.widgets.event.DataViewListenerAdapter;
Line 22... Line 26...
22
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
-
 
32
 */
Line 28... Line 33...
28
 */
33
public class GalerieImageVue extends Panel implements Rafraichissable,
29
public class GalerieImageVue extends Panel implements Rafraichissable, VueListable {
34
		VueListable {
30
 
35
 
31
	/**
36
	/**
-
 
37
	 * instance du médiateur
-
 
38
	 */
-
 
39
	private ImageMediateur iMediateur = null;
-
 
40
	/**
-
 
41
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
32
	 * instance du médiateur
42
	 * d'afficher les données
33
	 */ 
43
	 */
34
	private ImageMediateur	iMediateur	= null;
-
 
35
	/**
44
	private DataView dView = null;
36
	 * Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
-
 
37
	 */ 
-
 
38
	private DataView		dView		= null;
45
	/**
39
	/**
46
	 * Dataview, littéralement "vue de données" qui permet de définir la manière
40
	 * Dataview, littéralement "vue de données" qui permet de définir la manière d'afficher les données
47
	 * d'afficher les données
41
	 */ 
48
	 */
-
 
49
	private Store st = null;
42
	private Store			st			= null;
50
	/**
43
	/**
51
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par
44
	 * Barre de pagination gérant l'affichage d'un nombre donné d'élements par page et la navigation entre eux
52
	 * page et la navigation entre eux
45
	 */ 
53
	 */
46
	private pageToolBarVue	pt 			= null ;
54
	private pageToolBarVue pt = null;
47
	/**
55
	/**
Line 48... Line 56...
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é
-
 
54
	 */
61
	 * Constructeur sans argument, privé car ne doit pas être utilisé
55
	@SuppressWarnings("unused")
62
	 */
56
	private GalerieImageVue()
63
	@SuppressWarnings("unused")
57
	{
64
	private GalerieImageVue() {
58
		super() ;
65
		super();
-
 
66
	}
-
 
67
 
59
	}
68
	/**
60
	
69
	 * Constructeur avec argument
61
	/**
70
	 * 
62
	 * Constructeur avec argument
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");
Line 67... Line 76...
67
		iMediateur = im;
76
		iMediateur = im;
-
 
77
 
68
		
78
		// on ajoute des listeners au composant tout entier
69
		// on ajoute des listeners au composant tout entier
79
		this.addListener(new ContainerListenerAdapter() {
Line 70... Line 80...
70
		this.addListener(new ContainerListenerAdapter() {
80
 
71
 
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
 
Line 74... Line 84...
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
				}
Line 79... Line 89...
79
			}
89
			}
Line 80... Line 90...
80
 
90
 
81
		});
91
		});
-
 
92
 
82
		
93
		// et on ajoute la tool bar
83
		// et on ajoute la tool bar
94
		pt = new pageToolBarVue(im);
Line 84... Line 95...
84
		pt = new pageToolBarVue(im) ;
95
		this.setBottomToolbar(pt);
85
		this.setBottomToolbar(pt) ;
96
 
86
 
97
	}
87
	}
98
 
88
 
99
	/**
89
	/**
100
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la
90
	 * Ajoute tous les listeners nécessaires à l'intercation utilisateur avec la vue de données
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
Line 95... Line 106...
95
		// dans la galerie
106
		// dans la galerie
Line 96... Line 107...
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
 
Line 100... Line 111...
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
Line 104... Line 115...
104
				getIMediateur().clicGalerieImage(index, node, e);
115
				getIMediateur().clicGalerieImage(index, node, e);
Line 105... Line 116...
105
 
116
 
106
			}
117
			}
107
 
118
 
108
			// gestion du clic droit
119
			// gestion du clic droit
Line 109... Line 120...
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
 
Line 113... Line 124...
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
Line 116... Line 127...
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) {
-
 
135
 
124
 
136
				// on notife le mediateur
125
				// on notife le mediateur
137
				getIMediateur().clicGalerieImage(index, node, e);
126
				getIMediateur().clicGalerieImage(index, node, e);
138
 
Line 127... Line 139...
127
				
139
			}
128
			}
140
 
Line 129... Line 141...
129
 
141
			// gestion des actions en fonction de la selection
130
			// gestion des actions en fonction de la selection
142
 
-
 
143
			public void onSelectionChange(DataView view, Element[] selections) {
131
			
144
 
132
			public void onSelectionChange(DataView view, Element[] selections) {
145
				// s'il n'y a aucun élement sélectionné
133
 
146
				if (selections.length <= 0) {
134
				// s'il n'y a aucun élement sélectionné
147
					// on en notifie le médiateur
135
				if (selections.length <= 0) {
148
					getIMediateur().aucuneSelection();
Line 136... Line 149...
136
					// on en notifie le médiateur
149
				} else {
137
					getIMediateur().aucuneSelection();
150
					// sinon on notifie le médiateur
-
 
151
					getIMediateur().selection();
138
				} else {
152
					// et on lui demande de synchroniser la séléction avec les
-
 
153
					// autres vues
139
					// sinon on notifie le médiateur
154
					getIMediateur().synchroniserSelection("galerie");
140
					getIMediateur().selection();
155
				}
141
					// et on lui demande de synchroniser la séléction avec les autres vues
156
			}
142
					getIMediateur().synchroniserSelection("galerie");
157
 
143
				}
158
		});
Line 171... Line 186...
171
		return id_selection;
186
		return id_selection;
172
	}
187
	}
Line 173... Line 188...
173
 
188
 
174
	/**
189
	/**
-
 
190
	 * Accesseur pour le médiateur
175
	 * 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;
Line 180... Line 196...
180
	}
196
	}
181
 
197
 
-
 
198
	/**
182
	/**
199
	 * Accesseur pour le store
183
	 * 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
 
-
 
207
	/**
190
	/**
208
	 * Accesseur pour la toolbar
191
	 * Accesseur pour la toolbar 
209
	 * 
192
	 * @return la toolbar associée à la vue
210
	 * @return la toolbar associée à la vue
193
	 */
-
 
194
	public pageToolBarVue getToolBarVue()
211
	 */
195
	{
212
	public pageToolBarVue getToolBarVue() {
Line 196... Line 213...
196
		return pt ;
213
		return pt;
197
	}
214
	}
-
 
215
 
198
 
216
	/**
199
	/**
217
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage
200
	 * Fonction d'initialisation du contenu (appelée lors du premier affichage de la liste)
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>",
-
 
230
						"<span>{nom}</span></div>", "</tpl>",
212
						"<span>{nom}</span></div>", "</tpl>",
231
						"<div class='x-clear'></div>" });
Line 213... Line 232...
213
						"<div class='x-clear'></div>" });
232
		// pour des raisons de performances on compile le template en une
214
		// pour des raisons de performances on compile le template en une fonction
233
		// fonction
215
		template.compile();
234
		template.compile();
Line 216... Line -...
216
 
-
 
217
		// la dataview affichera les images en accord avec le template
235
 
218
		// cree precedemment
236
		// la dataview affichera les images en accord avec le template
219
		dView = new DataView("div.thumb-wrap") {
237
		// cree precedemment
220
 
238
		dView = new DataView("div.thumb-wrap") {
-
 
239
 
221
			
240
			public void prepareData(Data data) {
222
			public void prepareData(Data data) {
241
				data.setProperty("shortName", Format.ellipsis(data
Line 223... Line 242...
223
				data.setProperty("shortName", Format.ellipsis(data
242
						.getProperty("num_image"), 15));	
224
						.getProperty("num_image"), 15));
243
			}
Line 244... Line 263...
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
		
-
 
Line 250... Line 268...
250
 
268
 
Line 251... Line 269...
251
		this.getDView().setLoadingText("chargement");
269
		this.getDView().setLoadingText("chargement");
252
 
270
 
-
 
271
		// ajouts de la gestion des evenements pour la dataview
Line 253... Line 272...
253
		// ajouts de la gestion des evenements pour la dataview
272
		ajouterListenersDataView();
254
		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
-
 
278
		getIMediateur().obtenirPhotoGalerie(this);
-
 
279
		// et on déclare le composant comme instancié
-
 
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";
259
		getIMediateur().obtenirPhotoGalerie(this);
307
			}
Line 260... Line 308...
260
		// et on déclare le composant comme instancié
308
		};
261
		estInstancie = true ;
309
        
262
	}
310
	}
263
 
311
 
264
	/**
312
	/**
Line 265... Line 313...
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
Line 277... Line 325...
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();
-
 
328
 
280
			
329
		}
281
		}
330
 
282
 
331
		// si le composant doit répandre le rafraichissement
283
		// si le composant doit répandre le rafraichissement
332
		if (repandreRafraichissement) {
284
		if (repandreRafraichissement) {
333
			// il en notifie le médiateur en lui donnant une copie des données
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
334
			// et en notifiant qu'il en est l'expéditeur
286
			getIMediateur().synchroniserDonneesZoomListeGalerie(
-
 
287
					nouvelleDonnees, this);
335
			getIMediateur().synchroniserDonneesZoomListeGalerie(
288
		}
336
					nouvelleDonnees, this);
289
		
337
		}
290
		// si c'est la première mise à jour que l'on reçoit
338
 
Line 291... Line 339...
291
		if(!estInstancie)
339
		// si c'est la première mise à jour que l'on reçoit
292
		{
340
		if (!estInstancie) {
293
			// alors le composant est considéré comme instancié
341
			// alors le composant est considéré comme instancié
-
 
342
			estInstancie = true;
-
 
343
		}
294
			estInstancie = true ;
344
	}
295
		}
345
 
296
	}
346
	/**
Line 297... Line 347...
297
 
347
	 * Méthode héritée de l'interface VueListable Sélectionne les images dans la
Line 298... Line 348...
298
	/**
348
	 * galerie suivant les identifiants donnés en paramètres
299
	 * Méthode héritée de l'interface VueListable
349
	 * 
300
	 * Sélectionne les images dans la galerie suivant les identifiants donnés en paramètres
350
	 * @param ids