Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 594 Rev 621
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
2
 
2
 
3
import java.util.ArrayList;
3
import java.util.ArrayList;
4
import java.util.Iterator;
4
import java.util.Iterator;
5
import java.util.LinkedList;
5
import java.util.LinkedList;
6
 
6
 
7
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.images.Images;
8
import org.tela_botanica.client.images.Images;
9
import org.tela_botanica.client.interfaces.ListePaginable;
9
import org.tela_botanica.client.interfaces.ListePaginable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.InterneValeur;
11
import org.tela_botanica.client.modeles.InterneValeur;
-
 
12
import org.tela_botanica.client.util.UtilString;
12
 
13
 
13
import com.extjs.gxt.ui.client.event.ButtonEvent;
14
import com.extjs.gxt.ui.client.event.ButtonEvent;
14
import com.extjs.gxt.ui.client.event.ComponentEvent;
15
import com.extjs.gxt.ui.client.event.ComponentEvent;
15
import com.extjs.gxt.ui.client.event.KeyListener;
16
import com.extjs.gxt.ui.client.event.KeyListener;
16
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
17
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
17
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
18
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
18
import com.extjs.gxt.ui.client.event.SelectionListener;
19
import com.extjs.gxt.ui.client.event.SelectionListener;
19
import com.extjs.gxt.ui.client.store.ListStore;
20
import com.extjs.gxt.ui.client.store.ListStore;
20
import com.extjs.gxt.ui.client.widget.Text;
21
import com.extjs.gxt.ui.client.widget.Text;
21
import com.extjs.gxt.ui.client.widget.button.Button;
22
import com.extjs.gxt.ui.client.widget.button.Button;
22
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
23
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
23
import com.extjs.gxt.ui.client.widget.form.TextField;
24
import com.extjs.gxt.ui.client.widget.form.TextField;
24
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
25
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
25
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
26
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
26
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
27
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
27
import com.google.gwt.event.dom.client.KeyCodes;
28
import com.google.gwt.event.dom.client.KeyCodes;
28
import com.google.gwt.i18n.client.Dictionary;
29
import com.google.gwt.i18n.client.Dictionary;
29
 
30
 
