Subversion Repositories eFlore/Applications.coel

Rev

Rev 1683 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1683 Rev 1687
Line 11... Line 11...
11
import org.tela_botanica.client.images.Images;
11
import org.tela_botanica.client.images.Images;
12
import org.tela_botanica.client.interfaces.ListePaginable;
12
import org.tela_botanica.client.interfaces.ListePaginable;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
13
import org.tela_botanica.client.interfaces.Rafraichissable;
14
import org.tela_botanica.client.util.Debug;
14
import org.tela_botanica.client.util.Debug;
15
import org.tela_botanica.client.util.UtilString;
15
import org.tela_botanica.client.util.UtilString;
-
 
16
import org.tela_botanica.client.composants.ChampFiltreRecherche;
Line 16... Line 17...
16
 
17
 
17
import com.extjs.gxt.ui.client.event.ButtonEvent;
18
import com.extjs.gxt.ui.client.event.ButtonEvent;
18
import com.extjs.gxt.ui.client.event.ComponentEvent;
19
import com.extjs.gxt.ui.client.event.ComponentEvent;
19
import com.extjs.gxt.ui.client.event.KeyListener;
20
import com.extjs.gxt.ui.client.event.KeyListener;
Line 36... Line 37...
36
import com.google.gwt.i18n.client.Dictionary;
37
import com.google.gwt.i18n.client.Dictionary;
37
import com.google.gwt.user.client.Window;
38
import com.google.gwt.user.client.Window;
Line 38... Line 39...
38
 
39
 
Line 160... Line 163...
160
				nbElemParPage.setStyleAttribute("padding-left", "5px");
163
		nbElemParPage.setStyleAttribute("padding-left", "5px");
161
				add(nbElemParPage);
164
		add(nbElemParPage);
Line 162... Line 165...
162
		
165
		
163
				//Séparation
166
		//Séparation
164
				add(new SeparatorToolItem());
167
		add(new SeparatorToolItem());
-
 
168
				
-
 
169
		intervalleElements = new Text(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
-
 
170
								     pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
-
 
171
		add(intervalleElements);
-
 
172
		
-
 
173
		// on ajoute les différents listeners
-
 
174
		ajouterListeners();	
-
 
175
	}
-
 
176
 
-
 
177
	public BarrePaginationVue(ListePaginable listePaginableCourante, Mediateur mediateurCourant, ChampFiltreRecherche champFiltreRechercheCourant) {
-
 
178
		this(listePaginableCourante, mediateurCourant);
-
 
179
		champFiltreRecherche = champFiltreRechercheCourant;
-
 
180
	}
-
 
181
	
-
 
182
	/**
-
 
183
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
-
 
184
	 * 	@param label
-
 
185
	 */
-
 
186
	public void setLabelElement(String label) {
-
 
187
		this.labelElement = label;
-
 
188
		nbElemParPage.setText(labelElement + " par page ");
-
 
189
		intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
-
 
190
								  pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
-
 
191
	}
-
 
192
 
-
 
193
	public void setTaillePageParDefaut(int taille) {
-
 
194
		this.taillePageDefaut = taille;
-
 
195
		selecteurTaillePage.setRawValue(""+taillePageDefaut);
-
 
196
	}
-
 
197
	
-
 
198
	public void setIntervallesPages() {
-
 
199
		if (!intervallePages.contains(taillePage))	{
-
 
200
			intervallePages.add(taillePage);
-
 
201
		}
-
 
202
		
-
 
203
		Iterator<Integer> itIntervallePages = intervallePages.iterator();
-
 
204
		while (itIntervallePages.hasNext())	{
-
 
205
			Integer intervalle = itIntervallePages.next();
-
 
206
			selecteurTaillePage.add(intervalle);
-
 
207
		}
-
 
208
 
-
 
209
		selecteurTaillePage.setSimpleValue(taillePage);
-
 
210
	}
-
 
211
	
-
 
212
	/**
-
 
213
	 * Change l'état de la barre de pagination a actif ou inactif
-
 
214
	 * @param etat actif ou inactif
-
 
215
	 */
-
 
216
	private void changerEtatBarre(boolean etat) {
-
 
217
		premierePage.setEnabled(etat);
-
 
218
		prevPage.setEnabled(etat);
-
 
219
		suivPage.setEnabled(etat);
-
 
220
		dernierePage.setEnabled(etat);
-
 
221
		champPage.setEnabled(etat);
-
 
222
		selecteurTaillePage.setEnabled(etat);
-
 
223
		page.setEnabled(etat);
-
 
224
		surTotalPage.setEnabled(etat);
-
 
225
		afficherNbElem.setEnabled(etat);
-
 
226
		nbElemParPage.setEnabled(etat);
-
 
227
	}
