Subversion Repositories eFlore/Applications.coel

Rev

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

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