30
public class BarrePaginationVue extends ToolBar implements Rafraichissable {
31
public class BarrePaginationVue extends ToolBar implements Rafraichissable {
31
 
32
 
32
	private ListePaginable listePaginable = null;
33
	private ListePaginable listePaginable = null;
33
	
34
	
34
	private Button prevPage, suivPage, premierePage, dernierePage, rafraichir;
35
	private Button prevPage, suivPage, premierePage, dernierePage, rafraichir;
35
	
36
	
36
	private int pageCourante, nbElement = 0;
37
	private int pageCourante, nbElement = 0;
37
	private int taillePage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
38
	private int taillePage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
38
	private int pageTotale = 1;
39
	private int pageTotale = 1;
39
	private Text page, surTotalPage, afficherNbElem, nbElemParPage, intervalleElements;
40
	private Text page, surTotalPage, afficherNbElem, nbElemParPage, intervalleElements;
40
	
41
	
41
	private TextField<String> champPage = new TextField<String>();
42
	private TextField<String> champPage = new TextField<String>();
42
	private SimpleComboBox selecteurTaillePage = new SimpleComboBox();
43
	private SimpleComboBox selecteurTaillePage = new SimpleComboBox();
43
 
44
 
44
	LinkedList<Integer> intervallePages = new LinkedList<Integer>();
45
	LinkedList<Integer> intervallePages = new LinkedList<Integer>();
45
	
46
	
46
	ListStore storeIntervalle = new ListStore() ;
47
	ListStore storeIntervalle = new ListStore() ;
47
		
48
		
48
	private String labelElement;
49
	private String labelElement;
49
	private int taillePageDefaut = 50;
50
	private int taillePageDefaut = 50;
50
	
51
	
51
	public ListePaginable getlistePaginable() {
52
	public ListePaginable getlistePaginable() {
52
		return listePaginable;
53
		return listePaginable;
53
	}
54
	}
54
	
55
	
55
	public void setlistePaginable(ListePaginable listePaginable) {
56
	public void setlistePaginable(ListePaginable listePaginable) {
56
		this.listePaginable = listePaginable;
57
		this.listePaginable = listePaginable;
57
	}
58
	}
58
	
59
	
59
	private Mediateur mediateur;
60
	private Mediateur mediateur;
60
	
61
	
61
	public int valeur = 0;
62
	public int valeur = 0;
62
	/***************************************************************************
63
	/***************************************************************************
63
	 * constructeur sans argument (privé car ne doit pas être utilisé)
64
	 * constructeur sans argument (privé car ne doit pas être utilisé)
64
	 */
65
	 */
65
	@SuppressWarnings("unused")
66
	@SuppressWarnings("unused")
66
	private BarrePaginationVue() {
67
	private BarrePaginationVue() {
67
		super();
68
		super();
68
	}
69
	}
69
 
70
 
70
	/**
71
	/**
71
	 * constructeur avec paramètres
72
	 * constructeur avec paramètres
72
	 * 
73
	 * 
73
	 * @param im
74
	 * @param im
74
	 *            le médiateur à associer à la barre
75
	 *            le médiateur à associer à la barre
75
	 */
76
	 */
76
	public BarrePaginationVue(ListePaginable listePaginable, Mediateur mediateur) {
77
	public BarrePaginationVue(ListePaginable listePaginable, Mediateur mediateur) {
77
		
78
		
78
		super();
79
		super();
79
		
80
		
80
		this.listePaginable = listePaginable;		
81
		this.listePaginable = listePaginable;		
81
		this.mediateur = mediateur;
82
		this.mediateur = mediateur;
82
		
83
		
83
		intervallePages.add(10);
84
		intervallePages.add(10);
84
		intervallePages.add(20);
85
		intervallePages.add(20);
85
		intervallePages.add(50);
86
		intervallePages.add(50);
86
		intervallePages.add(100);
87
		intervallePages.add(100);
87
		intervallePages.add(200);
88
		intervallePages.add(200);
88
		
89
		
89
		premierePage = new Button();
90
		premierePage = new Button();
90
		premierePage.setIcon(Images.ICONES.resultsetFirst());
91
		premierePage.setIcon(Images.ICONES.resultsetFirst());
91
		add(premierePage);
92
		add(premierePage);
92
		
93
		
93
		prevPage = new Button();
94
		prevPage = new Button();
94
		prevPage.setIcon(Images.ICONES.resultsetPrevious());
95
		prevPage.setIcon(Images.ICONES.resultsetPrevious());
95
		add(prevPage);
96
		add(prevPage);
96
		
97
		
97
		add(new SeparatorToolItem());		
98
		add(new SeparatorToolItem());		
98
		
99
		
99
		page = new Text(mediateur.i18nC.page());
100
		page = new Text(mediateur.i18nC.page());
100
		page.setStyleAttribute("padding", "0 5px 0 5px");
101
		page.setStyleAttribute("padding", "0 5px 0 5px");
101
		add(page);
102
		add(page);
102
		
103
		
103
		champPage.setValue(String.valueOf(pageCourante+1));
104
		champPage.setValue(String.valueOf(pageCourante+1));
104
		champPage.setStyleAttribute("text-align","right");
105
		champPage.setStyleAttribute("text-align","right");
105
		champPage.setWidth(30);
106
		champPage.setWidth(30);
106
		add(champPage);
107
		add(champPage);
107
		
108
		
108
		surTotalPage = new Text(mediateur.i18nC.sur() + " " + pageTotale);
109
		surTotalPage = new Text(mediateur.i18nC.sur() + " " + pageTotale);
109
		surTotalPage.setStyleAttribute("padding-left", "5px");
110
		surTotalPage.setStyleAttribute("padding-left", "5px");
110
		add(surTotalPage);
111
		add(surTotalPage);
111
		
112
		
112
		//Séparation
113
		//Séparation
113
		add(new SeparatorToolItem());
114
		add(new SeparatorToolItem());
114
		
115
		
115
		suivPage = new Button();
116
		suivPage = new Button();
116
		suivPage.setIcon(Images.ICONES.resultsetNext());
117
		suivPage.setIcon(Images.ICONES.resultsetNext());
117
		add(suivPage);
118
		add(suivPage);
118
		
119
		
119
		dernierePage = new Button();
120
		dernierePage = new Button();
120
		dernierePage.setIcon(Images.ICONES.resultsetLast());
121
		dernierePage.setIcon(Images.ICONES.resultsetLast());
121
		add(dernierePage);
122
		add(dernierePage);
122
 
123
 
123
		//Séparation
124
		//Séparation
124
		add(new SeparatorToolItem());
125
		add(new SeparatorToolItem());
125
		
126
		
126
		rafraichir = new Button();
127
		rafraichir = new Button();
127
		rafraichir.setIcon(Images.ICONES.rafraichir());
128
		rafraichir.setIcon(Images.ICONES.rafraichir());
128
		add(rafraichir);
129
		add(rafraichir);
129
		
130
		
130
		//Séparation
131
		//Séparation
131
		add(new SeparatorToolItem());
132
		add(new SeparatorToolItem());
132
		
133
		
133
		afficherNbElem = new Text(mediateur.i18nC.afficher());
134
		afficherNbElem = new Text(mediateur.i18nC.afficher());
134
		afficherNbElem.setStyleAttribute("padding", "0 5px 0 5px");
135
		afficherNbElem.setStyleAttribute("padding", "0 5px 0 5px");
135
		add(afficherNbElem);
136
		add(afficherNbElem);
136
 
137
 
137
		
138
		
138
		selecteurTaillePage.setWidth("40px");
139
		selecteurTaillePage.setWidth("40px");
139
		setIntervallesPages();
140
		setIntervallesPages();
140
		add(selecteurTaillePage);
141
		add(selecteurTaillePage);
141
		
142
		
142
		labelElement = mediateur.i18nC.elements();
143
		labelElement = mediateur.i18nC.elements();
143
		
144
		
144
		nbElemParPage = new Text(labelElement + " " +mediateur.i18nC.parPage());
145
		nbElemParPage = new Text(labelElement + " " +mediateur.i18nC.parPage());
145
		nbElemParPage.setStyleAttribute("padding-left", "5px");
146
		nbElemParPage.setStyleAttribute("padding-left", "5px");
146
		add(nbElemParPage);
147
		add(nbElemParPage);
147
		
148
		
148
		// Ajout d'un espace pour mettre le nombre d'éléments à droite
149
		// Ajout d'un espace pour mettre le nombre d'éléments à droite
149
		add(new FillToolItem());
150
		add(new FillToolItem());
150
		
151
		
151
		intervalleElements = new Text(mediateur.i18nM.elementsAffiches(ucFirst(labelElement), pageCourante * taillePage, 
152
		intervalleElements = new Text(mediateur.i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
152
																	(pageCourante + 1) * taillePage, nbElement));
153
																	(pageCourante + 1) * taillePage, nbElement));
153
		add(intervalleElements);
154
		add(intervalleElements);
154
		
155
		
155
		// on ajoute les différents listeners
156
		// on ajoute les différents listeners
156
		ajouterListeners();
157
		ajouterListeners();
157
	}
158
	}
158
	
159
	
159
	
-
 
160
	private String ucFirst(String inputStr)	{
160
	
161
		
-
 
162
		return inputStr.substring(0,1).toUpperCase() + inputStr.substring(1, inputStr.length());
-
 
163
	}
161
	
164
	
162
	
165
	/**
163
	/**
166
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
164
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
167
	 * 	@param label
165
	 * 	@param label
168
	 */
166
	 */
169
	
167
	
170
	public void setLabelElement(String label) {
168
	public void setLabelElement(String label) {
171
		this.labelElement = label;
169
		this.labelElement = label;
172
		nbElemParPage.setText(labelElement + " par page ");
170
		nbElemParPage.setText(labelElement + " par page ");
173
		intervalleElements.setText(mediateur.i18nM.elementsAffiches(ucFirst(labelElement), pageCourante * taillePage, 
171
		intervalleElements.setText(mediateur.i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
174
				(pageCourante + 1) * taillePage, nbElement));
172
				(pageCourante + 1) * taillePage, nbElement));
175
		
173
		
176
	}
174
	}