-
 
228
	
-
 
229
	/**
-
 
230
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
-
 
231
	 * éléments de la barre de pagination
-
 
232
	 */
-
 
233
	@SuppressWarnings("unchecked")
-
 
234
	private void ajouterListeners() {
-
 
235
		premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
236
				public void componentSelected(ButtonEvent ce)	{
-
 
237
					pageCourante = 0;
Line 165... Line 238...
165
				
238
					rafraichirNumeroPage();
-
 
239
					changePage();
166
				intervalleElements = new Text(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
240
				}
167
																	 pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
-
 
168
				add(intervalleElements);
-
 
169
		
-
 
170
				// on ajoute les différents listeners
241
			});
171
				ajouterListeners();	
242
		
172
		}
-
 
173
	
243
		// boutons suivants et précédents
174
		/**
244
		prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
175
		 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
245
				public void componentSelected(ButtonEvent ce) {
176
		 * 	@param label
246
					// si la page courante n'est pas la première
177
		 */
247
					if (pageCourante > 0) {
-
 
248
						// on décrémente la page courante de 1
178
		public void setLabelElement(String label) {
249
						pageCourante--;
-
 
250
						// on rafraichit l'affichage
Line -... Line 251...
-
 
251
						rafraichirNumeroPage();
179
				this.labelElement = label;
252
						changePage();
-
 
253
					}
180
				nbElemParPage.setText(labelElement + " par page ");
254
				}
181
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
255
			});
-
 
256
 
-
 
257
		suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
258
				public void componentSelected(ButtonEvent ce)	{
-
 
259
					// si la page courante n'est pas la dernière
-
 
260
					if (pageCourante < pageTotale - 1) {
182
																  pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
261
						// on incrémente la page courante de 1
-
 
262
						pageCourante++;
183
		}
263
						// on rafraichit l'affichage
-
 
264
						rafraichirNumeroPage();
184
 
265
						changePage();
185
		public void setTaillePageParDefaut(int taille) {
266
					}
186
				this.taillePageDefaut = taille;
267
				}
-
 
268
			});
187
				selecteurTaillePage.setRawValue(""+taillePageDefaut);
269
		
-
 
270
		dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
Line 188... Line 271...
188
		}
271
				public void componentSelected(ButtonEvent ce)	{
189
	
272
					pageCourante = pageTotale;
190
		public void setIntervallesPages() {
-
 
191
				if (!intervallePages.contains(taillePage))	{
273
					rafraichirNumeroPage();
192
						intervallePages.add(taillePage);
274
					changePage();
-
 
275
				}
Line 193... Line -...
193
				}
-
 
194
		
-
 
195
				Iterator<Integer> itIntervallePages = intervallePages.iterator();
-
 
196
				while (itIntervallePages.hasNext())	{
-
 
197
						Integer intervalle = itIntervallePages.next();
-
 
198
						selecteurTaillePage.add(intervalle);
-
 
199
				}
-
 
200
 
-
 
201
				selecteurTaillePage.setSimpleValue(taillePage);
-
 
202
		}
-
 
203
	
-
 
204
		/**
-
 
205
		 * Change l'état de la barre de pagination a actif ou inactif
-
 
206
		 * @param etat actif ou inactif
-
 
207
		 */
-
 
208
		private void changerEtatBarre(boolean etat) {
-
 
209
				premierePage.setEnabled(etat);
-
 
210
				prevPage.setEnabled(etat);
-
 
211
				suivPage.setEnabled(etat);
-
 
212
				dernierePage.setEnabled(etat);
-
 
213
				champPage.setEnabled(etat);
-
 
214
				selecteurTaillePage.setEnabled(etat);
-
 
215
				page.setEnabled(etat);
-
 
216
				surTotalPage.setEnabled(etat);
-
 
217
				afficherNbElem.setEnabled(etat);
-
 
218
				nbElemParPage.setEnabled(etat);
-
 
219
		}
-
 
220
	
-
 
221
		/**
-
 
222
		 * ajoute les différents listeners nécessaires au bon fonctionnement des
-
 
223
		 * éléments de la barre de pagination
-
 
224
		 */
-
 
225
		@SuppressWarnings("unchecked")
-
 
226
		private void ajouterListeners() {
-
 
227
				premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
228
								public void componentSelected(ButtonEvent ce)	{
-
 
229
										pageCourante = 0;
-
 
230
										rafraichirNumeroPage();
-
 
231
										listePaginable.changerNumeroPage(pageCourante);
-
 
232
								}
-
 
233
						});
