Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 12 Rev 38
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.observation.ObservationMediateur;
4
import org.tela_botanica.client.observation.ObservationMediateur;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
import org.tela_botanica.client.interfaces.VueListable;
6
import org.tela_botanica.client.interfaces.VueListable;
7
import org.tela_botanica.client.vues.BarrePaginationObservationVue;
7
import org.tela_botanica.client.vues.BarrePaginationObservationVue;
8
 
8
 
9
import com.gwtext.client.core.Ext;
9
import com.gwtext.client.core.Ext;
10
import com.gwtext.client.core.ExtElement;
10
import com.gwtext.client.core.ExtElement;
11
import com.gwtext.client.data.FieldDef;
11
import com.gwtext.client.data.FieldDef;
12
import com.gwtext.client.data.Record;
12
import com.gwtext.client.data.Record;
13
import com.gwtext.client.data.RecordDef;
13
import com.gwtext.client.data.RecordDef;
14
import com.gwtext.client.data.Store;
14
import com.gwtext.client.data.Store;
15
import com.gwtext.client.data.StringFieldDef;
15
import com.gwtext.client.data.StringFieldDef;
16
import com.gwtext.client.widgets.Component;
16
import com.gwtext.client.widgets.Component;
17
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
17
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
18
import com.gwtext.client.widgets.grid.ColumnConfig;
18
import com.gwtext.client.widgets.grid.ColumnConfig;
19
import com.gwtext.client.widgets.grid.ColumnModel;
19
import com.gwtext.client.widgets.grid.ColumnModel;
20
import com.gwtext.client.widgets.grid.GridPanel;
20
import com.gwtext.client.widgets.grid.GridPanel;
21
import com.gwtext.client.widgets.grid.RowSelectionModel;
21
import com.gwtext.client.widgets.grid.RowSelectionModel;
22
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
22
import com.gwtext.client.widgets.grid.event.RowSelectionListenerAdapter;
23
 
23
 
24
/**
24
/**
25
 * Liste d'observation composée de ligne d'observation
25
 * Liste d'observation composée de ligne d'observation
26
 * l'interface rafraichissable et l'interface vueListable
26
 * l'interface rafraichissable et l'interface vueListable
27
 * 
27
 * 
28
 * @author David Delon 2008
28
 * @author David Delon 2008
29
 */
29
 */
