Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 1683 Rev 1687
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
import java.util.List;
6
import java.util.List;
7
 
7
 
8
import org.tela_botanica.client.Mediateur;
8
import org.tela_botanica.client.Mediateur;
9
import org.tela_botanica.client.i18n.Constantes;
9
import org.tela_botanica.client.i18n.Constantes;
10
import org.tela_botanica.client.i18n.ErrorMessages;
10
import org.tela_botanica.client.i18n.ErrorMessages;
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;
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;
20
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
21
import com.extjs.gxt.ui.client.event.SelectionChangedEvent;
21
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
22
import com.extjs.gxt.ui.client.event.SelectionChangedListener;
22
import com.extjs.gxt.ui.client.event.SelectionListener;
23
import com.extjs.gxt.ui.client.event.SelectionListener;
23
import com.extjs.gxt.ui.client.store.ListStore;
24
import com.extjs.gxt.ui.client.store.ListStore;
24
import com.extjs.gxt.ui.client.store.StoreEvent;
25
import com.extjs.gxt.ui.client.store.StoreEvent;
25
import com.extjs.gxt.ui.client.store.StoreListener;
26
import com.extjs.gxt.ui.client.store.StoreListener;
26
import com.extjs.gxt.ui.client.widget.Text;
27
import com.extjs.gxt.ui.client.widget.Text;
27
import com.extjs.gxt.ui.client.widget.button.Button;
28
import com.extjs.gxt.ui.client.widget.button.Button;
28
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
29
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
29
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
30
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
30
import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
31
import com.extjs.gxt.ui.client.widget.form.SimpleComboValue;
31
import com.extjs.gxt.ui.client.widget.form.NumberField;
32
import com.extjs.gxt.ui.client.widget.form.NumberField;
32
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
33
import com.extjs.gxt.ui.client.widget.toolbar.FillToolItem;
33
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
34
import com.extjs.gxt.ui.client.widget.toolbar.SeparatorToolItem;
34
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
35
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
35
import com.google.gwt.event.dom.client.KeyCodes;
36
import com.google.gwt.event.dom.client.KeyCodes;
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;
38
 
39
 
