Subversion Repositories eFlore/Applications.del

Rev

Rev 436 | Rev 446 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 436 Rev 445
Line 1... Line 1...
1
package org.tela_botanica.del.client.composants.pagination;
1
package org.tela_botanica.del.client.composants.pagination;
Line -... Line 2...
-
 
2
 
-
 
3
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
-
 
4
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage;
-
 
5
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas;
-
 
6
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage;
-
 
7
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas;
2
 
8
 
3
import com.google.gwt.event.dom.client.ChangeEvent;
9
import com.google.gwt.event.dom.client.ChangeEvent;
4
import com.google.gwt.event.dom.client.ChangeHandler;
10
import com.google.gwt.event.dom.client.ChangeHandler;
5
import com.google.gwt.event.dom.client.ClickEvent;
11
import com.google.gwt.event.dom.client.ClickEvent;
6
import com.google.gwt.event.dom.client.ClickHandler;
12
import com.google.gwt.event.dom.client.ClickHandler;
Line 19... Line 25...
19
 *         de la page où l'on se trouve
25
 *         de la page où l'on se trouve
20
 * */
26
 * */
21
public abstract class PaginationPresenteur {
27
public abstract class PaginationPresenteur {
Line 22... Line 28...
22
 
28
 
23
	public interface Vue extends IsWidget {
-
 
24
 
29
	public interface Vue extends IsWidget {
Line 25... Line 30...
25
		public HasWidgets getZoneLiens();
30
		public HasWidgets getZoneLiens();
Line 26... Line 31...
26
 
31
 
Line 56... Line 61...
56
 
61
 
Line 57... Line 62...
57
		public HasChangeHandlers getSelecteurPas();
62
		public HasChangeHandlers getSelecteurPas();
Line 58... Line 63...
58
 
63
 
-
 
64
		public int getPasSelectionne();
-
 
65
 
59
		public int getPasSelectionne();
66
		public void afficherPas(int pas);
Line 60... Line 67...
60
 
67
 
61
		public void changerSelecteurPas(int index);
68
		public void mettreEnValeurPageActive(int pageActive);
62
	}
69
	}
63
 
70
 
64
	private Vue vue;
71
	private Vue vue;
Line 65... Line 72...
65
	private int nbPage;
72
	private int nbPage = 1;
Line 73... Line 80...
73
	 * @param nbElementsTotal
80
	 * @param nbElementsTotal
74
	 *            : le nombre total des éléments à paginer
81
	 *            : le nombre total des éléments à paginer
75
	 * @param pas
82
	 * @param pas
76
	 *            : le nombre d'éléments à afficher par page
83
	 *            : le nombre d'éléments à afficher par page
77
	 * */
84
	 * */
78
	public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas) {
85
	public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas, int pageCourante) {
79
		this.nbElementsTotal = nbElementsTotal;
86
		this.nbElementsTotal = nbElementsTotal;
80
		this.vue = vue;
87
		this.vue = vue;
81
		changerPas(this.pas);
88
		this.pas = pas;
-
 
89
		this.pageCourante = pageCourante;
82
	}
90
	}
Line 83... Line 91...
83
 
91
 
84
	/**
92
	/**
85
	 * Methode go du modèle MVP
93
	 * Methode go du modèle MVP
86
	 * 
94
	 * 
87
	 * @param container
95
	 * @param container
88
	 *            : la vue ou éxécuter l'affichage
96
	 *            : la vue ou éxécuter l'affichage
89
	 */
97
	 */