30
public class ListeObservationVue extends GridPanel implements Rafraichissable,
30
public class ListeObservationVue extends GridPanel implements Rafraichissable,
31
		VueListable {
31
		VueListable {
32
 
32
 
33
	/**
33
	/**
34
	 * Le médiateur associé à la vue
34
	 * Le médiateur associé à la vue
35
	 */
35
	 */
36
	private ObservationMediateur	observationMediateur		= null;
36
	private ObservationMediateur	observationMediateur		= null;
37
 
37
 
38
 
38
 
39
	/**
39
	/**
40
	 * Config de colonne
40
	 * Config de colonne
41
	 */
41
	 */
42
	private ColumnConfig	etatObservation;
42
	private ColumnConfig	etatObservation;
43
	/**
43
	/**
44
	 * Config de colonne
44
	 * Config de colonne
45
	 */
45
	 */
46
	private ColumnConfig	nomSaisiObservation;
46
	private ColumnConfig	nomSaisiObservation;
47
	/**
47
	/**
48
	 * Config de colonne
48
	 * Config de colonne
49
	 */
49
	 */
50
	private ColumnConfig	nomRetenuObservation;
50
	private ColumnConfig	nomRetenuObservation;
51
	/**
51
	/**
52
	 * Config de colonne
52
	 * Config de colonne
53
	 */
53
	 */
54
	private ColumnConfig	lieuObservation;
54
	private ColumnConfig	lieuObservation;
55
	/**
55
	/**
56
	 * Config de colonne
56
	 * Config de colonne
57
	 */
57
	 */
58
	private ColumnConfig	dateObservation;
58
	private ColumnConfig	dateObservation;
59
	/**
59
	/**
60
	 * Config de colonne
60
	 * Config de colonne
61
	 */
61
	 */
62
	private ColumnConfig	ordreObservation;
62
	private ColumnConfig	ordreObservation;
63
	/**
63
	/**
64
	 * Modele de colonnes
64
	 * Modele de colonnes
65
	 */
65
	 */
66
	private ColumnModel		modeleColonnes;
66
	private ColumnModel		modeleColonnes;
67
 
67
 
68
	/**
68
	/**
69
	 * Store qui contient les données à afficher
69
	 * Store qui contient les données à afficher
70
	 */
70
	 */
71
	private Store			st				= null;
71
	private Store			st				= null;
72
	
72
	
73
	
73
	
74
	/**
74
	/**
75
	 * Barre de pagination
75
	 * Barre de pagination
76
	 */
76
	 */
77
	private BarrePaginationObservationVue bt = null ;
77
	private BarrePaginationObservationVue bt = null ;
78
 
78
 
79
	/**
79
	/**
80
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
80
	 * Constructeur sans arguments (privé car ne doit pas être utilisé)
81
	 */
81
	 */
82
	private ListeObservationVue()
82
	private ListeObservationVue()
83
	{
83
	{
84
		super() ;
84
		super() ;
85
	}
85
	}
86
	
86
	
87
	/**
87
	/**
88
	 * Constructeur avec argument
88
	 * Constructeur avec argument
89
	 * @param im le médiateur à associer
89
	 * @param im le médiateur à associer
90
	 */
90
	 */
91
	public ListeObservationVue(ObservationMediateur obs) {		
91
	public ListeObservationVue(ObservationMediateur obs) {		
92
		
92
		
93
		this.observationMediateur = obs;
93
		this.observationMediateur = obs;
94
		
94
		
95
		setHeader(true);
95
		setHeader(true);
96
		setTitle("Observations");
96
		setTitle("Observations");
97
        
97
        
98
		// on place la barre de pagination
98
		// on place la barre de pagination
99
		bt = new BarrePaginationObservationVue(observationMediateur);		
99
		bt = new BarrePaginationObservationVue(observationMediateur);		
100
		this.setBottomToolbar(bt) ;
100
		this.setBottomToolbar(bt) ;
101
 
101
 
102
		// on construit le modèle de colonnes
102
		// on construit le modèle de colonnes
103
 
103
 
104
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
104
		// Le store suivant est ensuite remplacé par le store contenant les données obtenus depuis le serveur (cf rafraichir) 
105
				
105
				
106
		
106
		
107
		etatObservation = new ColumnConfig("Transmis", "etat_observation", 50);		
107
		etatObservation = new ColumnConfig("Transmis", "etat_observation", 50);		
108
		nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 200);
108
		nomSaisiObservation = new ColumnConfig("Nom saisi", "nomSaisi_observation", 200);
109
		nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 200);
109
		nomRetenuObservation = new ColumnConfig("Nom retenu", "nomRetenu_observation", 200);
110
		lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 200);
110
		lieuObservation = new ColumnConfig("Lieu", "lieu_observation", 200);
111
		dateObservation = new ColumnConfig("Date", "date_observation", 70);
111
		dateObservation = new ColumnConfig("Date", "date_observation", 70);
112
		ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 50);
112
		ordreObservation = new ColumnConfig("Ordre", "ordre_observation", 50);
113
		
113
		
114
		
114
		
115
	
115
	
116
		// on associe le modèle de colonnes
116
		// on associe le modèle de colonnes
117
		
117
		
118
		ColumnConfig[] cm = {etatObservation, nomSaisiObservation, nomRetenuObservation, lieuObservation, dateObservation, ordreObservation};
118
		ColumnConfig[] cm = {etatObservation, nomSaisiObservation, nomRetenuObservation, lieuObservation, dateObservation, ordreObservation};
119
		
119
		
120
		modeleColonnes = new ColumnModel(cm);
120
		modeleColonnes = new ColumnModel(cm);
121
		
121
		
122
		this.setColumnModel(modeleColonnes);
122
		this.setColumnModel(modeleColonnes);
123
		
123
		
124
		this.setAutoScroll(true);
124
		this.setAutoScroll(true);
125
		this.setAutoWidth(true);
125
		this.setAutoWidth(true);
126
		this.setEnableColumnResize(true);
