Subversion Repositories eFlore/Applications.coel

Rev

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

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