90
	public void go(HasWidgets container) {
-
 
91
		gererEvenementsBoutonsStatiques();
-
 
92
		actualiserLiens();
98
	public void go(HasWidgets container) {
93
		container.add(vue.asWidget());
-
 
94
	}
-
 
95
 
-
 
96
	/** Met à jour le nombre de page en fonction du pas */
-
 
97
	public void actualiserNbPage() {
-
 
98
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
-
 
99
		this.nbPage = nombrePages.intValue();
-
 
100
	}
-
 
101
 
-
 
102
	public void setNbPages(int nbPages) {
-
 
103
		this.nbPage = nbPages;
-
 
104
	}
-
 
105
 
-
 
106
	public int getNbPages() {
99
		container.add(vue.asWidget());
107
		return nbPage;
-
 
108
	}
-
 
109
 
-
 
110
	public Vue getVue() {
-
 
111
		return vue;
-
 
112
	}
-
 
113
 
-
 
114
	/**
-
 
115
	 * Changer le pas de la pagination
-
 
116
	 * 
-
 
117
	 * @param pas
-
 
118
	 *            : le nombre d'éléments à afficher par page
-
 
119
	 */
-
 
120
	public void changerPas(int pas) {
-
 
121
		int ancienPas = this.pas;
-
 
122
		setPas(pas);
100
		gererEvenements();
123
		actualiserNbPage();
-
 
124
		gererDecalagePageCourante(ancienPas, pas);
-
 
125
		changerPage(pas * (pageCourante - 1), pas * pageCourante);
101
		actualiserLiensPagesPagination();
126
		actualiserLiens();
-
 
127
		actualiserPasCache(pas);
-
 
128
	}
-
 
129
 
-
 
130
	public void setPas(int pas) {
-
 
131
		this.pas = pas;
-
 
132
		switch (pas) {
-
 
133
		case 5:
-
 
134
			vue.changerSelecteurPas(0);
-
 
135
			break;
-
 
136
		case 10:
-
 
137
			vue.changerSelecteurPas(1);
-
 
138
			break;
-
 
139
		case 15:
-
 
140
			vue.changerSelecteurPas(2);
-
 
141
			break;
-
 
142
		case 20:
-
 
143
			vue.changerSelecteurPas(3);
-
 
144
			break;
-
 
145
		default:
-
 
146
			break;
-
 
147
		}
-
 
148
	}
-
 
149
 
-
 
150
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
-
 
151
		if (ancienPas != nouveauPas) {
-
 
152
			double rapportPas = (double) ancienPas / (double) nouveauPas;
-
 
153
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
-
 
154
		}
-
 
155
	}
-
 
156
 
-
 
157
	/**
-
 
158
	 * Actualiser les liens pour n'afficher 5 avant et 5 après
-
 
159
	 * */
-
 
160
	public void actualiserLiens() {
-
 
161
 
-
 
162
		HasWidgets zoneLiens = vue.getZoneLiens();
-
 
163
		zoneLiens.clear();
-
 
164
 
-
 
165
		int pageDebut = pagesAvant();
-
 
166
		int pageFin = pagesApres();
-
 
167
 
-
 
168
		for (int i = pageDebut; i < pageFin; i++) {
-
 
169
			vue.ajouterBoutonZoneLiens(i + "");
-
 
170
		}
-
 
171
		setBoutonActif();
-
 
172
		gererEvenementsBoutonsDynamiques();
-
 
173
	}
-
 
174
 
-
 
175
	private int pagesAvant() {
-
 
176
		int pageDebut = pageCourante - 5;
-
 
177
		if (pageDebut < 1) {
-
 
178
			pageDebut = 1;
-
 
179
		}
-
 
180
		if (pageCourante == 1) {
-
 
181
			vue.masquerBoutonPrecedent();
-
 
182
		} else {
-
 
183
			vue.afficherBoutonPrecedent();
-
 
184
		}
-
 
185
		return pageDebut;
-
 
186
	}
-
 
187
 
-
 
188
	private int pagesApres() {
-
 
189
		int pageFin = pageCourante + 5;
-
 
190
		vue.afficherBoutonSuivant();
-
 
191
		if (pageFin > nbPage) {
-
 
192
			pageFin = nbPage;
-
 
193
		}
-
 
194
		if (pageCourante == nbPage - 1) {
-
 
195
			vue.masquerBoutonSuivant();
-
 
196
		} else {
-
 
197
			vue.afficherBoutonSuivant();
-
 
198
		}
-
 
199
 
-
 
200
		return pageFin;
-
 
201
	}
-
 
202
 
-
 
203
	private void setBoutonActif() {
-
 
204
		int nbLiens = vue.getNbWidgetsZoneLiens();
-
 
205
		for (int i = 0; i < nbLiens; i++) {
-
 
206
			HasText boutonCourant = vue.getWidgetZoneLiensAsText(i);
-
 
207
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
-
 
208
				vue.changerStyleBoutonZoneLiens(i, "actif");
-
 
209
			} else {
-
 
210
				vue.changerStyleBoutonZoneLiens(i, "inactif");
-
 
211
			}
-
 
212
		}
102
		actualiserPas();
Line 213... Line 103...
213
	}
103
	}
214
 
104
 
215
	/**
105
	/**
216
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et
106
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et
217
	 * selecteur pas)
107
	 * selecteur pas)
218
	 * */
108
	 * */