-
 
234
		
-
 
235
				// boutons suivants et précédents
-
 
236
				prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
237
								public void componentSelected(ButtonEvent ce) {
-
 
238
										// si la page courante n'est pas la première
-
 
239
										if (pageCourante > 0) {
-
 
240
												// on décrémente la page courante de 1
-
 
241
												pageCourante--;
-
 
242
												// on rafraichit l'affichage
-
 
243
												rafraichirNumeroPage();
-
 
244
												// et on notifie le médiateur de l'évenement
-
 
245
												listePaginable.changerNumeroPage(pageCourante);
-
 
246
 
-
 
247
										}
-
 
248
								}
-
 
249
						});
-
 
250
 
-
 
251
				suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
252
								public void componentSelected(ButtonEvent ce)	{
-
 
253
										// si la page courante n'est pas la dernière
-
 
254
										if (pageCourante < pageTotale - 1) {
-
 
255
												// on incrémente la page courante de 1
-
 
256
												pageCourante++;
-
 
257
												// on rafraichit l'affichage
-
 
258
												rafraichirNumeroPage();
-
 
259
												// et on notifie le médiateur de l'évenement
-
 
260
												listePaginable.changerNumeroPage(pageCourante);
-
 
261
										}
-
 
262
								}
-
 
263
						});
-
 
264
		
-
 
265
				dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
-
 
266
								public void componentSelected(ButtonEvent ce)	{
-
 
267
										pageCourante = pageTotale;
-
 
268
										rafraichirNumeroPage();
-
 
269
										listePaginable.changerNumeroPage(pageCourante);
-
 
270
								}
-
 
271
						});
276
			});
272
		
277
		
273
				rafraichir.addSelectionListener(new SelectionListener<ButtonEvent>() {
278
		rafraichir.addSelectionListener(new SelectionListener<ButtonEvent>() {
274
								public void componentSelected(ButtonEvent ce)	{
279
				public void componentSelected(ButtonEvent ce)	{
275
										listePaginable.changerNumeroPage(pageCourante);
280
					changePage();
276
								}
281
				}
277
						});
282
			});
278
 
283
 
279
				champPage.addKeyListener(new KeyListener() {
284
		champPage.addKeyListener(new KeyListener() {
280
								public void componentKeyUp(ComponentEvent ce) 	{
285
				public void componentKeyUp(ComponentEvent ce) 	{
281
										// on teste si la touche entrée a été pressée
286
					// on teste si la touche entrée a été pressée
282
										if (ce.getKeyCode() == KeyCodes.KEY_ENTER) {
287
					if (ce.getKeyCode() == KeyCodes.KEY_ENTER) {
283
												int nouvellePage = champPage.getValue().intValue();
288
						int nouvellePage = champPage.getValue().intValue();
284
 
289
 
285
												// on verifie s'il est nécessaire de changer de page
-
 
286
												// et si la nouvelle est comprise dans l'intervalle des
-
 
287
												// pages existantes (0..pageTotale)
-
 
288
												if (nouvellePage != pageCourante + 1 && nouvellePage > 0
-
 
289
													&& nouvellePage <= pageTotale) {
-
 
290
														// le cas échéant, on charge la nouvelle page et on
-
 
291
														// notifie le médiateur
-
 
292
														changerPageCourante(nouvellePage - 1);
-
 
293
														listePaginable.changerNumeroPage(pageCourante);
-
 
294
												} else {
-
 
295
														// sinon on reaffiche l'ancien numero de page sans rien changer
-
 
296
														rafraichirNumeroPage();
-
 
297
														champPage.focus();
-
 
298
												}
-
 
299
										}
-
 
300
								}
-
 
301
						});
-
 
302
 
-
 
303
				// listener pour la selection dans la combobox
-
 
304
				selecteurTaillePage.addSelectionChangedListener(new SelectionChangedListener() {
-
 
305
								public void selectionChanged(SelectionChangedEvent e) {
-
 
306
										SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
-
 
307
										String nouvelleTaillePageString = comboBox.getRawValue();
-
 
308
										int nouvelleTaillePage = Integer.parseInt(nouvelleTaillePageString);
-
 
309
										changerTaillePage(nouvelleTaillePage);
-
 
310
										rafraichirNumeroPage();			
-
 
311
								}
-
 
312
						});
-
 
313
		}
-
 
314
	
290
						// on verifie s'il est nécessaire de changer de page
315
		/**
-
 
316
		 * Met à jour les affichage sur les numéros de pages et d'intervalle
-
 
317
		 * d'éléments à partir des variables de classes
-
 
318
		 */
-
 
319
		public void rafraichirNumeroPage() {
-
 
320
				surTotalPage.setText(" sur " + pageTotale);
-
 
321
				if (nbElement == 0) {
-
 
322
						champPage.setValue(0);
-
 
323
						// on met simplement à jour l'intervalle qui contient toujours le
-
 
324
						// même nombre d'éléments
-
 
325
						intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 0,0,0));
-
 
326
				} else {
291
						// et si la nouvelle est comprise dans l'intervalle des
327
						champPage.setValue(pageCourante + 1);
-
 
328
						// si la page n'est pas la dernière
292
						// pages existantes (0..pageTotale)
329
						if (pageCourante + 1 != pageTotale) {
293
						if (nouvellePage != pageCourante + 1 && nouvellePage > 0
330
								// sauf pour la dernière page qui contient souvent moins
-
 
331
								// d'élements que le nombre d'élements par page
294
						    && nouvellePage <= pageTotale) {
332
								intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
295
							// le cas échéant, on charge la nouvelle page et on
-
 
296
							// notifie le médiateur
333
																				  (pageCourante + 1) * taillePage, nbElement));
297
							changerPageCourante(nouvellePage - 1);
334
						} else {
298
							changePage();
335
				
-
 
336
								// on met simplement à jour l'intervalle qui contient toujours
-
 
337
								// le même nombre d'éléments
-
 
338
								intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
-
 
339
																				  nbElement, nbElement));
-
 
340
						}
