Subversion Repositories eFlore/Applications.del

Rev

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

Rev 281 Rev 335
1
package org.tela_botanica.del.client.composants.pagination;
1
package org.tela_botanica.del.client.composants.pagination;
2
 
-
 
3
import java.util.Iterator;
-
 
4
import java.util.Vector;
-
 
5
 
2
 
6
import com.google.gwt.event.dom.client.ChangeEvent;
3
import com.google.gwt.event.dom.client.ChangeEvent;
7
import com.google.gwt.event.dom.client.ChangeHandler;
4
import com.google.gwt.event.dom.client.ChangeHandler;
8
import com.google.gwt.event.dom.client.ClickEvent;
5
import com.google.gwt.event.dom.client.ClickEvent;
9
import com.google.gwt.event.dom.client.ClickHandler;
6
import com.google.gwt.event.dom.client.ClickHandler;
10
import com.google.gwt.user.client.Window;
-
 
11
import com.google.gwt.user.client.ui.Button;
7
import com.google.gwt.user.client.ui.Button;
12
import com.google.gwt.user.client.ui.HasWidgets;
8
import com.google.gwt.user.client.ui.HasWidgets;
13
import com.google.gwt.user.client.ui.HorizontalPanel;
9
import com.google.gwt.user.client.ui.HorizontalPanel;
14
import com.google.gwt.user.client.ui.ListBox;
10
import com.google.gwt.user.client.ui.ListBox;
15
 
11
 
16
/**
12
/**
17
 * @author gregoire
13
 * @author gregoire
18
 * Pagination GENERIQUE qui permet d'afficher un nombre donné d'éléments (pas)
14
 * Pagination GENERIQUE qui permet d'afficher un nombre donné d'éléments (pas)
19
 * La méthode changerPage est abstraite et doit être définie lors de l'instanciation 
15
 * La méthode changerPage est abstraite et doit être définie lors de l'instanciation 
20
 * de la classe pagination pour permettre d'afficher la suite des éléments
16
 * de la classe pagination pour permettre d'afficher la suite des éléments
21
 * La méthode actualiserPasCache est abstraite car le pas est différent en 
17
 * La méthode actualiserPasCache est abstraite car le pas est différent en 
22
 * fonction de la page où l'on se trouve
18
 * fonction de la page où l'on se trouve
23
 * */
19
 * */