177
 
175
 
178
	public void setTaillePageParDefaut(int taille) {
176
	public void setTaillePageParDefaut(int taille) {
179
		this.taillePageDefaut = taille;
177
		this.taillePageDefaut = taille;
180
		selecteurTaillePage.setRawValue(""+taillePageDefaut);
178
		selecteurTaillePage.setRawValue(""+taillePageDefaut);
181
	}
179
	}
182
	
180
	
183
	public void setIntervallesPages()
181
	public void setIntervallesPages()
184
	{
182
	{
185
		
183
		
186
		if (!intervallePages.contains(taillePage))	{
184
		if (!intervallePages.contains(taillePage))	{
187
			intervallePages.add(taillePage);
185
			intervallePages.add(taillePage);
188
		}
186
		}
189
		
187
		
190
		Iterator<Integer> itIntervallePages = intervallePages.iterator();
188
		Iterator<Integer> itIntervallePages = intervallePages.iterator();
191
		while (itIntervallePages.hasNext())	{
189
		while (itIntervallePages.hasNext())	{
192
			selecteurTaillePage.add(itIntervallePages.next());
190
			selecteurTaillePage.add(itIntervallePages.next());
193
		}
191
		}
194
		
192
		
195
		selecteurTaillePage.setSimpleValue(taillePage);
193
		selecteurTaillePage.setSimpleValue(taillePage);
196
	}
194
	}