39
public class BarrePaginationVue extends ToolBar implements Rafraichissable {
40
public class BarrePaginationVue extends ToolBar implements Rafraichissable {
40
 
41
 
41
		private Mediateur mediateur = null;
42
	private Mediateur mediateur = null;
42
		private Constantes i18nC = null;
43
	private Constantes i18nC = null;
43
		private ErrorMessages i18nM = null;
44
	private ErrorMessages i18nM = null;
44
		public int valeur = 0;
45
	public int valeur = 0;
45
	
46
	
46
		private ListePaginable listePaginable = null;
47
	private ListePaginable listePaginable = null;
47
		private Button prevPage, suivPage, premierePage, dernierePage, rafraichir;
48
	private Button prevPage, suivPage, premierePage, dernierePage, rafraichir;
48
	
49
	
49
		private int pageCourante, nbElement = 0;
50
	private int pageCourante, nbElement = 0;
50
		private int taillePage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
51
	private int taillePage = Integer.valueOf(((Dictionary) Dictionary.getDictionary("configuration")).get("nbElementsPage"));
51
		private int pageTotale = 1;
52
	private int pageTotale = 1;
52
		private Text page, surTotalPage, afficherNbElem, nbElemParPage, intervalleElements;
53
	private Text page, surTotalPage, afficherNbElem, nbElemParPage, intervalleElements;
53
	
54
	
54
		private NumberField champPage = new NumberField();
55
	private NumberField champPage = new NumberField();
55
		private SimpleComboBox<Integer> selecteurTaillePage = new SimpleComboBox<Integer>();
56
	private SimpleComboBox<Integer> selecteurTaillePage = new SimpleComboBox<Integer>();
56
	
57
	
57
		private LinkedList<Integer> intervallePages = new LinkedList<Integer>();
58
	private LinkedList<Integer> intervallePages = new LinkedList<Integer>();
58
		private ListStore storeIntervalle = new ListStore() ;
59
	private ListStore storeIntervalle = new ListStore() ;
59
		
60
		
60
		private String labelElement;
61
	private String labelElement;
61
		private int taillePageDefaut = 50;
62
	private int taillePageDefaut = 50;
-
 
63
 
-
 
64
	private ChampFiltreRecherche champFiltreRecherche = null;
62
	
65
 
63
		public ListePaginable getlistePaginable() {
66
	public ListePaginable getlistePaginable() {
64
				return listePaginable;
67
		return listePaginable;
65
		}
68
	}
66
	
69
	
67
		public void setlistePaginable(ListePaginable listePaginable) {
70
	public void setlistePaginable(ListePaginable listePaginable) {
68
				this.listePaginable = listePaginable;
71
		this.listePaginable = listePaginable;
69
		}
72
	}
70
	
73
	
71
		/***************************************************************************
74
	/***************************************************************************
72
		 * constructeur sans argument (privé car ne doit pas être utilisé)
75
	 * constructeur sans argument (privé car ne doit pas être utilisé)
73
		 */
76
	 */
74
		@SuppressWarnings("unused")
77
	@SuppressWarnings("unused")
75
		private BarrePaginationVue() {
78
	private BarrePaginationVue() {
76
				super();
79
		super();
77
		}
80
	}
78
 
81
 
79
		/**
82
	/**
80
		 * constructeur avec paramètres
83
	 * constructeur avec paramètres
81
		 * 
84
	 * 
82
		 * @param im
85
	 * @param im
83
		 *            le médiateur à associer à la barre
86
	 *            le médiateur à associer à la barre
84
		 */
87
	 */
85
		public BarrePaginationVue(ListePaginable listePaginableCourante, Mediateur mediateurCourant) {
88
	public BarrePaginationVue(ListePaginable listePaginableCourante, Mediateur mediateurCourant) {
86
				super();
89
		super();
87
		
90
		
88
				listePaginable = listePaginableCourante;		
91
		listePaginable = listePaginableCourante;		
89
				mediateur = mediateurCourant;
92
		mediateur = mediateurCourant;
90
				i18nC = Mediateur.i18nC;
93
		i18nC = Mediateur.i18nC;
91
				i18nM = Mediateur.i18nM;
94
		i18nM = Mediateur.i18nM;
92
		
95
		
93
				intervallePages.add(10);
96
		intervallePages.add(10);
94
				intervallePages.add(20);
97
		intervallePages.add(20);
95
				intervallePages.add(50);
98
		intervallePages.add(50);
96
				intervallePages.add(100);
99
		intervallePages.add(100);
97
				intervallePages.add(200);
100
		intervallePages.add(200);
98
		
101
		
99
				premierePage = new Button();
102
		premierePage = new Button();
100
				premierePage.setIcon(Images.ICONES.resultsetFirst());
103
		premierePage.setIcon(Images.ICONES.resultsetFirst());
101
				add(premierePage);
104
		add(premierePage);
102
		
105
		
103
				prevPage = new Button();
106
		prevPage = new Button();
104
				prevPage.setIcon(Images.ICONES.resultsetPrevious());
107
		prevPage.setIcon(Images.ICONES.resultsetPrevious());
105
				add(prevPage);
108
		add(prevPage);
106
		
109
		
107
				add(new SeparatorToolItem());		
110
		add(new SeparatorToolItem());		
108
		
111
		
109
				page = new Text(i18nC.page());
112
		page = new Text(i18nC.page());
110
				page.setStyleAttribute("padding", "0 5px 0 5px");
113
		page.setStyleAttribute("padding", "0 5px 0 5px");
111
				add(page);
114
		add(page);
112
		
115
		
113
				champPage.setValue(pageCourante+1);
116
		champPage.setValue(pageCourante+1);
114
				champPage.setAllowDecimals(false);
117
		champPage.setAllowDecimals(false);
115
				champPage.setAllowNegative(false);
118
		champPage.setAllowNegative(false);
116
				champPage.setStyleAttribute("text-align","right");
119
		champPage.setStyleAttribute("text-align","right");
117
				champPage.setWidth(30);
120
		champPage.setWidth(30);
118
				add(champPage);
121
		add(champPage);
119
		
122
		
120
				surTotalPage = new Text(i18nC.sur() + " " + pageTotale);
123
		surTotalPage = new Text(i18nC.sur() + " " + pageTotale);
121
				surTotalPage.setStyleAttribute("padding-left", "5px");
124
		surTotalPage.setStyleAttribute("padding-left", "5px");
122
				add(surTotalPage);
125
		add(surTotalPage);
123
		
126
		
124
				//Séparation
127
		//Séparation
125
				add(new SeparatorToolItem());
128
		add(new SeparatorToolItem());
126
		
129
		
127
				suivPage = new Button();
130
		suivPage = new Button();
128
				suivPage.setIcon(Images.ICONES.resultsetNext());
131
		suivPage.setIcon(Images.ICONES.resultsetNext());
129
				add(suivPage);
132
		add(suivPage);
130
		
133
		
131
				dernierePage = new Button();
134
		dernierePage = new Button();
132
				dernierePage.setIcon(Images.ICONES.resultsetLast());
135
		dernierePage.setIcon(Images.ICONES.resultsetLast());
133
				add(dernierePage);
136
		add(dernierePage);
134
 
137
 
135
				//Séparation
138
		//Séparation
136
				add(new SeparatorToolItem());
139
		add(new SeparatorToolItem());
137
		
140
		
138
				rafraichir = new Button();
141
		rafraichir = new Button();
139
				rafraichir.setIcon(Images.ICONES.rafraichir());
142
		rafraichir.setIcon(Images.ICONES.rafraichir());
140
				add(rafraichir);
143
		add(rafraichir);
141
		
144
		
142
				//Séparation
145
		//Séparation
143
				add(new SeparatorToolItem());
146
		add(new SeparatorToolItem());
144
		
147
		
145
				afficherNbElem = new Text(i18nC.afficher());
148
		afficherNbElem = new Text(i18nC.afficher());
146
				afficherNbElem.setStyleAttribute("padding", "0 5px 0 5px");
149
		afficherNbElem.setStyleAttribute("padding", "0 5px 0 5px");
147
				add(afficherNbElem);
150
		add(afficherNbElem);
148
 
151
 
149
				// Attention l'appel à setTriggerAction avec ALL est indispensable
152
		// Attention l'appel à setTriggerAction avec ALL est indispensable
150
				// pour éviter un bug lors de la selection de la taille de page par défaut
153
		// pour éviter un bug lors de la selection de la taille de page par défaut
151
				selecteurTaillePage.setTriggerAction(TriggerAction.ALL);
154
		selecteurTaillePage.setTriggerAction(TriggerAction.ALL);
152
				selecteurTaillePage.setLazyRender(false);
155
		selecteurTaillePage.setLazyRender(false);
153
				selecteurTaillePage.setWidth("40px");
156
		selecteurTaillePage.setWidth("40px");
154
				setIntervallesPages();
157
		setIntervallesPages();
155
				add(selecteurTaillePage);
158
		add(selecteurTaillePage);
156
		
159
		
157
				labelElement = i18nC.elements();
160
		labelElement = i18nC.elements();
158
		
161
		
159
				nbElemParPage = new Text(labelElement+" "+i18nC.parPage());
162
		nbElemParPage = new Text(labelElement+" "+i18nC.parPage());
160
				nbElemParPage.setStyleAttribute("padding-left", "5px");
163
		nbElemParPage.setStyleAttribute("padding-left", "5px");
161
				add(nbElemParPage);
164
		add(nbElemParPage);
162
		
165
		
163
				//Séparation
166
		//Séparation
164
				add(new SeparatorToolItem());
167
		add(new SeparatorToolItem());
165
				
168
				
166
				intervalleElements = new Text(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
169
		intervalleElements = new Text(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
167
																	 pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
170
								     pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
168
				add(intervalleElements);
171
		add(intervalleElements);
169
		
172
		
170
				// on ajoute les différents listeners
173
		// on ajoute les différents listeners
171
				ajouterListeners();	
174
		ajouterListeners();	
172
		}
175
	}
-
 
176
 
-
 
177
	public BarrePaginationVue(ListePaginable listePaginableCourante, Mediateur mediateurCourant, ChampFiltreRecherche champFiltreRechercheCourant) {
-
 
178
		this(listePaginableCourante, mediateurCourant);
-
 
179
		champFiltreRecherche = champFiltreRechercheCourant;
-
 
180
	}
173
	
181
	
174
		/**
182
	/**
175
		 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
183
	 *  Texte nommant les elements pagines (Images, Observation, truc, machin etc...).
176
		 * 	@param label
184
	 * 	@param label
177
		 */
185
	 */
178
		public void setLabelElement(String label) {
186
	public void setLabelElement(String label) {
179
				this.labelElement = label;
187
		this.labelElement = label;
180
				nbElemParPage.setText(labelElement + " par page ");
188
		nbElemParPage.setText(labelElement + " par page ");
181
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
189
		intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 
182
																  pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
190
								  pageCourante * taillePage, (pageCourante + 1) * taillePage, nbElement));
183
		}
191
	}
184
 
192
 
185
		public void setTaillePageParDefaut(int taille) {
193
	public void setTaillePageParDefaut(int taille) {
186
				this.taillePageDefaut = taille;
194
		this.taillePageDefaut = taille;
187
				selecteurTaillePage.setRawValue(""+taillePageDefaut);
195
		selecteurTaillePage.setRawValue(""+taillePageDefaut);
188
		}
196
	}
189
	
197
	
190
		public void setIntervallesPages() {
198
	public void setIntervallesPages() {
191
				if (!intervallePages.contains(taillePage))	{
199
		if (!intervallePages.contains(taillePage))	{
192
						intervallePages.add(taillePage);
200
			intervallePages.add(taillePage);
193
				}
201
		}
194
		
202
		
195
				Iterator<Integer> itIntervallePages = intervallePages.iterator();
203
		Iterator<Integer> itIntervallePages = intervallePages.iterator();
196
				while (itIntervallePages.hasNext())	{
204
		while (itIntervallePages.hasNext())	{
197
						Integer intervalle = itIntervallePages.next();
205
			Integer intervalle = itIntervallePages.next();
198
						selecteurTaillePage.add(intervalle);
206
			selecteurTaillePage.add(intervalle);
199
				}
207
		}
200
 
208
 
201
				selecteurTaillePage.setSimpleValue(taillePage);
209
		selecteurTaillePage.setSimpleValue(taillePage);
202
		}
210
	}
203
	
211
	
204
		/**
212
	/**
205
		 * Change l'état de la barre de pagination a actif ou inactif
213
	 * Change l'état de la barre de pagination a actif ou inactif
206
		 * @param etat actif ou inactif
214
	 * @param etat actif ou inactif
207
		 */
215
	 */
208
		private void changerEtatBarre(boolean etat) {
216
	private void changerEtatBarre(boolean etat) {
209
				premierePage.setEnabled(etat);
217
		premierePage.setEnabled(etat);
210
				prevPage.setEnabled(etat);
218
		prevPage.setEnabled(etat);
211
				suivPage.setEnabled(etat);
219
		suivPage.setEnabled(etat);
212
				dernierePage.setEnabled(etat);
220
		dernierePage.setEnabled(etat);
213
				champPage.setEnabled(etat);
221
		champPage.setEnabled(etat);
214
				selecteurTaillePage.setEnabled(etat);
222
		selecteurTaillePage.setEnabled(etat);
215
				page.setEnabled(etat);
223
		page.setEnabled(etat);
216
				surTotalPage.setEnabled(etat);
224
		surTotalPage.setEnabled(etat);
217
				afficherNbElem.setEnabled(etat);
225
		afficherNbElem.setEnabled(etat);
218
				nbElemParPage.setEnabled(etat);
226
		nbElemParPage.setEnabled(etat);
219
		}
227
	}
220
	
228
	
221
		/**
229
	/**
222
		 * ajoute les différents listeners nécessaires au bon fonctionnement des
230
	 * ajoute les différents listeners nécessaires au bon fonctionnement des
223
		 * éléments de la barre de pagination
231
	 * éléments de la barre de pagination
224
		 */
232
	 */
225
		@SuppressWarnings("unchecked")
233
	@SuppressWarnings("unchecked")
226
		private void ajouterListeners() {
234
	private void ajouterListeners() {
227
				premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
235
		premierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
228
								public void componentSelected(ButtonEvent ce)	{
236
				public void componentSelected(ButtonEvent ce)	{
229
										pageCourante = 0;
237
					pageCourante = 0;
230
										rafraichirNumeroPage();
238
					rafraichirNumeroPage();
231
										listePaginable.changerNumeroPage(pageCourante);
239
					changePage();
232
								}
240
				}
233
						});
241
			});