126
		this.setEnableColumnResize(true);
127
 
127
 
128
	    // FIXME: ca ne devrait pas ête obligatoire de fixer la taille 
128
	    // FIXME: ca ne devrait pas ête obligatoire de fixer la taille 
129
		 
129
		 
130
		this.setSize(800,400);
130
		//this.setSize(800,400);
131
		
131
		
132
		// creation du store
132
		// creation du store
133
		FieldDef defEtatObservation = new StringFieldDef("etat_observation");
133
		FieldDef defEtatObservation = new StringFieldDef("etat_observation");
134
		FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
134
		FieldDef defNomSaisiObservation = new StringFieldDef("nomSaisi_observation");
135
		FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
135
		FieldDef defNomRetenuObservation = new StringFieldDef("nomRetenu_observation");
136
		FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
136
		FieldDef defLieuObservation = new StringFieldDef("lieu_observation");
137
		FieldDef defDateObservation = new StringFieldDef("date_observation");
137
		FieldDef defDateObservation = new StringFieldDef("date_observation");
138
		FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
138
		FieldDef defOrdreObservation = new StringFieldDef("ordre_observation");
139
		
139
		
140
		
140
		
141
		FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
141
		FieldDef[] defTab = { defEtatObservation, defNomSaisiObservation, defNomRetenuObservation,
142
				defLieuObservation, defDateObservation, defOrdreObservation };
142
				defLieuObservation, defDateObservation, defOrdreObservation };
143
		
143
		
144
		RecordDef rd = new RecordDef(defTab);
144
		RecordDef rd = new RecordDef(defTab);
145
		st = new Store(rd);
145
		st = new Store(rd);
146
		
146
		
147
		// on associe le store
147
		// on associe le store
148
		
148
		
149
		this.setStore(st);
149
		this.setStore(st);
150
		this.getView().setAutoFill(true);
150
		this.getView().setAutoFill(true);
151
		
151
		
152
		// on crée un masque de chargement qui s'affichera lors des mises à jour
152
		// on crée un masque de chargement qui s'affichera lors des mises à jour
153
		this.setLoadMask("Chargement");
153
		this.setLoadMask("Chargement");
154
	
154
	
155
		// on ajoute les listeners
155
		// on ajoute les listeners
156
		ajouterListeners();
156
		ajouterListeners();
157
		
157
		
158
		
158
		
159
	}
159
	}
160
 
160
 
161
 
161
 
162
	/**
162
	/**
163
	 * Ajoute les listeners pour la gestion des évènements
163
	 * Ajoute les listeners pour la gestion des évènements
164
	 */
164
	 */