-
 
341
				}
-
 
342
		}
-
 
343
 
-
 
344
		/**
-
 
Line 345... Line -...
345
		 * Met à jour la page en cours
-
 
346
		 * 
299
						} else {
347
		 * @param nouvellePageCourante
300
							// sinon on reaffiche l'ancien numero de page sans rien changer
348
		 *            la nouvelle page en cours
-
 
349
		 */
301
							rafraichirNumeroPage();
350
		public void changerPageCourante(int nouvellePageCourante) {
302
							champPage.focus();
351
				pageCourante = nouvellePageCourante;
303
						}
352
		}
-
 
353
 
304
					}
354
		/**
305
				}
355
		 * Envoie au médiateur une demande pour modifier la taille de la page (qui
306
			});
356
		 * va à son tour faire les modifications nécessaires)
307
 
-
 
308
		// listener pour la selection dans la combobox
357
		 * 
309
		selecteurTaillePage.addSelectionChangedListener(new SelectionChangedListener() {
Line -... Line 310...
-
 
310
				public void selectionChanged(SelectionChangedEvent e) {
-
 
311
					SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
-
 
312
					String nouvelleTaillePageString = comboBox.getRawValue();
-
 
313
					int nouvelleTaillePage = Integer.parseInt(nouvelleTaillePageString);
-
 
314
					changerTaillePage(nouvelleTaillePage);
-
 
315
					rafraichirNumeroPage();			
-
 
316
				}
-
 
317
			});
-
 
318
	}
-
 
319
 
-
 
320
	public void changePage() {
-
 
321
		// si notre barre de pagination n'a pas été initialisée
-
 
322
		// avec un filtre de recherche, contentons-nous de changer de page
-
 
323
		// Attention, car tous les webservice ne supporte pas un segment d'URI "null" (500)
-
 
324
		if(champFiltreRecherche == null || champFiltreRecherche.getFiltreValue() == null) {
-
 
325
			// et on notifie le médiateur de l'évenement
-
 
326
			listePaginable.changerNumeroPage(pageCourante);
-
 
327
		} else {
-
 
328
			// autrement nous pouvons changer de page *tout en conservant* le filtre de recherche,
-
 
329
			// charge au modèle de cette liste d'avoir implémenté correctement filtrerParNomEtPage()
-
 
330
			listePaginable.filtrerParNomEtPage(champFiltreRecherche.getFiltreValue(), pageCourante);
-
 
331
		}
-
 
332
	}
-
 
333
 
-
 
334
	
-
 
335
	/**
-
 
336
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
-
 
337
	 * d'éléments à partir des variables de classes
-
 
338
	 */
-
 
339
	public void rafraichirNumeroPage() {
-
 
340
		surTotalPage.setText(" sur " + pageTotale);
-
 
341
		if (nbElement == 0) {
-
 
342
			champPage.setValue(0);
-
 
343
			// on met simplement à jour l'intervalle qui contient toujours le
-
 
344
			// même nombre d'éléments
-
 
345
			intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 0,0,0));
-
 