197
	
195
	
198
	
196
	
199
	/**
197
	/**
200
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
198
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
201
	 * éléments de la barre de pagination
199
	 * éléments de la barre de pagination
202
	 */
200
	 */
203
	@SuppressWarnings("unchecked")
201
	@SuppressWarnings("unchecked")
204
	private void ajouterListeners() {
202
	private void ajouterListeners() {
205
		
203
		
206
		premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
204
		premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
207
		
205
		
208
			public void componentSelected(ButtonEvent ce)	{
206
			public void componentSelected(ButtonEvent ce)	{
209
				pageCourante = 0;
207
				pageCourante = 0;
210
				rafraichirNumeroPage();
208
				rafraichirNumeroPage();
211
				listePaginable.changerNumeroPage(pageCourante);
209
				listePaginable.changerNumeroPage(pageCourante);
212
			}
210
			}
213
		});
211
		});
214
		
212
		
215
		// boutons suivants et précédents
213
		// boutons suivants et précédents
216
		prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
214
		prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
217
			
215
			
218
			public void componentSelected(ButtonEvent ce) {
216
			public void componentSelected(ButtonEvent ce) {
219
							// si la page courante n'est pas la première
217
							// si la page courante n'est pas la première
220
				if (pageCourante > 0) {
218
				if (pageCourante > 0) {
221
					// on décrémente la page courante de 1
219
					// on décrémente la page courante de 1
222
					pageCourante--;
220
					pageCourante--;
223
					// on rafraichit l'affichage
221
					// on rafraichit l'affichage
224
					rafraichirNumeroPage();
222
					rafraichirNumeroPage();
225
					// et on notifie le médiateur de l'évenement
223
					// et on notifie le médiateur de l'évenement
226
					listePaginable.changerNumeroPage(pageCourante);
224
					listePaginable.changerNumeroPage(pageCourante);
227
 
225
 
228
				}
226
				}
229
			}
227
			}
230
		});
228
		});
231
 
229
 
232
		suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
230
		suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
233
		
231
		
234
			public void componentSelected(ButtonEvent ce)	{
232
			public void componentSelected(ButtonEvent ce)	{
235
				
233
				
236
				// si la page courante n'est pas la dernière
234
				// si la page courante n'est pas la dernière
237
				if (pageCourante < pageTotale - 1) {
235
				if (pageCourante < pageTotale - 1) {
238
					// on incrémente la page courante de 1
236
					// on incrémente la page courante de 1
239
					pageCourante++;
237
					pageCourante++;
240
					// on rafraichit l'affichage
238
					// on rafraichit l'affichage
241
					rafraichirNumeroPage();
239
					rafraichirNumeroPage();
242
					// et on notifie le médiateur de l'évenement
240
					// et on notifie le médiateur de l'évenement
243
					listePaginable.changerNumeroPage(pageCourante);
241
					listePaginable.changerNumeroPage(pageCourante);
244
				}
242
				}
245
			}
243
			}