165
	private void ajouterListeners() {
165
	private void ajouterListeners() {
166
		this.addListener(new ContainerListenerAdapter() {
166
		this.addListener(new ContainerListenerAdapter() {
167
 
167
 
168
			
168
			
169
			public void onHide(Component component) {
169
			public void onHide(Component component) {
170
 
170
 
171
			}
171
			}
172
 
172
 
173
			
173
			
174
			public void onRender(Component component) {
174
			public void onRender(Component component) {
175
				
175
				
176
			}
176
			}
177
 
177
 
178
			
178
			
179
			public void onShow(Component component) {
179
			public void onShow(Component component) {
180
 
180
 
181
			}
181
			}
182
 
182
 
183
		});
183
		});
184
 
184
 
185
/*		
185
/*		
186
		this.addGridRowListener(new GridRowListener() {
186
		this.addGridRowListener(new GridRowListener() {
187
			
187
			
188
			// gestion du clic sur une ligne
188
			// gestion du clic sur une ligne
189
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
189
			public void onRowClick(GridPanel grid, int rowIndex, EventObject e) {
190
 
190
 
191
				// on notifie le médiateur et on lui passe le nuémro de ligne
191
				// on notifie le médiateur et on lui passe le nuémro de ligne
192
				getobservationMediateur().clicListeImage(rowIndex);
192
				getobservationMediateur().clicListeImage(rowIndex);
193
			}
193
			}
194
			
194
			
195
			// gestion du clic droit
195
			// gestion du clic droit
196
			public void onRowContextMenu(GridPanel grid, int rowIndex,
196
			public void onRowContextMenu(GridPanel grid, int rowIndex,
197
					EventObject e) {
197
					EventObject e) {
198
				// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu
198
				// on stoppe l'évenement pour empecher le navigateur d'afficher son propre menu
199
				e.stopEvent() ;
199
				e.stopEvent() ;
200
				// on notifie le médiateur en lui passant l'évenement
200
				// on notifie le médiateur en lui passant l'évenement
201
				getobservationMediateur().montrerContextMenu(e);
201
				getobservationMediateur().montrerContextMenu(e);
202
			}
202
			}
203
 
203
 
204
			// gestion du double clic
204
			// gestion du double clic
205
			public void onRowDblClick(GridPanel grid, int rowIndex,
205
			public void onRowDblClick(GridPanel grid, int rowIndex,
206
					EventObject e) {
206
					EventObject e) {
207
				// on notifie le médiateur en lui passant le numéro de ligne
207
				// on notifie le médiateur en lui passant le numéro de ligne
208
				getobservationMediateur().doubleClicListeImage(rowIndex);
208
				getobservationMediateur().doubleClicListeImage(rowIndex);
209
			}
209
			}
210
		});
210
		});
211
		
211
		
212
	*/
212
	*/
213
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
213
		this.getSelectionModel().addListener(new RowSelectionListenerAdapter() {
214
 
214
 
215
			// gestion de la sélection
215
			// gestion de la sélection
216
			
216
			
217
			public void onSelectionChange(RowSelectionModel sm) {
217
			public void onSelectionChange(RowSelectionModel sm) {
218
 
218
 
219
				// si on a rien de sélectionné
219
				// si on a rien de sélectionné
220
				if (sm.getCount() <= 0) {
220
				if (sm.getCount() <= 0) {
221
					// on notifie le médiateur (qui désactive notamment l'accès à certaines infos)
221
					// on notifie le médiateur (qui désactive notamment l'accès à certaines infos)
222
		//			getobservationMediateur().aucuneSelection();
222
		//			getobservationMediateur().aucuneSelection();
223
				} else {
223
				} else {
224
					// sinon on notifie le médiateur
224
					// sinon on notifie le médiateur
225
			//		getobservationMediateur().selection();
225
			//		getobservationMediateur().selection();
226
					// et on lui demande de synchroniser la selection avec les autres vues
226
					// et on lui demande de synchroniser la selection avec les autres vues
227
				//	getobservationMediateur().synchroniserSelection("liste");
227
				//	getobservationMediateur().synchroniserSelection("liste");
228
				}
228
				}
229
			}
229
			}
230
		});
230
		});
231
	}
231
	}
232
 
232
 
233
	/**
233
	/**
234
	 * Méthode héritée de l'interface VueListable
234
	 * Méthode héritée de l'interface VueListable
235
	 * Sélectionne les observations  dans la liste suivant les identifiants donnés en paramètres
235
	 * Sélectionne les observations  dans la liste suivant les identifiants donnés en paramètres
236
	 */
236
	 */
237
	
237
	
238
	public String[] getIdSelectionnees() {
238
	public String[] getIdSelectionnees() {
239
		
239
		
240
		Record[] selection = this.getSelectionModel().getSelections();
240
		Record[] selection = this.getSelectionModel().getSelections();
241
		int taille = selection.length;
241
		int taille = selection.length;
242
		String id_selection[] = new String[taille];
242
		String id_selection[] = new String[taille];
243
 
243
 
244
		for (int i = 0; i < selection.length; i++) {
244
		for (int i = 0; i < selection.length; i++) {
245
 
245
 
246
			id_selection[i] = selection[i].getAsString("ordre_observation");
246
			id_selection[i] = selection[i].getAsString("ordre_observation");
247
		}
247
		}
248
 
248
 
249
		return id_selection;
249
		return id_selection;
250
	}
250
	}
251
	
251
	
252
	/**
252
	/**
253
	 * Méthode héritée de l'interface rafraichissable
253
	 * Méthode héritée de l'interface rafraichissable
254
	 * @param nouvelleDonnees les nouvelles données
254
	 * @param nouvelleDonnees les nouvelles données
255
	 * @param repandreRafraichissement le booleen de notification du rafraichissement
255
	 * @param repandreRafraichissement le booleen de notification du rafraichissement
256
	 */