234
		
242
		
235
				// boutons suivants et précédents
243
		// boutons suivants et précédents
236
				prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
244
		prevPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
237
								public void componentSelected(ButtonEvent ce) {
245
				public void componentSelected(ButtonEvent ce) {
238
										// si la page courante n'est pas la première
246
					// si la page courante n'est pas la première
239
										if (pageCourante > 0) {
247
					if (pageCourante > 0) {
240
												// on décrémente la page courante de 1
248
						// on décrémente la page courante de 1
241
												pageCourante--;
249
						pageCourante--;
242
												// on rafraichit l'affichage
250
						// on rafraichit l'affichage
243
												rafraichirNumeroPage();
251
						rafraichirNumeroPage();
244
												// et on notifie le médiateur de l'évenement
-
 
245
												listePaginable.changerNumeroPage(pageCourante);
252
						changePage();
246
 
-
 
247
										}
253
					}
248
								}
254
				}
249
						});
255
			});
250
 
256
 
251
				suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
257
		suivPage.addSelectionListener(new SelectionListener<ButtonEvent>() {
252
								public void componentSelected(ButtonEvent ce)	{
258
				public void componentSelected(ButtonEvent ce)	{
253
										// si la page courante n'est pas la dernière
259
					// si la page courante n'est pas la dernière
254
										if (pageCourante < pageTotale - 1) {
260
					if (pageCourante < pageTotale - 1) {
255
												// on incrémente la page courante de 1
261
						// on incrémente la page courante de 1
256
												pageCourante++;
262
						pageCourante++;
257
												// on rafraichit l'affichage
263
						// on rafraichit l'affichage
258
												rafraichirNumeroPage();
264
						rafraichirNumeroPage();
259
												// et on notifie le médiateur de l'évenement
-
 
260
												listePaginable.changerNumeroPage(pageCourante);
265
						changePage();
261
										}
266
					}
262
								}
267
				}
263
						});
