Subversion Repositories eFlore/Applications.coel

Rev

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

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