Subversion Repositories eFlore/Applications.cel

Rev

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

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