246
		});
244
		});
247
		
245
		
248
		dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
246
		dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
249
			
247
			
250
			public void componentSelected(ButtonEvent ce)	{
248
			public void componentSelected(ButtonEvent ce)	{
251
				pageCourante = pageTotale;
249
				pageCourante = pageTotale;
252
				rafraichirNumeroPage();
250
				rafraichirNumeroPage();
253
				listePaginable.changerNumeroPage(pageCourante);
251
				listePaginable.changerNumeroPage(pageCourante);
254
			}
252
			}
255
		});
253
		});
256
		
254
		
257
		rafraichir.addSelectionListener(new SelectionListener<ButtonEvent>() {
255
		rafraichir.addSelectionListener(new SelectionListener<ButtonEvent>() {
258
			
256
			
259
			public void componentSelected(ButtonEvent ce)	{
257
			public void componentSelected(ButtonEvent ce)	{
260
				listePaginable.changerNumeroPage(pageCourante);
258
				listePaginable.changerNumeroPage(pageCourante);
261
			}
259
			}
262
		});
260
		});
263
 
261
 
264
 
262
 
265
		champPage.addKeyListener(new KeyListener() {
263
		champPage.addKeyListener(new KeyListener() {
266
 
264
 
267
			public void componentKeyUp(ComponentEvent ce) 	{
265
			public void componentKeyUp(ComponentEvent ce) 	{
268
				
266
				
269
				// on teste si la touche entrée a été pressée
267
				// on teste si la touche entrée a été pressée
270
				if (ce.getKeyCode() == KeyCodes.KEY_ENTER) {
268
				if (ce.getKeyCode() == KeyCodes.KEY_ENTER) {
271
					int nouvellePage = pageCourante;
269
					int nouvellePage = pageCourante;
272
					// on teste avec parseInt si la valeur entrée est un entier
270
					// on teste avec parseInt si la valeur entrée est un entier
273
					try {
271
					try {
274
						nouvellePage = Integer
272
						nouvellePage = Integer
275
								.parseInt(champPage.getRawValue());
273
								.parseInt(champPage.getRawValue());
276
					}
274
					}
277
					// si ce n'est pas le cas alors on remet le numéro de page
275
					// si ce n'est pas le cas alors on remet le numéro de page
278
					// correct
276
					// correct
279
					catch (NumberFormatException nfe) {
277
					catch (NumberFormatException nfe) {
280
						rafraichirNumeroPage();
278
						rafraichirNumeroPage();
281
						champPage.focus();
279
						champPage.focus();
282
						return;
280
						return;
283
					}
281
					}
284
 
282
 
285
					// si la conversion reussit on verifie s'il est nécessaire
283
					// si la conversion reussit on verifie s'il est nécessaire
286
					// de changer de page
284
					// de changer de page
287
					// et si la nouvelle est comprise dans l'intervalle des
285
					// et si la nouvelle est comprise dans l'intervalle des
288
					// pages existantes (0..pageTotale)
286
					// pages existantes (0..pageTotale)
289
					if (nouvellePage != pageCourante + 1 && nouvellePage > 0
287
					if (nouvellePage != pageCourante + 1 && nouvellePage > 0
290
							&& nouvellePage <= pageTotale) {
288
							&& nouvellePage <= pageTotale) {
291
						// le cas échéant, on charge la nouvelle page et on
289
						// le cas échéant, on charge la nouvelle page et on
292
						// notifie le médiateur
290
						// notifie le médiateur
293
						changerPageCourante(nouvellePage - 1);
291
						changerPageCourante(nouvellePage - 1);
294
						listePaginable.changerNumeroPage(pageCourante);
292
						listePaginable.changerNumeroPage(pageCourante);
295
 
293
 
296
					} else {
294
					} else {
297
						// sinon on reaffiche l'ancien numero de page sans rien
295
						// sinon on reaffiche l'ancien numero de page sans rien
298
						// changer
296
						// changer
299
						rafraichirNumeroPage();
297
						rafraichirNumeroPage();
300
						champPage.focus();
298
						champPage.focus();
301
					}
299
					}
302
				}
300
				}
303
			}
301
			}
304
 
302
 
305
		/*	public void onFocus(Field field) {
303
		/*	public void onFocus(Field field) {
306
 
304
 
307
				champPage.focus();
305
				champPage.focus();
308
			}*/
306
			}*/
309
 
307
 
310
		});
308
		});
