Subversion Repositories eFlore/Applications.coel

Rev

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

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