268
			});
264
		
269
		
265
				dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
270
		dernierePage.addSelectionListener(new SelectionListener<ButtonEvent>() {
266
								public void componentSelected(ButtonEvent ce)	{
271
				public void componentSelected(ButtonEvent ce)	{
267
										pageCourante = pageTotale;
272
					pageCourante = pageTotale;
268
										rafraichirNumeroPage();
273
					rafraichirNumeroPage();
269
										listePaginable.changerNumeroPage(pageCourante);
274
					changePage();
270
								}
275
				}
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
290
						// on verifie s'il est nécessaire de changer de page
286
												// et si la nouvelle est comprise dans l'intervalle des
291
						// et si la nouvelle est comprise dans l'intervalle des
287
												// pages existantes (0..pageTotale)
292
						// pages existantes (0..pageTotale)
288
												if (nouvellePage != pageCourante + 1 && nouvellePage > 0
293
						if (nouvellePage != pageCourante + 1 && nouvellePage > 0
289
													&& nouvellePage <= pageTotale) {
294
						    && nouvellePage <= pageTotale) {
290
														// le cas échéant, on charge la nouvelle page et on
295
							// le cas échéant, on charge la nouvelle page et on
291
														// notifie le médiateur
296
							// notifie le médiateur
292
														changerPageCourante(nouvellePage - 1);
297
							changerPageCourante(nouvellePage - 1);
293
														listePaginable.changerNumeroPage(pageCourante);
298
							changePage();
294
												} else {
299
						} else {
295
														// sinon on reaffiche l'ancien numero de page sans rien changer
300
							// sinon on reaffiche l'ancien numero de page sans rien changer
296
														rafraichirNumeroPage();
301
							rafraichirNumeroPage();
297
														champPage.focus();
302
							champPage.focus();
298
												}
303
						}
299
										}
304
					}