24
public abstract class PaginationPresenteur {
20
public abstract class PaginationPresenteur {
25
 
21
 
26
	private final PaginationVue vue;
22
	private final PaginationVue vue;
27
	private int nbPage;
23
	private int nbPage;
28
	private int pageCourante = 1;
24
	private int pageCourante = 1;
29
	private int nbElementsTotal = 0;
25
	private int nbElementsTotal = 0;
30
	private int pas = 10;
26
	private int pas = 10;
31
	
27
	
32
	/**
28
	/**
33
	 * Constructeur de l'application
29
	 * Constructeur de l'application
34
	 * @param nbElementsTotal : le nombre total des éléments à paginer
30
	 * @param nbElementsTotal : le nombre total des éléments à paginer
35
	 * @param pas : le nombre d'éléments à afficher par page
31
	 * @param pas : le nombre d'éléments à afficher par page
36
	 * */
32
	 * */
37
	public PaginationPresenteur(int nbElementsTotal, int pas) {
33
	public PaginationPresenteur(int nbElementsTotal, int pas) {
38
		this.nbElementsTotal = nbElementsTotal;
34
		this.nbElementsTotal = nbElementsTotal;
39
		changerPas(pas);
35
		this.pas=pas;
40
		vue = new PaginationVue();
36
		vue = new PaginationVue();
41
	}
37
	}
42
	
38
	
43
	/** Met à jour le nombre de page en fonction du pas */
39
	/** Met à jour le nombre de page en fonction du pas */
44
	private void actualiserNbPage() {
40
	private void actualiserNbPage() {
45
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
41
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
46
		this.nbPage = nombrePages.intValue();
42
		this.nbPage = nombrePages.intValue();
47
	}
43
	}
48
 
44
 
49
	/** Changer le pas de la pagination 
45
	/** Changer le pas de la pagination 
50
	 *  @param pas : le nombre d'éléments à afficher par page */
46
	 *  @param pas : le nombre d'éléments à afficher par page */
51
	public void changerPas(int pas) {
47
	public void changerPas(int pas) {
52
		actualiserNbPage();
48
		actualiserNbPage();
53
		changerPage(pas * pageCourante, pas * (pageCourante + 1));
49
		changerPage(pas * pageCourante, pas * (pageCourante + 1));
54
		actualiserPasCache(pas);
50
		actualiserPasCache(pas);
55
	}
51
	}
56
	
52
	
57
	/** Methode Go du modèle MVP 
53
	/** Methode Go du modèle MVP 
58
	 * @param container : la vue ou éxécuter l'affichage */
54
	 * @param container : la vue ou éxécuter l'affichage */
59
	public void go(HasWidgets container) {
55
	public void go(HasWidgets container) {
60
		actualiserLiens();
56
		actualiserLiens();
61
		container.add(vue);
57
		container.add(vue);
62
	}
58
	}
63
	
59
	
64
	/** Actualiser les liens pour n'afficher 5 avant et 5 après
60
	/** Actualiser les liens pour n'afficher 5 avant et 5 après
65
	 * */
61
	 * */
66
	public void actualiserLiens() {
62
	public void actualiserLiens() {
67
		HorizontalPanel zoneLiens = vue.zoneLiens;
63
		HorizontalPanel zoneLiens = vue.zoneLiens;
68
		zoneLiens.clear();
64
		zoneLiens.clear();
69
		
65
		
70
		
66
		
71
		int pageDebut = pagesAvant();
67
		int pageDebut = pagesAvant();
72
		int pageFin = pagesApres();
68
		int pageFin = pagesApres();
73
		
69
		
74
		for (int i = pageDebut; i < pageFin; i++) {
70
		for (int i = pageDebut; i < pageFin; i++) {
75
			Button bouton = new Button(String.valueOf(i));
71
			Button bouton = new Button(String.valueOf(i));
76
			zoneLiens.add(bouton);
72
			zoneLiens.add(bouton);
77
		}
73
		}
78
		setBoutonActif();
74
		setBoutonActif();
79
		gererEvenements();
75
		gererEvenements();
80
	}
76
	}
81
	
77
	
82
	private int pagesAvant() {
78
	private int pagesAvant() {
83
		int pageDebut = pageCourante - 5;
79
		int pageDebut = pageCourante - 5;
84
		vue.afficherBoutonDebut();
80
		vue.afficherBoutonDebut();
85
		if (pageDebut < 1) {
81
		if (pageDebut < 1) {
86
			pageDebut = 1;
82
			pageDebut = 1;
87
			//Masquer le bouton de début
83
			//Masquer le bouton de début
88
			vue.masquerBoutonDebut();
84
			vue.masquerBoutonDebut();
89
		}
85
		}
90
		return pageDebut;
86
		return pageDebut;
91
	}
87
	}
92
	
88
	
93
	private int pagesApres() {
89
	private int pagesApres() {
94
		int pageFin = pageCourante + 5;
90
		int pageFin = pageCourante + 5;
95
		vue.afficherBoutonSuivant();
91
		vue.afficherBoutonSuivant();
96
		if (pageFin > nbPage) {
92
		if (pageFin > nbPage) {
97
			pageFin = nbPage;
93
			pageFin = nbPage;
98
			vue.masquerBoutonSuivant();
94
			vue.masquerBoutonSuivant();
99
		}
95
		}
100
		return pageFin;
96
		return pageFin;
101
	}
97
	}
102
	
98
	
103
	private void setBoutonActif() {
99
	private void setBoutonActif() {
104
		int nbLiens = vue.zoneLiens.getWidgetCount();
100
		int nbLiens = vue.zoneLiens.getWidgetCount();
105
		for (int i=0; i < nbLiens; i++) {
101
		for (int i=0; i < nbLiens; i++) {
106
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
102
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
107
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
103
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
108
				boutonCourant.setStyleName("actif");
104
				boutonCourant.setStyleName("actif");
109
			} else {
105
			} else {
110
				boutonCourant.setStyleName("inactif");
106
				boutonCourant.setStyleName("inactif");
111
			}
107
			}
112
		}
108
		}
113
	}
109
	}
114
 
110
 
115
	/** Gérer les évènements sur les boutons
111
	/** Gérer les évènements sur les boutons
116
	 * */
112
	 * */
