Subversion Repositories eFlore/Archives.cel-v2

Rev

Details | Last modification | View Log | RSS feed

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