300
								}
305
				}
301
						});
306
			});
302
 
307
 
303
				// listener pour la selection dans la combobox
308
		// listener pour la selection dans la combobox
304
				selecteurTaillePage.addSelectionChangedListener(new SelectionChangedListener() {
309
		selecteurTaillePage.addSelectionChangedListener(new SelectionChangedListener() {
305
								public void selectionChanged(SelectionChangedEvent e) {
310
				public void selectionChanged(SelectionChangedEvent e) {
306
										SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
311
					SimpleComboBox comboBox = (SimpleComboBox) e.getSource();
307
										String nouvelleTaillePageString = comboBox.getRawValue();
312
					String nouvelleTaillePageString = comboBox.getRawValue();
308
										int nouvelleTaillePage = Integer.parseInt(nouvelleTaillePageString);
313
					int nouvelleTaillePage = Integer.parseInt(nouvelleTaillePageString);
309
										changerTaillePage(nouvelleTaillePage);
314
					changerTaillePage(nouvelleTaillePage);
310
										rafraichirNumeroPage();			
315
					rafraichirNumeroPage();			
311
								}
316
				}
312
						});
317
			});
313
		}
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
 
314
	
334
	
315
		/**
335
	/**
316
		 * Met à jour les affichage sur les numéros de pages et d'intervalle
336
	 * Met à jour les affichage sur les numéros de pages et d'intervalle
317
		 * d'éléments à partir des variables de classes
337
	 * d'éléments à partir des variables de classes
318
		 */
