Subversion Repositories eFlore/Applications.cel

Rev

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

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