219
	public void gererEvenementsBoutonsStatiques() {
109
	protected void gererEvenements() {
220
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
110
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
221
			@Override
111
			@Override
222
			public void onChange(ChangeEvent event) {
112
			public void onChange(ChangeEvent event) {
223
				changerPas(vue.getPasSelectionne());
113
				chargerElements(0, vue.getPasSelectionne());
224
				synchroniser();
114
				BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(vue.getPasSelectionne()));
Line 225... Line 115...
225
			}
115
			}
226
		});
116
		});
227
 
117
 
228
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
118
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
229
			@Override
119
			@Override
230
			public void onClick(ClickEvent event) {
120
			public void onClick(ClickEvent event) {
Line 231... Line 121...
231
				pagePrecedente();
121
				allerALaPagePrecedente();
232
			}
122
			}
233
		});
123
		});
234
 
124
 
235
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
125
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
236
			@Override
126
			@Override
Line 237... Line 127...
237
			public void onClick(ClickEvent event) {
127
			public void onClick(ClickEvent event) {
238
				pageSuivante();
128
				allerALapageSuivante();
239
			}
129
			}
240
		});
130
		});
241
 
131
 
242
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
132
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
Line 243... Line 133...
243
			@Override
133
			@Override
244
			public void onClick(ClickEvent event) {
134
			public void onClick(ClickEvent event) {
245
				premierePage();
135
				afficherLaPremierePage();
246
			}
136
			}
-
 
137
		});
-
 
138
 
-
 
139
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
-
 
140
			@Override
-
 
141
			public void onClick(ClickEvent event) {
-
 
142
				afficherlaDernierePage();
-
 
143
			}
-
 
144
		});
-
 
145
 
-
 
146
		BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
-
 
147
 
-
 
148
			@Override
-
 
149
			public void onChangementPage(EvenementChangementPage event) {
-
 
150
				pageCourante = event.getPageAAfficher();
-
 
151
				mettreEnValeurPageCourante();
-
 
152
			}
-
 
153
		});
-
 
154
 
-
 
155
		BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
-
 
156
 
-
 
157
			@Override
-
 
158
			public void onChangementPas(EvenementChangementPas event) {
-
 
159
 
-
 
160
				// remet la page a zero lors du changement de pas
-
 
161
				pageCourante = 1;
247
		});
162
 
248
 
163
				// modifie le pas et les liens en fonction
249
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
164
				pas = event.getPas();
Line 250... Line 165...
250
			@Override
165
				actualiserPas();
251
			public void onClick(ClickEvent event) {
166
				actualiserLiensPagesPagination();
252
				dernierePage();
167
 
253
			}
168
			}
254
		});
169
		});
255
	}
170
	}
256
 
171
 
257
	/**
172
	/**
258
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à
173
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à
259
	 * chaque fois)
174
	 * chaque fois)
260
	 * */
175
	 * */
261
	public void gererEvenementsBoutonsDynamiques() {
176
	private void gererEvenementsBoutonsDynamiques() {
262
		int nbLiens = vue.getNbWidgetsZoneLiens();
177
		int nbLiens = vue.getNbWidgetsZoneLiens();
263
		for (int i = 0; i < nbLiens; i++) {
178
		for (int i = 0; i < nbLiens; i++) {
264
			HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
-
 
265
			boutonCourant.addClickHandler(new ClickHandler() {
-
 
266
				@Override
179
			HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
267
				public void onClick(ClickEvent event) {
-
 
268
					HasText boutonCourant = (HasText) event.getSource();
-
 
269
					pageCourante = Integer.parseInt(boutonCourant.getText());
180
			boutonCourant.addClickHandler(new ClickHandler() {
270
					int debut = (Integer.parseInt(boutonCourant.getText()) - 1) * pas;
181
				@Override
271
					int fin = (debut + pas);
182
				public void onClick(ClickEvent event) {
272
					setBoutonActif();
183
					HasText boutonCourant = (HasText) event.getSource();
Line 273... Line 184...
273
					changerPage(debut, fin);
184
					int pageAAfficher = Integer.parseInt(boutonCourant.getText());
274
					actualiserLiens();
-
 
275
					synchroniser();
-
 
276
				}
-
 
277
			});
-
 
278
		}
-
 
279
	}
185
					chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
280
 
186
					BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
281
	public void premierePage() {
-
 
282
		if (pageCourante > 1) {
187
				}
Line 283... Line -...
283
			pageCourante = 1;
-
 
284
			int debut = (pageCourante - 1) * pas;
-
 
285
			int fin = debut + pas;
188
			});
286
			changerPage(debut, fin);
189
		}
287
			actualiserLiens();
190
	}
288
			synchroniser();
-
 
289
		}
191
 
290
	}