256
	 */
257
	
257
	
258
	public void rafraichir(Object nouvelleDonnees,
258
	public void rafraichir(Object nouvelleDonnees,
259
			boolean repandreRafraichissement) {
259
			boolean repandreRafraichissement) {
260
 
260
 
261
		// si on reçoit un store
261
		// si on reçoit un store
262
		if (nouvelleDonnees instanceof Store) {
262
		if (nouvelleDonnees instanceof Store) {
263
		
263
		
264
			
264
			
265
			// on affecte celui-ci comme gestionnaire de données
265
			// on affecte celui-ci comme gestionnaire de données
266
			st = (Store) nouvelleDonnees;
266
			st = (Store) nouvelleDonnees;
267
			st.load();
267
			st.load();
268
			// et on reconfigure et rafraichit la vue
268
			// et on reconfigure et rafraichit la vue
269
			this.reconfigure(st, this.getColumnModel());
269
			this.reconfigure(st, this.getColumnModel());
270
			
270
			
271
			demasquerChargement();
271
			demasquerChargement();
272
			
272
			
273
						
273
						
274
		}
274
		}
275
 
275
 
276
	}
276
	}
277
 
277
 
278
	
278
	
279
	/**
279
	/**
280
	 * Sélectionne des enregistrements donné 
280
	 * Sélectionne des enregistrements donné 
281
	 * @param sel un tableau d'enregistrement à selectionner
281
	 * @param sel un tableau d'enregistrement à selectionner
282
	 */
282
	 */
283
	public void selectionnerEnregistrements(Record[] sel) {
283
	public void selectionnerEnregistrements(Record[] sel) {
284
 
284
 
285
			getSelectionModel().clearSelections();
285
			getSelectionModel().clearSelections();
286
			getSelectionModel().selectRecords(sel);
286
			getSelectionModel().selectRecords(sel);
287
		
287
		
288
	}
288
	}
289
	
289
	
290
	/**
290
	/**
291
	 * Accesseur pour la toolbar de pagination
291
	 * Accesseur pour la toolbar de pagination
292
	 * @return la toolbar de pagination
292
	 * @return la toolbar de pagination
293
	 */
293
	 */
294
	
294
	
295
	public BarrePaginationObservationVue getToolBarVue()
295
	public BarrePaginationObservationVue getToolBarVue()
296
	{
296
	{
297
		return bt ;
297
		return bt ;
298
	}
298
	}
299
 
299
 
300
 
300
 
301
	/**
301
	/**
302
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
302
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
303
	 */
303
	 */
304
	public void masquerChargement()
304
	public void masquerChargement()
305
	{
305
	{
306
			ExtElement masked = Ext.get(getId()) ;
306
			ExtElement masked = Ext.get(getId()) ;
307
 
307
 
308
			// FIXME: parfois null sans raison !
308
			// FIXME: parfois null sans raison !
309
			if (masked!=null) {
309
			if (masked!=null) {
310
				masked.mask("Chargement") ;
310
				masked.mask("Chargement") ;
311
			}
311
			}
312
 
312
 
313
	}
313
	}
314
	
314
	
315
	/**
315
	/**
316
	 * Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
316
	 * Recherche l'élement actuellement affiché et retire son message de chargement si l'était affiché
317
	 */
317
	 */
318
	public void demasquerChargement()
318
	public void demasquerChargement()
319
	{
319
	{
320
			ExtElement masked = Ext.get(getId()) ;
320
			ExtElement masked = Ext.get(getId()) ;
321
			
321
			
322
//			 FIXME: parfois null sans raison !
322
//			 FIXME: parfois null sans raison !
323
			if (masked!=null) {
323
			if (masked!=null) {
324
				
324
				
325
				if(masked.isMasked())
325
				if(masked.isMasked())
326
				{
326
				{
327
					masked.unmask() ;
327
					masked.unmask() ;
328
				}
328
				}
329
			}
329
			}
330
	}
330
	}
331
	
331
	
332
 
332
 
333
 
333
 
334
 
334
 
335
}
335
}