311
 
309
 
312
		// pour éviter de se compliquer la vie, on filtre tous les charactères
310
		// pour éviter de se compliquer la vie, on filtre tous les charactères
313
		// non numériques
311
		// non numériques
314
		champPage.addKeyListener(new KeyListener()	{
312
		champPage.addKeyListener(new KeyListener()	{
315
 
313
 
316
			public void componentKeyDown(ComponentEvent ce) 	{
314
			public void componentKeyDown(ComponentEvent ce) 	{
317
 
315
 
318
				// si c'est un numerique
316
				// si c'est un numerique
319
				/*
317
				/*
320
				FIXME
318
				FIXME
321
				if (Character.isDigit((char) e.getCharCode())) {
319
				if (Character.isDigit((char) e.getCharCode())) {
322
				
320
				
323
					// on laisse passer
321
					// on laisse passer
324
					return;
322
					return;
325
				}*/
323
				}*/
326
 
324
 
327
				// si c'est la touche entrée ou backspace (valider ou effacer)
325
				// si c'est la touche entrée ou backspace (valider ou effacer)
328
				if (ce.getKeyCode() == KeyCodes.KEY_ENTER
326
				if (ce.getKeyCode() == KeyCodes.KEY_ENTER
329
						|| ce.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
327
						|| ce.getKeyCode() == KeyCodes.KEY_BACKSPACE) {
330
					// on laisse passer
328
					// on laisse passer
331
					return;
329
					return;
332
				} else {
330
				} else {
333
					// sinon on remet le numero de page correct et on annule
331
					// sinon on remet le numero de page correct et on annule
334
					// l'évenement
332
					// l'évenement
335
					rafraichirNumeroPage();
333
					rafraichirNumeroPage();
336
					ce.stopEvent();
334
					ce.stopEvent();
337
				}
335
				}
338
			}
336
			}
339
 
337
 
340
		});
338
		});
341
 
339
 
342
		// listener pour la selection dans la combobox
340
		// listener pour la selection dans la combobox
343
		selecteurTaillePage.addSelectionChangedListener(
341
		selecteurTaillePage.addSelectionChangedListener(
344
				
342
				
345
				new SelectionChangedListener() {
343
				new SelectionChangedListener() {
346
				
344
				
347
					public void selectionChanged(SelectionChangedEvent e)	{
345
					public void selectionChanged(SelectionChangedEvent e)	{
348
	
346
	
349
					SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
347
					SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
350
					int index = comboBox.getSelectedIndex();
348
					int index = comboBox.getSelectedIndex();
351
					String nouvelleTaillePageString = comboBox.getRawValue();
349
					String nouvelleTaillePageString = comboBox.getRawValue();
352
					int nouvelleTaillePage = Integer
350
					int nouvelleTaillePage = Integer
353
							.parseInt(nouvelleTaillePageString);
351
							.parseInt(nouvelleTaillePageString);
354
	
352
	
355
					// si la taille de page est différente de l'ancienne
353
					// si la taille de page est différente de l'ancienne
356
					if (nouvelleTaillePage != taillePage) {
354
					if (nouvelleTaillePage != taillePage) {
357
						// on la change
355
						// on la change
358
						changerTaillePage(nouvelleTaillePage);
356
						changerTaillePage(nouvelleTaillePage);
359
					}
357
					}
360
					// et on met la valeur à jour dans la combobox
358
					// et on met la valeur à jour dans la combobox
361
					//comboBox.setSimpleValue(nouvelleTaillePage);
359
					//comboBox.setSimpleValue(nouvelleTaillePage);
362
					
360
					
363
					
361
					
364
					//listePaginable.changerTaillePage(nouvelleTaillePage);
362
					//listePaginable.changerTaillePage(nouvelleTaillePage);
365
			}
363
			}
366
 
364
 
367
		});
365
		});