346
		} else {
-
 
347
			champPage.setValue(pageCourante + 1);
-
 
348
			// si la page n'est pas la dernière
-
 
349
			if (pageCourante + 1 != pageTotale) {
-
 
350
				// sauf pour la dernière page qui contient souvent moins
-
 
351
				// d'élements que le nombre d'élements par page
-
 
352
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
-
 
353
										  (pageCourante + 1) * taillePage, nbElement));
-
 
354
			} else {
-
 
355
				
-
 
356
				// on met simplement à jour l'intervalle qui contient toujours
-
 
357
				// le même nombre d'éléments
-
 
358
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
-
 
359
										  nbElement, nbElement));
-
 
360
			}
-
 
361
		}
-
 
362
	}
-
 
363
 
-
 
364
	/**
-
 
365
	 * Met à jour la page en cours
-
 
366
	 * 
-
 
367
	 * @param nouvellePageCourante
-
 
368
	 *            la nouvelle page en cours
-
 
369
	 */
-
 
370
	public void changerPageCourante(int nouvellePageCourante) {
-
 
371
		pageCourante = nouvellePageCourante;
-
 
372
	}
-
 
373
 
-
 
374
	/**
-
 
375
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
-
 
376
	 * va à son tour faire les modifications nécessaires)
-
 
377
	 * 
358
		 * @param nouvelleTaillePage
378
	 * @param nouvelleTaillePage
359
		 *            la nouvelle taille de page (élement appartenant au tableau
379
	 *            la nouvelle taille de page (élement appartenant au tableau
360
		 *            renvoyé par getNbPages())
380
	 *            renvoyé par getNbPages())
361
		 */
381
	 */
362
		public void changerTaillePage(int nouvelleTaillePage) {
382
	public void changerTaillePage(int nouvelleTaillePage) {
363
				if (nouvelleTaillePage != taillePage)	{
383
		if (nouvelleTaillePage != taillePage)	{
364
						listePaginable.changerTaillePage(nouvelleTaillePage);
384
			listePaginable.changerTaillePage(nouvelleTaillePage);
365
				}
385
		}
366
		}
386
	}
367
 
387
 
368
		/**
388
	/**
369
		 * Selectionne la valeur correspond à celle passée en paramètre dans la
389
	 * Selectionne la valeur correspond à celle passée en paramètre dans la
370
		 * combobox (si elle existe)
390
	 * combobox (si elle existe)
371
		 * 
391
	 * 
372
		 * @param nouvelleTaillePage
392
	 * @param nouvelleTaillePage
373
		 *            la nouvelle taille de page
393
	 *            la nouvelle taille de page
374
		 */
394
	 */
375
		public void selectionnerTaillePage(int nouvelleTaillePage) {
395
	public void selectionnerTaillePage(int nouvelleTaillePage) {
376
				selecteurTaillePage.setRawValue("" + nouvelleTaillePage);
396
		selecteurTaillePage.setRawValue("" + nouvelleTaillePage);
377
		}
397
	}
378
 
398
 
379
		public void rafraichir(Object nouvelleDonnees) {
399
	public void rafraichir(Object nouvelleDonnees) {
380
				// si on reçoit un tableau de int
400
		// si on reçoit un tableau de int
Line 381... Line 401...
381
				if (nouvelleDonnees instanceof int[]) {
401
		if (nouvelleDonnees instanceof int[]) {
382
						int[] page = (int[]) nouvelleDonnees;
402
			int[] page = (int[]) nouvelleDonnees;
383
						// le premier élement est le nombre de pages totales
403
			// le premier élement est le nombre de pages totales
384
						pageTotale = page[0];
404
			pageTotale = page[0];
385
						// le second la page en cours
405
			// le second la page en cours
386
						pageCourante = page[1];
406
			pageCourante = page[1];
387
						// le troisième la taille de la page
407
			// le troisième la taille de la page
388
						taillePage = page[2];
408
			taillePage = page[2];
389
						// et le dernier le nombre total d'éléments
409
			// et le dernier le nombre total d'éléments
390
						nbElement = page[3];
410
			nbElement = page[3];
391
			
411
			
392
						// si la page courante dépasse la page totale (cas normalement
412
			// si la page courante dépasse la page totale (cas normalement
393
						// improbable car géré en amont)
413
			// improbable car géré en amont)
394
						// on met le numéro de page à la page courante -1 (car la page
414
			// on met le numéro de page à la page courante -1 (car la page
395
						// courante est comptée à partir
415
			// courante est comptée à partir
Line 396... Line 416...
396
						// de zéro)
416
			// de zéro)
397
						if (pageCourante >= pageTotale && pageCourante != 0) {
417
			if (pageCourante >= pageTotale && pageCourante != 0) {
398
								pageCourante = pageTotale - 1;
418
				pageCourante = pageTotale - 1;