117
	public void gererEvenements() {
113
	public void gererEvenements() {
118
		vue.selecteurPas.addChangeHandler(new ChangeHandler() {
114
		vue.selecteurPas.addChangeHandler(new ChangeHandler() {
119
			@Override
115
			@Override
120
			public void onChange(ChangeEvent event) {
116
			public void onChange(ChangeEvent event) {
121
				ListBox nbElements = (ListBox) event.getSource();
117
				ListBox nbElements = (ListBox) event.getSource();
122
				int index = nbElements.getSelectedIndex();
118
				int index = nbElements.getSelectedIndex();
123
				changerPas(Integer.parseInt(nbElements.getValue(index)));
119
				changerPas(Integer.parseInt(nbElements.getValue(index)));
124
			}
120
			}
125
 
121
 
126
		});
122
		});
127
		
123
		
128
		vue.boutonPrecedent.addClickHandler(new ClickHandler() {
124
		vue.boutonPrecedent.addClickHandler(new ClickHandler() {
129
			@Override
125
			@Override
130
			public void onClick(ClickEvent event) {
126
			public void onClick(ClickEvent event) {
131
				pagePrecedente();
127
				pagePrecedente();
132
			}
128
			}
133
		});
129
		});
134
 
130
 
135
		vue.boutonSuivant.addClickHandler(new ClickHandler() {
131
		vue.boutonSuivant.addClickHandler(new ClickHandler() {
136
			@Override
132
			@Override
137
			public void onClick(ClickEvent event) {
133
			public void onClick(ClickEvent event) {
138
				pageSuivante();
134
				pageSuivante();
139
			}
135
			}
140
		});
136
		});
141
		
137
		
142
		
138
		
143
		int nbLiens = vue.zoneLiens.getWidgetCount();
139
		int nbLiens = vue.zoneLiens.getWidgetCount();
144
		for (int i=0; i < nbLiens; i++) {
140
		for (int i=0; i < nbLiens; i++) {
145
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
141
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
146
 
142
 
147
			boutonCourant.addClickHandler(new ClickHandler() {
143
			boutonCourant.addClickHandler(new ClickHandler() {
148
 
144
 
149
				@Override
145
				@Override
150
				public void onClick(ClickEvent event) {
146
				public void onClick(ClickEvent event) {
151
					Button boutonCourant = (Button) event.getSource();
147
					Button boutonCourant = (Button) event.getSource();
152
					pageCourante = Integer.parseInt(boutonCourant.getText());
148
					pageCourante = Integer.parseInt(boutonCourant.getText());
153
					int debut = Integer.parseInt(boutonCourant.getText()) * pas;
149
					int debut = Integer.parseInt(boutonCourant.getText()) * pas;
154
					int fin = (debut + pas);
150
					int fin = (debut + pas);
155
					setBoutonActif();
151
					setBoutonActif();
156
					changerPage(debut, fin);
152
					changerPage(debut, fin);
157
					actualiserLiens();
153
					actualiserLiens();
158
				}
154
				}
159
			});
155
			});
160
		}
156
		}
161
	}
157
	}
162
 
158
 
163
	/** Retourne la limite supèrieur du nombre de pages à afficher
159
	/** Retourne la limite supèrieur du nombre de pages à afficher
164
	 * */
160
	 * */
165
	public void pageSuivante() {
161
	public void pageSuivante() {
166
		if (pageCourante < nbPage - 1) {
162
		if (pageCourante < nbPage - 1) {
167
			pageCourante++;
163
			pageCourante++;
168
			int debut = pageCourante * pas;
164
			int debut = pageCourante * pas;
169
			int fin = debut + pas;
165
			int fin = debut + pas;
170
			changerPage(debut, fin);
166
			changerPage(debut, fin);
171
			actualiserLiens();
167
			actualiserLiens();
172
		}
168
		}
173
	}
169
	}
174
	
170
	
175
	/** Retourne la limite infèrieure du nombre de pages à afficher
171
	/** Retourne la limite infèrieure du nombre de pages à afficher
176
	 * */
172
	 * */
177
	public void pagePrecedente() {
173
	public void pagePrecedente() {
178
		if (pageCourante > 1) {
174
		if (pageCourante > 1) {
179
			pageCourante--;
175
			pageCourante--;
180
			int debut = pageCourante * pas;
176
			int debut = pageCourante * pas;
181
			int fin = debut + pas;
177
			int fin = debut + pas;
182
			changerPage(debut, fin);
178
			changerPage(debut, fin);
183
			actualiserLiens();
179
			actualiserLiens();
184
		}
180
		}
185
	}
181
	}
186
	
182
	
187
	protected int getPageCourante() {
183
	protected int getPageCourante() {
188
		return this.pageCourante;
184
		return this.pageCourante;
189
	}
185
	}
190
 
186
 
191
	public abstract void changerPage(int debut, int fin);
187
	public abstract void changerPage(int debut, int fin);
192
	public abstract void actualiserPasCache(int pas);
188
	public abstract void actualiserPasCache(int pas);
193
 
189
 
194
}
190
}