368
	}
366
	}
369
 
367
 
370
	/**
368
	/**
371
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
369
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
372
	 * d'éléments à partir des variables de classes
370
	 * d'éléments à partir des variables de classes
373
	 */
371
	 */
374
	public void rafraichirNumeroPage() {
372
	public void rafraichirNumeroPage() {
375
		
373
		
376
		surTotalPage.setText(" sur " + pageTotale);
374
		surTotalPage.setText(" sur " + pageTotale);
377
 
375
 
378
		if (nbElement == 0) {
376
		if (nbElement == 0) {
379
			champPage.setValue("" + (0));
377
			champPage.setValue("" + (0));
380
			// on met simplement à jour l'intervalle qui contient toujours le
378
			// on met simplement à jour l'intervalle qui contient toujours le
381
			// même nombre d'éléments
379
			// même nombre d'éléments
382
			intervalleElements.setText(mediateur.i18nM.elementsAffiches(ucFirst(labelElement), 0,0,0));
380
			intervalleElements.setText(mediateur.i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 0,0,0));
383
		} else {
381
		} else {
384
			champPage.setValue("" + (pageCourante + 1));
382
			champPage.setValue("" + (pageCourante + 1));
385
 
383
 
386
			// si la page n'est pas la dernière
384
			// si la page n'est pas la dernière
387
			if (pageCourante + 1 != pageTotale) {
385
			if (pageCourante + 1 != pageTotale) {
388
				// sauf pour la dernière page qui contient souvent moins
386
				// sauf pour la dernière page qui contient souvent moins
389
				// d'élements que le nombre d'élements par page
387
				// d'élements que le nombre d'élements par page
390
				intervalleElements.setText(mediateur.i18nM.elementsAffiches(ucFirst(labelElement), pageCourante * taillePage, 
388
				intervalleElements.setText(mediateur.i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
391
						(pageCourante + 1) * taillePage, nbElement));
389
						(pageCourante + 1) * taillePage, nbElement));
392
			} else {
390
			} else {
393
				
391
				
394
				// on met simplement à jour l'intervalle qui contient toujours
392
				// on met simplement à jour l'intervalle qui contient toujours
395
				// le même nombre d'éléments
393
				// le même nombre d'éléments
396
				intervalleElements.setText(mediateur.i18nM.elementsAffiches(ucFirst(labelElement), pageCourante * taillePage, 
394
				intervalleElements.setText(mediateur.i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
397
						nbElement, nbElement));
395
						nbElement, nbElement));
398
			}
396
			}
399
		}
397
		}
400
		
398
		
401
		
399
		
402
	}
400
	}
403
 
401
 
404
	/**
402
	/**
405
	 * Met à jour la page en cours
403
	 * Met à jour la page en cours
406
	 * 
404
	 * 
407
	 * @param nouvellePageCourante
405
	 * @param nouvellePageCourante
408
	 *            la nouvelle page en cours
406
	 *            la nouvelle page en cours
409
	 */
407
	 */
410
	public void changerPageCourante(int nouvellePageCourante) {
408
	public void changerPageCourante(int nouvellePageCourante) {
411
		pageCourante = nouvellePageCourante;
409
		pageCourante = nouvellePageCourante;
412
	}
410
	}
413
 
411
 
414
	/*
412
	/*
415
	 * Renvoie les différents intervalles de pages possibles
413
	 * Renvoie les différents intervalles de pages possibles
416
	 * 
414
	 * 
417
	 * @return un tableau de string qui contient les différentes
415
	 * @return un tableau de string qui contient les différentes
418
	 *         taille de pages
416
	 *         taille de pages
419
	 *
417
	 *
420
	public String[] getNbPages() {
418
	public String[] getNbPages() {
421
 
419
 
422
		return pages;
420
		return pages;
423
	}/
421
	}/
424
 
422
 
425
	/**
423
	/**
426
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
424
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
427
	 * va à son tour faire les modifications nécessaires)
425
	 * va à son tour faire les modifications nécessaires)
428
	 * 
426
	 * 
429
	 * @param nouvelleTaillePage
427
	 * @param nouvelleTaillePage
430
	 *            la nouvelle taille de page (élement appartenant au tableau
428
	 *            la nouvelle taille de page (élement appartenant au tableau
431
	 *            renvoyé par getNbPages())
429
	 *            renvoyé par getNbPages())
432
	 */
