Subversion Repositories eFlore/Applications.cel

Rev

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

Rev 59 Rev 60
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
 
3
 
4
import org.tela_botanica.client.interfaces.ListePaginable;
4
import org.tela_botanica.client.interfaces.ListePaginable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
5
import org.tela_botanica.client.interfaces.Rafraichissable;
6
 
6
 
7
import com.gwtext.client.core.EventCallback;
7
import com.gwtext.client.core.EventCallback;
8
import com.gwtext.client.core.EventObject;
8
import com.gwtext.client.core.EventObject;
9
import com.gwtext.client.core.Template;
9
import com.gwtext.client.core.Template;
10
import com.gwtext.client.data.Record;
10
import com.gwtext.client.data.Record;
11
import com.gwtext.client.data.SimpleStore;
11
import com.gwtext.client.data.SimpleStore;
12
import com.gwtext.client.data.Store;
12
import com.gwtext.client.data.Store;
13
import com.gwtext.client.widgets.Button;
13
import com.gwtext.client.widgets.Button;
14
import com.gwtext.client.widgets.Toolbar;
14
import com.gwtext.client.widgets.Toolbar;
15
import com.gwtext.client.widgets.ToolbarButton;
15
import com.gwtext.client.widgets.ToolbarButton;
16
import com.gwtext.client.widgets.ToolbarTextItem;
16
import com.gwtext.client.widgets.ToolbarTextItem;
17
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
17
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
18
import com.gwtext.client.widgets.form.ComboBox;
18
import com.gwtext.client.widgets.form.ComboBox;
19
import com.gwtext.client.widgets.form.Field;
19
import com.gwtext.client.widgets.form.Field;
20
import com.gwtext.client.widgets.form.TextField;
20
import com.gwtext.client.widgets.form.TextField;
21
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
21
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
22
import com.gwtext.client.widgets.form.event.TextFieldListenerAdapter;
22
import com.gwtext.client.widgets.form.event.TextFieldListenerAdapter;
23
 
23
 
24
/**
24
/**
25
 * Barre de pagination asynchrone avec filtrage des touches et accès directs et
25
 * Barre de pagination asynchrone avec filtrage des touches et accès directs et
26
 * séquentiels à une page
26
 * séquentiels à une page
27
 * 
27
 * 
28
 * @author aurelien
28
 * @author aurelien
29
 * 
29
 * 
30
 */
30
 */
