Subversion Repositories eFlore/Applications.coel

Rev

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

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