-
 
291
 
-
 
292
	public void dernierePage() {
-
 
Line 293... Line -...
293
		if (pageCourante < nbPage - 1) {
-
 
294
			pageCourante = nbPage - 1;
192
	public void actualiserPas() {
295
			int debut = (pageCourante - 1) * pas;
-
 
296
			int fin = debut + pas;
-
 
297
			changerPage(debut, fin);
-
 
298
			actualiserLiens();
-
 
299
			synchroniser();
-
 
300
		}
-
 
301
	}
-
 
302
 
-
 
Line 303... Line 193...
303
	public void pageSuivante() {
193
		actualiserPasCache(pas);
304
		if (pageCourante < nbPage - 1) {
194
		vue.afficherPas(pas);
-
 
195
	}
305
			pageCourante++;
196
 
306
			int debut = (pageCourante - 1) * pas;
-
 
307
			int fin = debut + pas;
197
	/**
-
 
198
	 * Actualiser les liens pour n'afficher 5 avant et 5 après
308
			changerPage(debut, fin);
199
	 * */
309
			actualiserLiens();
200
	public void actualiserLiensPagesPagination() {
310
			synchroniser();
-
 
311
		}
201
 
-
 
202
		this.nbPage = calculerNbPage();
-
 
203
 
312
	}
204
		HasWidgets zoneLiens = vue.getZoneLiens();
Line 313... Line 205...
313
 
205
		zoneLiens.clear();
314
	public void pagePrecedente() {
206
 
315
		if (pageCourante > 1) {
207
		int pageDebut = 1;
Line 332... Line 224...
332
 
224
 
333
	public void setPageCourante(int pageCourante) {
225
	public void setPageCourante(int pageCourante) {
334
		this.pageCourante = pageCourante;
226
		this.pageCourante = pageCourante;
Line -... Line 227...
-
 
227
	}
-
 
228
 
-
 
229
	public void allerALaPagePrecedente() {
-
 
230
		if (pageCourante > 1) {
-
 
231
			int pageAAfficher = pageCourante - 1;
-
 
232
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
-
 
233
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
-
 
234
		}
-
 
235
 
-
 
236
	}
-
 
237
 
-
 
238
	public void allerALapageSuivante() {
-
 
239
		if (pageCourante < nbPage - 1) {
-
 
240
			int pageAAfficher = pageCourante + 1;
-
 
241
			chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
-
 
242
			BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
-
 
243
		}
-
 
244
	}
-
 
245
 
-
 
246
	public void afficherLaPremierePage() {
-
 
247
		int pageAAfficher = 1;
-
 
248
		chargerElements(0, pas);
-
 
249
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
-
 
250
	}
-
 
251
 
-
 
252
	public void afficherlaDernierePage() {
-
 
253
		int pageAAfficher = nbPage - 1;
-
 
254
		chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
-
 
255
		BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
-
 
256
	}
-
 
257
 
-
 
258
	/** calcule le nombre de page en fonction du pas */
-
 
259
	private int calculerNbPage() {
-
 
260
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
-
 
261
		return nombrePages.intValue();
-
 
262
	}
-
 
263
 
-
 
264
	public void mettreEnValeurPageCourante() {
-
 
265
		getVue().mettreEnValeurPageActive(getPageCourante());
-
 
266
	}
-
 
267
 
-
 
268
	public void setNbPages(int nbPages) {
-
 
269
		this.nbPage = nbPages;
-
 
270
	}
-
 
271
 
-
 
272
	public int getNbPages() {
-
 
273
		return nbPage;
-
 
274
	}
-
 
275
 
-
 
276
	public Vue getVue() {
-
 
277
		return vue;
335
	}
278
	}
Line 336... Line 279...
336
 
279
 
Line 337... Line 280...
337
	public abstract void changerPage(int debut, int fin);
280
	public abstract void chargerElements(int debut, int fin);
338
 
281
 
339
	public abstract void actualiserPasCache(int pas);
-
 
340
 
-
 
341
	public void synchroniser() {
-
 
342
		setPas(getPas());
282
	public abstract void actualiserPasCache(int pas);
Line 343... Line 283...
343
		setPageCourante(getPageCourante());
283