430
	 */
433
	public void changerTaillePage(int nouvelleTaillePage) {
431
	public void changerTaillePage(int nouvelleTaillePage) {
434
 
432
 
435
		listePaginable.changerTaillePage(nouvelleTaillePage);
433
		listePaginable.changerTaillePage(nouvelleTaillePage);
436
 
434
 
437
	}
435
	}
438
 
436
 
439
	/**
437
	/**
440
	 * Selectionne la valeur correspond à celle passée en paramètre dans la
438
	 * Selectionne la valeur correspond à celle passée en paramètre dans la
441
	 * combobox (si elle existe)
439
	 * combobox (si elle existe)
442
	 * 
440
	 * 
443
	 * @param nouvelleTaillePage
441
	 * @param nouvelleTaillePage
444
	 *            la nouvelle taille de page
442
	 *            la nouvelle taille de page
445
	 */
443
	 */
446
	public void selectionnerTaillePage(int nouvelleTaillePage) {
444
	public void selectionnerTaillePage(int nouvelleTaillePage) {
447
 
445
 
448
		selecteurTaillePage.setRawValue("" + nouvelleTaillePage);
446
		selecteurTaillePage.setRawValue("" + nouvelleTaillePage);
449
	}
447
	}
450
 
448
 
451
	@Override
449
	@Override
452
	public void rafraichir(Object nouvelleDonnees) {
450
	public void rafraichir(Object nouvelleDonnees) {
453
		// si on reçoit un tableau de int
451
		// si on reçoit un tableau de int
454
		if (nouvelleDonnees instanceof int[]) {
452
		if (nouvelleDonnees instanceof int[]) {
455
 
453
 
456
			int[] page = (int[]) nouvelleDonnees;
454
			int[] page = (int[]) nouvelleDonnees;
457
			// le premier élement est le nombre de pages totales
455
			// le premier élement est le nombre de pages totales
458
			pageTotale = page[0];
456
			pageTotale = page[0];
459
			// le second la page en cours
457
			// le second la page en cours
460
			pageCourante = page[1];
458
			pageCourante = page[1];
461
			// le troisième la taille de la page
459
			// le troisième la taille de la page
462
			taillePage = page[2];
460
			taillePage = page[2];
463
			// et le dernier le nombre total d'éléments
461
			// et le dernier le nombre total d'éléments
464
			nbElement = page[3];
462
			nbElement = page[3];
465
			
463
			
466
			// si la page courante dépasse la page totale (cas normalement
464
			// si la page courante dépasse la page totale (cas normalement
467
			// improbable car géré en amont)
465
			// improbable car géré en amont)
468
			// on met le numéro de page à la page courante -1 (car la page
466
			// on met le numéro de page à la page courante -1 (car la page
469
			// courante est comptée à partir
467
			// courante est comptée à partir
470
			// de zéro)
468
			// de zéro)
471
			if (pageCourante >= pageTotale && pageCourante != 0) {
469
			if (pageCourante >= pageTotale && pageCourante != 0) {
472
				System.out.println("oui oui");
470
				System.out.println("oui oui");
473
				pageCourante = pageTotale - 1;
471
				pageCourante = pageTotale - 1;
474
				// le cas échéant on en notifie le médiateur
472
				// le cas échéant on en notifie le médiateur
475
				listePaginable.changerNumeroPage(pageCourante);
473
				listePaginable.changerNumeroPage(pageCourante);
476
			}
474
			}
477
		}
475
		}
478
 
476
 
479
		// enfin on rafraichit les informations affichées à partir des nouvelles
477
		// enfin on rafraichit les informations affichées à partir des nouvelles
480
		// variables de classes mises à jour
478
		// variables de classes mises à jour
481
		rafraichirNumeroPage();
479
		rafraichirNumeroPage();
482
		
480
		
483
		layout();
481
		layout();
484
	}
482
	}
485
 
483
 
486
}
484
}