31
public class BarrePaginationVue extends Toolbar implements Rafraichissable {
31
public class BarrePaginationVue extends Toolbar implements Rafraichissable {
32
 
32
 
33
	/**
33
	/**
34
	 * Instance du médiateur à qui on notifie les évnènements
34
	 * Instance du médiateur à qui on notifie les évnènements
35
	 */
35
	 */
36
	private ListePaginable listePaginable = null;
36
	private ListePaginable listePaginable = null;
37
 
37
 
38
	/**
38
	/**
39
	 * Bouton précédent
39
	 * Bouton précédent
40
	 */
40
	 */
41
	private ToolbarButton prevPage = new ToolbarButton();
41
	private ToolbarButton prevPage = new ToolbarButton();
42
	/**
42
	/**
43
	 * Bouton suivant
43
	 * Bouton suivant
44
	 */
44
	 */
45
	private ToolbarButton suivPage = new ToolbarButton();
45
	private ToolbarButton suivPage = new ToolbarButton();
46
	/**
46
	/**
47
	 * Numéro de la page courante (attention, commence à zéro pour des raisons
47
	 * Numéro de la page courante (attention, commence à zéro pour des raisons
48
	 * pratiques)
48
	 * pratiques)
49
	 */
49
	 */
50
	private int pageCourante = 0;
50
	private int pageCourante = 0;
51
	/**
51
	/**
52
	 * Nombre de page total
52
	 * Nombre de page total
53
	 */
53
	 */
54
	private int pageTotale = 1;
54
	private int pageTotale = 1;
55
	/**
55
	/**
56
	 * Nombre d'élements total
56
	 * Nombre d'élements total
57
	 */
57
	 */
58
	private int nbElement = 0;
58
	private int nbElement = 0;
59
	/**
59
	/**
60
	 * Nombre d'élément par page
60
	 * Nombre d'élément par page
61
	 */
61
	 */
62
	private int taillePage = 0;
62
	private int taillePage = 0;
63
	/**
63
	/**
64
	 * Texte statique de la toolbar 1
64
	 * Texte statique de la toolbar 1
65
	 */
65
	 */
66
	private ToolbarTextItem page = new ToolbarTextItem("Page ");
66
	private ToolbarTextItem page = new ToolbarTextItem("Page ");
67
	/**
67
	/**
68
	 * Affichage de la page courante
68
	 * Affichage de la page courante
69
	 */
69
	 */
70
	private TextField champPage = new TextField("" + (pageCourante + 1));
70
	private TextField champPage = new TextField("" + (pageCourante + 1));
71
	/**
71
	/**
72
	 * Affichage de "sur pageTotale "
72
	 * Affichage de "sur pageTotale "
73
	 */
73
	 */
74
	private ToolbarTextItem surTotalPage = new ToolbarTextItem(" sur "
74
	private ToolbarTextItem surTotalPage = new ToolbarTextItem(" sur "
75
			+ pageTotale);
75
			+ pageTotale);
76
	/**
76
	/**
77
	 * Texte statique de la toolbar 2
77
	 * Texte statique de la toolbar 2
78
	 */
78
	 */
79
	private ToolbarTextItem afficherNbElem = new ToolbarTextItem("Afficher ");
79
	private ToolbarTextItem afficherNbElem = new ToolbarTextItem("Afficher ");
80
	/**
80
	/**
81
	 * Combobox permettant de selectionner le nombre d'élements à afficher par
81
	 * Combobox permettant de selectionner le nombre d'élements à afficher par
82
	 * page et donc de changer la variable taillePage
82
	 * page et donc de changer la variable taillePage
83
	 */
83
	 */
84
	private ComboBox selecteurTaillePage = new ComboBox();
84
	private ComboBox selecteurTaillePage = new ComboBox();
-
 
85
	
-
 
86
	/**
-
 
87
	 * Les différents intervalles de page possibles (intialisé par défaut)
-
 
88
	 */
-
 
89
	String[] pages = { "200","100","50", "20", "10" };
-
 
90
	
-
 
91
	Store storeIntervalle = null ;
85
	
92
	
86
	
93
	
87
 
94
 
88
	/**
95
	/**
89
	 * Label indiquant le type d'element affiché
96
	 * Label indiquant le type d'element affiché
90
	 *  
97
	 *  
91
	 */	
98
	 */	
92
 
99
 
93
	private String labelElement="Elements";
100
	private String labelElement="Elements";
94
 
101
 
95
	/**
102
	/**
96
	 * taille de la page par defaut
103
	 * taille de la page par defaut
97
	 *  
104
	 *  
98
	 */	
105
	 */	
99
 
106
 
100
	private int taillePageDefaut = 50;
107
	private int taillePageDefaut = 50;
101
 
108
 
102
	
109
	
103
	/**
110
	/**
104
	 * Texte statique de la toolbar 3
111
	 * Texte statique de la toolbar 3
105
	 */
112
	 */
106
	private ToolbarTextItem nbElemParPage = new ToolbarTextItem(
113
	private ToolbarTextItem nbElemParPage = new ToolbarTextItem(
107
			labelElement + " par page ");
114
			labelElement + " par page ");
108
	/**
115
	/**
109
	 * Affiche l'intervalle des éléments contenus dans la page
116
	 * Affiche l'intervalle des éléments contenus dans la page
110
	 */
117
	 */
111
	private ToolbarTextItem intervalleElements = new ToolbarTextItem(labelElement + " "
118
	private ToolbarTextItem intervalleElements = new ToolbarTextItem(labelElement + " "
112
			+ pageCourante * taillePage + " sur " + nbElement);
119
			+ pageCourante * taillePage + " sur " + nbElement);
113
 
120
 
114
 
121
 
115
	/**
122
	/**
116
	 * retourne la liste associé à la barre
123
	 * retourne la liste associé à la barre
117
	 */
124
	 */
118
	
125
	
119
	public ListePaginable getlistePaginable() {
126
	public ListePaginable getlistePaginable() {
120
		return listePaginable;
127
		return listePaginable;
121
	}
128
	}
122
 
129
 
123
	/***************************************************************************
130
	/***************************************************************************
124
	 * constructeur sans argument (privé car ne doit pas être utilisé)
131
	 * constructeur sans argument (privé car ne doit pas être utilisé)
125
	 */
132
	 */
126
	@SuppressWarnings("unused")
133
	@SuppressWarnings("unused")
127
	private BarrePaginationVue() {
134
	private BarrePaginationVue() {
128
		super();
135
		super();
129
	}
136
	}
130
 
137
 
131
	/**
138
	/**
132
	 * constructeur avec paramètres
139
	 * constructeur avec paramètres
133
	 * 
140
	 * 
134
	 * @param im
141
	 * @param im
135
	 *            le médiateur à associer à la barre
142
	 *            le médiateur à associer à la barre
136
	 */
143
	 */
137
	public BarrePaginationVue(ListePaginable lst) {
144
	public BarrePaginationVue(ListePaginable lst) {
138
		super();
145
		super();
139
 
146
 
140
		listePaginable = lst;
147
		listePaginable = lst;
141
 
148
 
142
		// on dispose un peu de texte et quelques espaces pour séparer les
149
		// on dispose un peu de texte et quelques espaces pour séparer les
143
		// éléments
150
		// éléments
144
		addButton(prevPage);
151
		addButton(prevPage);
145
		addSpacer();
152
		addSpacer();
146
		addItem(page);
153
		addItem(page);
147
		addField(champPage);
154
		addField(champPage);
148
		addItem(surTotalPage);
155
		addItem(surTotalPage);
149
		addSpacer();
156
		addSpacer();
150
		addButton(suivPage);
157
		addButton(suivPage);
151
 
158
 
152
		champPage.setWidth(30);
159
		champPage.setWidth(30);
153
 
160
 
154
		addSpacer();
161
		addSpacer();
155
		addItem(afficherNbElem);
162
		addItem(afficherNbElem);
156
 
163
 
157
		prevPage.setIcon("page_prev.png");
164
		prevPage.setIcon("page_prev.png");
158
		suivPage.setIcon("page_suiv.png");
165
		suivPage.setIcon("page_suiv.png");
159
 
166
 
160
		// le store contient les valeur possibles pour les tailles de page
167
		// le store contient les valeur possibles pour les tailles de page
161
		final Store store = new SimpleStore(new String[] { "nb_page" },
168
		/*final Store store = new SimpleStore(new String[] { "nb_page" },
162
				getNbPages());
169
				new String[][] {getNbPages()} );
163
		store.load();
170
		store.load();*/
-
 
171
		setIntervallesPages(pages) ;
164
 
172
 
165
		// le template definit ce que l'on affiche pour chaque element du store
173
		// le template definit ce que l'on affiche pour chaque element du store
166
		// dans la combobox
174
		// dans la combobox
167
		final Template tp = new Template("<div class=\"x-combo-list-item\">"
175
		final Template tp = new Template("<div class=\"x-combo-list-item\">"
168
				+ "{nb_page}" + "<div class=\"x-clear\"></div></div>");
176
				+ "{nb_page}" + "<div class=\"x-clear\"></div></div>");
169
		tp.compile();
177
		tp.compile();
170
 
178
 
171
		selecteurTaillePage.setTpl(tp);
179
		selecteurTaillePage.setTpl(tp);
172
		selecteurTaillePage.setStore(store);
180
		selecteurTaillePage.setStore(storeIntervalle);
173
		selecteurTaillePage.setWidth(40);
181
		selecteurTaillePage.setWidth(40);
174
		selecteurTaillePage.setEditable(false);
182
		selecteurTaillePage.setEditable(false);
175
		addField(selecteurTaillePage);
183
		addField(selecteurTaillePage);
176
		selecteurTaillePage.setValue(""+taillePageDefaut);
184
		selecteurTaillePage.setValue(""+taillePageDefaut);
177
		selecteurTaillePage.setWidth(50);
185
		selecteurTaillePage.setWidth(50);
178
		addItem(nbElemParPage);
186
		addItem(nbElemParPage);
179
		
187
		
180
		
188
		
181
 
189
 
182
		// on remplit l'espace pour que l'intervalle d'élement se place à droite
190
		// on remplit l'espace pour que l'intervalle d'élement se place à droite
183
		// de la barre
191
		// de la barre
184
		addFill();
192
		addFill();
185
		addItem(intervalleElements);
193
		addItem(intervalleElements);
186
		addSpacer();
194
		addSpacer();
187
 
195
 
188
		// on ajoute les différents listeners
196
		// on ajoute les différents listeners
189
		ajouterListeners();
197
		ajouterListeners();
190
	}
198
	}
191
 
199
 
192
	
200
	
193
	/**
201
	/**
194
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
202
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
195
	 * 	@param label
203
	 * 	@param label
196
	 */
204
	 */
197
	
205
	
198
	public void setLabelElement(String label) {
206
	public void setLabelElement(String label) {
199
		this.labelElement = label;
207
		this.labelElement = label;
200
		nbElemParPage.setText(labelElement + " par page ");
208
		nbElemParPage.setText(labelElement + " par page ");
201
		intervalleElements.setText(labelElement + " " + pageCourante * taillePage + " sur " + nbElement);
209
		intervalleElements.setText(labelElement + " " + pageCourante * taillePage + " sur " + nbElement);
202
	}
210
	}
203
 
211
 
204
	public void setTaillePageParDefaut(int taille) {
212
	public void setTaillePageParDefaut(int taille) {
205
		this.taillePageDefaut = taille;
213
		this.taillePageDefaut = taille;
206
		selecteurTaillePage.setValue(""+taillePageDefaut);
214
		selecteurTaillePage.setValue(""+taillePageDefaut);
207
	}
215
	}
-
 
216
	
-
 
217
	public void setIntervallesPages(String[] intervalle)
-
 
218
	{
-
 
219
		String[][] intervallesPages = new String[intervalle.length][1] ;
-
 
220
		
-
 
221
		for(int i = 0 ; i < intervalle.length ; i++)
-
 
222
		{
-
 
223
			intervallesPages[i][0] = intervalle[i] ;
-
 
224
		}
-
 
225
		
-
 
226
		storeIntervalle = new SimpleStore(new String[] { "nb_page" },
-
 
227
				intervallesPages );
-
 
228
		storeIntervalle.load();
-
 
229
		selecteurTaillePage.setStore(storeIntervalle);	
-
 
230
	}
208
	
231
	
209
	
232
	
210
	/**
233
	/**
211
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
234
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
212
	 * éléments de la barre de pagination
235
	 * éléments de la barre de pagination
213
	 */
236
	 */
214
	private void ajouterListeners() {
237
	private void ajouterListeners() {
215
		
238
		
216
		
239
		
217
 
240
 
218
		// boutons suivants et précédents
241
		// boutons suivants et précédents
219
		prevPage.addListener(new ButtonListenerAdapter() {
242
		prevPage.addListener(new ButtonListenerAdapter() {
220
 
243
 
221
			public void onClick(Button button, EventObject e) {
244
			public void onClick(Button button, EventObject e) {
222
 
245
 
223
				// si la page courante n'est pas la première
246
				// si la page courante n'est pas la première
224
				if (pageCourante > 0) {
247
				if (pageCourante > 0) {
225
					// on décrémente la page courante de 1
248
					// on décrémente la page courante de 1
226
					pageCourante--;
249
					pageCourante--;
227
					// on rafraichit l'affichage
250
					// on rafraichit l'affichage
228
					rafraichirNumeroPage();
251
					rafraichirNumeroPage();
229
					// et on notifie le médiateur de l'évenement
252
					// et on notifie le médiateur de l'évenement
230
					listePaginable.changerNumeroPage(pageCourante);
253
					listePaginable.changerNumeroPage(pageCourante);
231
 
254
 
232
				}
255
				}
233
			}
256
			}
234
		});
257
		});
235
 
258
 
236
		suivPage.addListener(new ButtonListenerAdapter() {
259
		suivPage.addListener(new ButtonListenerAdapter() {
237
 
260
 
238
			public void onClick(Button button, EventObject e) {
261
			public void onClick(Button button, EventObject e) {
239
 
262
 
240
				// si la page courante n'est pas la dernière
263
				// si la page courante n'est pas la dernière
241
				if (pageCourante < pageTotale - 1) {
264
				if (pageCourante < pageTotale - 1) {
242
					// on incrémente la page courante de 1
265
					// on incrémente la page courante de 1
243
					pageCourante++;
266
					pageCourante++;
244
					// on rafraichit l'affichage
267
					// on rafraichit l'affichage
245
					rafraichirNumeroPage();
268
					rafraichirNumeroPage();
246
					// et on notifie le médiateur de l'évenement
269
					// et on notifie le médiateur de l'évenement
247
					listePaginable.changerNumeroPage(pageCourante);
270
					listePaginable.changerNumeroPage(pageCourante);
248
 
271
 
249
				}
272
				}
250
			}
273
			}
251
		});
274
		});
252
 
275
 
253
		champPage.addListener(new TextFieldListenerAdapter() {
276
		champPage.addListener(new TextFieldListenerAdapter() {
254
 
277
 
255
			public void onSpecialKey(Field field, EventObject e) {
278
			public void onSpecialKey(Field field, EventObject e) {
256
 
279
 
257
				// on teste si la touche entrée a été pressée
280
				// on teste si la touche entrée a été pressée
258
				if (e.getKey() == EventObject.ENTER) {
281
				if (e.getKey() == EventObject.ENTER) {
259
					int nouvellePage = pageCourante;
282
					int nouvellePage = pageCourante;
260
					// on teste avec parseInt si la valeur entrée est un entier
283
					// on teste avec parseInt si la valeur entrée est un entier
261
					try {
284
					try {
262
						nouvellePage = Integer
285
						nouvellePage = Integer
263
								.parseInt(champPage.getRawValue());
286
								.parseInt(champPage.getRawValue());
264
					}
287
					}
265
					// si ce n'est pas le cas alors on remet le numéro de page
288
					// si ce n'est pas le cas alors on remet le numéro de page
266
					// correct
289
					// correct
267
					catch (NumberFormatException nfe) {
290
					catch (NumberFormatException nfe) {
268
						rafraichirNumeroPage();
291
						rafraichirNumeroPage();
269
						champPage.focus(true);
292
						champPage.focus(true);
270
						return;
293
						return;
271
					}
294
					}
272
 
295
 
273
					// si la conversion reussit on verifie s'il est nécessaire
296
					// si la conversion reussit on verifie s'il est nécessaire
274
					// de changer de page
297
					// de changer de page
275
					// et si la nouvelle est comprise dans l'intervalle des
298
					// et si la nouvelle est comprise dans l'intervalle des
276
					// pages existantes (0..pageTotale)
299
					// pages existantes (0..pageTotale)
277
					if (nouvellePage != pageCourante + 1 && nouvellePage > 0
300
					if (nouvellePage != pageCourante + 1 && nouvellePage > 0
278
							&& nouvellePage <= pageTotale) {
301
							&& nouvellePage <= pageTotale) {
279
						// le cas échéant, on charge la nouvelle page et on
302
						// le cas échéant, on charge la nouvelle page et on
280
						// notifie le médiateur
303
						// notifie le médiateur
281
						changerPageCourante(nouvellePage - 1);
304
						changerPageCourante(nouvellePage - 1);
282
						listePaginable.changerNumeroPage(pageCourante);
305
						listePaginable.changerNumeroPage(pageCourante);
283
 
306
 
284
					} else {
307
					} else {
285
						// sinon on reaffiche l'ancien numero de page sans rien
308
						// sinon on reaffiche l'ancien numero de page sans rien
286
						// changer
309
						// changer
287
						rafraichirNumeroPage();
310
						rafraichirNumeroPage();
288
						champPage.focus(true);
311
						champPage.focus(true);
289
					}
312
					}
290
				}
313
				}
291
			}
314
			}
292
 
315
 
293
			public void onFocus(Field field) {
316
			public void onFocus(Field field) {
294
 
317
 
295
				champPage.focus(true);
318
				champPage.focus(true);
296
			}
319
			}
297
 
320
 
298
		});
321
		});
299
 
322
 
300
		// pour éviter de se compliquer la vie, on filtre tous les charactères
323
		// pour éviter de se compliquer la vie, on filtre tous les charactères
301
		// non numériques
324
		// non numériques
302
		champPage.addKeyPressListener(new EventCallback() {
325
		champPage.addKeyPressListener(new EventCallback() {
303
 
326
 
304
			public void execute(EventObject e) {
327
			public void execute(EventObject e) {
305
 
328
 
306
				// si c'est un numerique
329
				// si c'est un numerique
307
				if (Character.isDigit((char) e.getCharCode())) {
330
				if (Character.isDigit((char) e.getCharCode())) {
308
					// on laisse passer
331
					// on laisse passer
309
					return;
332
					return;
310
				}
333
				}
311
 
334
 
312
				// si c'est la touche entrée ou backspace (valider ou effacer)
335
				// si c'est la touche entrée ou backspace (valider ou effacer)
313
				if (e.getKey() == EventObject.ENTER
336
				if (e.getKey() == EventObject.ENTER
314
						|| e.getKey() == EventObject.BACKSPACE) {
337
						|| e.getKey() == EventObject.BACKSPACE) {
315
					// on laisse passer
338
					// on laisse passer
316
					return;
339
					return;
317
				} else {
340
				} else {
318
					// sinon on remet le numero de page correct et on annule
341
					// sinon on remet le numero de page correct et on annule
319
					// l'évenement
342
					// l'évenement
320
					rafraichirNumeroPage();
343
					rafraichirNumeroPage();
321
					e.stopEvent();
344
					e.stopEvent();
322
				}
345
				}
323
			}
346
			}
324
 
347
 
325
		});
348
		});
326
 
349
 
327
		// listener pour la selection dans la combobox
350
		// listener pour la selection dans la combobox
328
		selecteurTaillePage.addListener(new ComboBoxListenerAdapter() {
351
		selecteurTaillePage.addListener(new ComboBoxListenerAdapter() {
329
 
352
 
330
			public void onSelect(ComboBox comboBox, Record record, int index) {
353
			public void onSelect(ComboBox comboBox, Record record, int index) {
331
 
354
 
332
				String nouvelleTaillePageString = comboBox.getStore()
355
				String nouvelleTaillePageString = comboBox.getStore()
333
						.getRecordAt(index).getAsString("nb_page");
356
						.getRecordAt(index).getAsString("nb_page");
334
				int nouvelleTaillePage = Integer
357
				int nouvelleTaillePage = Integer
335
						.parseInt(nouvelleTaillePageString);
358
						.parseInt(nouvelleTaillePageString);
336
 
359
 
337
				// si la taille de page est différente de l'ancienne
360
				// si la taille de page est différente de l'ancienne
338
				if (nouvelleTaillePage != taillePage) {
361
				if (nouvelleTaillePage != taillePage) {
339
					// on la change
362
					// on la change
340
					changerTaillePage(nouvelleTaillePage);
363
					changerTaillePage(nouvelleTaillePage);
341
				}
364
				}
342
				// et on met la valeur à jour dans la combobox
365
				// et on met la valeur à jour dans la combobox
343
				comboBox.setValue(nouvelleTaillePageString);
366
				comboBox.setValue(nouvelleTaillePageString);
344
			}
367
			}
345
 
368
 
346
		});
369
		});
347
	}
370
	}
348
 
371
 
349
	/**
372
	/**
350
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
373
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
351
	 * d'éléments à partir des variables de classes
374
	 * d'éléments à partir des variables de classes
352
	 */
375
	 */
353
	public void rafraichirNumeroPage() {
376
	public void rafraichirNumeroPage() {
354
		surTotalPage.setText(" sur " + pageTotale);
377
		surTotalPage.setText(" sur " + pageTotale);
355
 
378
 
356
		if (nbElement == 0) {
379
		if (nbElement == 0) {
357
			champPage.setValue("" + (0));
380
			champPage.setValue("" + (0));
358
			// on met simplement à jour l'intervalle qui contient toujours le
381
			// on met simplement à jour l'intervalle qui contient toujours le
359
			// même nombre d'éléments
382
			// même nombre d'éléments
360
			intervalleElements.setText(labelElement + " 0 - 0 sur 0");
383
			intervalleElements.setText(labelElement + " 0 - 0 sur 0");
361
		} else {
384
		} else {
362
			champPage.setValue("" + (pageCourante + 1));
385
			champPage.setValue("" + (pageCourante + 1));
363
 
386
 
364
			// si la page n'est pas la dernière
387
			// si la page n'est pas la dernière
365
			if (pageCourante + 1 != pageTotale) {
388
			if (pageCourante + 1 != pageTotale) {
366
				// sauf pour la dernière page qui contient souvent moins
389
				// sauf pour la dernière page qui contient souvent moins
367
				// d'élements que le nombre d'élements par page
390
				// d'élements que le nombre d'élements par page
368
				intervalleElements.setText(labelElement + " " + pageCourante
391
				intervalleElements.setText(labelElement + " " + pageCourante
369
						* taillePage + " - " + (pageCourante + 1) * taillePage
392
						* taillePage + " - " + (pageCourante + 1) * taillePage
370
						+ " sur " + nbElement);
393
						+ " sur " + nbElement);
371
			} else {
394
			} else {
372
				// on met simplement à jour l'intervalle qui contient toujours
395
				// on met simplement à jour l'intervalle qui contient toujours
373
				// le même nombre d'éléments
396
				// le même nombre d'éléments
374
				intervalleElements.setText(labelElement + " " + pageCourante
397
				intervalleElements.setText(labelElement + " " + pageCourante
375
						* taillePage + " - " + nbElement + " sur " + nbElement);
398
						* taillePage + " - " + nbElement + " sur " + nbElement);
376
			}
399
			}
377
		}
400
		}
378
	}
401
	}
379
 
402
 
380
	/**
403
	/**
381
	 * Met à jour la page en cours
404
	 * Met à jour la page en cours
382
	 * 
405
	 * 
383
	 * @param nouvellePageCourante
406
	 * @param nouvellePageCourante
384
	 *            la nouvelle page en cours
407
	 *            la nouvelle page en cours
385
	 */
408
	 */
386
	public void changerPageCourante(int nouvellePageCourante) {
409
	public void changerPageCourante(int nouvellePageCourante) {
387
		pageCourante = nouvellePageCourante;
410
		pageCourante = nouvellePageCourante;
388
	}
411
	}
389
 
412
 
390
	/**
413
	/**
391
	 * Methode héritée de l'interface rafraichissable
414
	 * Methode héritée de l'interface rafraichissable
392
	 */
415
	 */
393
	public void rafraichir(Object nouvelleDonnees,
416
	public void rafraichir(Object nouvelleDonnees,
394
			boolean repandreRaffraichissement) {
417
			boolean repandreRaffraichissement) {
395
 
418
 
396
		// si on reçoit un tableau de int
419
		// si on reçoit un tableau de int
397
		if (nouvelleDonnees instanceof int[]) {
420
		if (nouvelleDonnees instanceof int[]) {
398
			int[] page = (int[]) nouvelleDonnees;
421
			int[] page = (int[]) nouvelleDonnees;
399
			// le premier élement est le nombre de pages totales
422
			// le premier élement est le nombre de pages totales
400
			pageTotale = page[0];
423
			pageTotale = page[0];
401
			// le second la page en cours
424
			// le second la page en cours
402
			pageCourante = page[1];
425
			pageCourante = page[1];
403
			// le troisième la taille de la page
426
			// le troisième la taille de la page
404
			taillePage = page[2];
427
			taillePage = page[2];
405
			// et le dernier le nombre total d'éléments
428
			// et le dernier le nombre total d'éléments
406
			nbElement = page[3];
429
			nbElement = page[3];
407
 
430
 
408
			// si la page courante dépasse la page totale (cas normalement
431
			// si la page courante dépasse la page totale (cas normalement
409
			// improbable car géré en amont)
432
			// improbable car géré en amont)
410
			// on met le numéro de page à la page courante -1 (car la page
433
			// on met le numéro de page à la page courante -1 (car la page
411
			// courante est comptée à partir
434
			// courante est comptée à partir
412
			// de zéro)
435
			// de zéro)
413
			if (pageCourante >= pageTotale && pageCourante != 0) {
436
			if (pageCourante >= pageTotale && pageCourante != 0) {
414
				pageCourante = pageTotale - 1;
437
				pageCourante = pageTotale - 1;
415
				// le cas échéant on en notifie le médiateur
438
				// le cas échéant on en notifie le médiateur
416
				listePaginable.changerNumeroPage(pageCourante);
439
				listePaginable.changerNumeroPage(pageCourante);
417
			}
440
			}
418
		}
441
		}
419
 
442
 
420
		// enfin on rafraichit les informations affichées à partir des nouvelles
443
		// enfin on rafraichit les informations affichées à partir des nouvelles
421
		// variables de classes mises à jour
444
		// variables de classes mises à jour
422
		rafraichirNumeroPage();
445
		rafraichirNumeroPage();
423
	}
446
	}
424
 
447
 
425
	/**
448
	/**
426
	 * Renvoie les différents intervalles de pages possibles
449
	 * Renvoie les différents intervalles de pages possibles
427
	 * 
450
	 * 
428
	 * @return un tableau de tableau de string qui contient les différentes
451
	 * @return un tableau de string qui contient les différentes
429
	 *         taille de pages
452
	 *         taille de pages
430
	 */
453
	 */
431
	public String[][] getNbPages() {
454
	public String[] getNbPages() {
432
		String[][] pages = { { "200" }, { "100" }, { "50" }, { "20" }, { "10" } };
-
 
433
 
455
 
434
		return pages;
456
		return pages;
435
	}
457
	}
436
 
458
 
437
	/**
459
	/**
438
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
460
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
439
	 * va à son tour faire les modifications nécessaires)
461
	 * va à son tour faire les modifications nécessaires)
440
	 * 
462
	 * 
441
	 * @param nouvelleTaillePage
463
	 * @param nouvelleTaillePage
442
	 *            la nouvelle taille de page (élement appartenant au tableau
464
	 *            la nouvelle taille de page (élement appartenant au tableau
443
	 *            renvoyé par getNbPages())
465
	 *            renvoyé par getNbPages())
444
	 */
466
	 */
445
	public void changerTaillePage(int nouvelleTaillePage) {
467
	public void changerTaillePage(int nouvelleTaillePage) {
446
 
468
 
447
		listePaginable.changerTaillePage(nouvelleTaillePage);
469
		listePaginable.changerTaillePage(nouvelleTaillePage);
448
 
470
 
449
	}
471
	}
450
 
472
 
451
	/**
473
	/**
452
	 * Selectionne la valeur correspond à celle passée en paramètre dans la
474
	 * Selectionne la valeur correspond à celle passée en paramètre dans la
453
	 * combobox (si elle existe)
475
	 * combobox (si elle existe)
454
	 * 
476
	 * 
455
	 * @param nouvelleTaillePage
477
	 * @param nouvelleTaillePage
456
	 *            la nouvelle taille de page
478
	 *            la nouvelle taille de page
457
	 */
479
	 */
458
	public void selectionnerTaillePage(int nouvelleTaillePage) {
480
	public void selectionnerTaillePage(int nouvelleTaillePage) {
459
 
481
 
460
		selecteurTaillePage.setValue("" + nouvelleTaillePage);
482
		selecteurTaillePage.setValue("" + nouvelleTaillePage);
461
	}
483
	}
462
 
484
 
463
}
485
}