338
	 */
319
		public void rafraichirNumeroPage() {
339
	public void rafraichirNumeroPage() {
320
				surTotalPage.setText(" sur " + pageTotale);
340
		surTotalPage.setText(" sur " + pageTotale);
321
				if (nbElement == 0) {
341
		if (nbElement == 0) {
322
						champPage.setValue(0);
342
			champPage.setValue(0);
323
						// on met simplement à jour l'intervalle qui contient toujours le
343
			// on met simplement à jour l'intervalle qui contient toujours le
324
						// même nombre d'éléments
344
			// même nombre d'éléments
325
						intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 0,0,0));
345
			intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), 0,0,0));
326
				} else {
346
		} else {
327
						champPage.setValue(pageCourante + 1);
347
			champPage.setValue(pageCourante + 1);
328
						// si la page n'est pas la dernière
348
			// si la page n'est pas la dernière
329
						if (pageCourante + 1 != pageTotale) {
349
			if (pageCourante + 1 != pageTotale) {
330
								// sauf pour la dernière page qui contient souvent moins
350
				// sauf pour la dernière page qui contient souvent moins
331
								// d'élements que le nombre d'élements par page
351
				// d'élements que le nombre d'élements par page
332
								intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
352
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
333
																				  (pageCourante + 1) * taillePage, nbElement));
353
										  (pageCourante + 1) * taillePage, nbElement));
334
						} else {
354
			} else {
335
				
355
				
336
								// on met simplement à jour l'intervalle qui contient toujours
356
				// on met simplement à jour l'intervalle qui contient toujours
337
								// le même nombre d'éléments
357
				// le même nombre d'éléments
338
								intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
358
				intervalleElements.setText(i18nM.elementsAffiches(UtilString.ucFirst(labelElement), pageCourante * taillePage, 
339
																				  nbElement, nbElement));
359
										  nbElement, nbElement));
340
						}
360
			}
341
				}
361
		}
342
		}
362
	}
343
 
363
 
344
		/**
364
	/**
345
		 * Met à jour la page en cours
365
	 * Met à jour la page en cours
346
		 * 
366
	 * 
347
		 * @param nouvellePageCourante
367
	 * @param nouvellePageCourante
348
		 *            la nouvelle page en cours
368
	 *            la nouvelle page en cours
349
		 */
369
	 */
350
		public void changerPageCourante(int nouvellePageCourante) {
370
	public void changerPageCourante(int nouvellePageCourante) {
351
				pageCourante = nouvellePageCourante;
371
		pageCourante = nouvellePageCourante;
352
		}
372
	}
353
 
373
 
354
		/**
374
	/**
355
		 * Envoie au médiateur une demande pour modifier la taille de la page (qui
375
	 * Envoie au médiateur une demande pour modifier la taille de la page (qui
356
		 * va à son tour faire les modifications nécessaires)
376
	 * va à son tour faire les modifications nécessaires)
357
		 * 
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
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
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;
399
								// le cas échéant on en notifie le médiateur
419
				// le cas échéant on en notifie le médiateur
400
								listePaginable.changerNumeroPage(pageCourante);
420
				changePage();
401
						}
421
			}
402
				}
422
		}
403
 
423
 
404
				// enfin on rafraichit les informations affichées à partir des nouvelles
424
		// enfin on rafraichit les informations affichées à partir des nouvelles
405
				// variables de classes mises à jour
425
		// variables de classes mises à jour
406
				rafraichirNumeroPage();
426
		rafraichirNumeroPage();
407
		
427
		
408
				layout();
428
		layout();
409
		}
429
	}
410
}
430
}