Subversion Repositories eFlore/Applications.del

Rev

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

Rev 412 Rev 436
Line 4... Line 4...
4
import com.google.gwt.event.dom.client.ChangeHandler;
4
import com.google.gwt.event.dom.client.ChangeHandler;
5
import com.google.gwt.event.dom.client.ClickEvent;
5
import com.google.gwt.event.dom.client.ClickEvent;
6
import com.google.gwt.event.dom.client.ClickHandler;
6
import com.google.gwt.event.dom.client.ClickHandler;
7
import com.google.gwt.event.dom.client.HasChangeHandlers;
7
import com.google.gwt.event.dom.client.HasChangeHandlers;
8
import com.google.gwt.event.dom.client.HasClickHandlers;
8
import com.google.gwt.event.dom.client.HasClickHandlers;
9
import com.google.gwt.user.client.Window;
-
 
10
import com.google.gwt.user.client.ui.HasText;
9
import com.google.gwt.user.client.ui.HasText;
11
import com.google.gwt.user.client.ui.HasWidgets;
10
import com.google.gwt.user.client.ui.HasWidgets;
12
import com.google.gwt.user.client.ui.IsWidget;
11
import com.google.gwt.user.client.ui.IsWidget;
-
 
12
 
13
/**
13
/**
14
 * @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné
14
 * @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné
15
 *         d'éléments (pas) La méthode changerPage est abstraite et doit être
15
 *         d'éléments (pas) La méthode changerPage est abstraite et doit être
16
 *         définie lors de l'instanciation de la classe pagination pour
16
 *         définie lors de l'instanciation de la classe pagination pour
17
 *         permettre d'afficher la suite des éléments La méthode
17
 *         permettre d'afficher la suite des éléments La méthode
Line 19... Line 19...
19
 *         de la page où l'on se trouve
19
 *         de la page où l'on se trouve
20
 * */
20
 * */
21
public abstract class PaginationPresenteur {
21
public abstract class PaginationPresenteur {
Line 22... Line 22...
22
 
22
 
23
	public interface Vue extends IsWidget {
23
	public interface Vue extends IsWidget {
24
		
24
 
-
 
25
		public HasWidgets getZoneLiens();
25
		public HasWidgets getZoneLiens();
26
 
-
 
27
		public int getNbWidgetsZoneLiens();
26
		public int getNbWidgetsZoneLiens();
28
 
-
 
29
		public HasClickHandlers getWidgetZoneLiensHasClickHandlers(int index);
27
		public HasClickHandlers getWidgetZoneLiensHasClickHandlers(int index);
30
 
-
 
31
		public HasText getWidgetZoneLiensAsText(int index);
28
		public HasText getWidgetZoneLiensAsText(int index);
32
 
-
 
33
		public void changerStyleBoutonZoneLiens(int index, String style);
29
		public void changerStyleBoutonZoneLiens(int index, String style);
34
 
-
 
35
		public void ajouterBoutonZoneLiens(String label);
30
		public void ajouterBoutonZoneLiens(String label);
36
 
-
 
37
		public HasClickHandlers getBoutonSuivant();
31
		public HasClickHandlers getBoutonSuivant();
38
 
-
 
39
		public HasClickHandlers getBoutonPrecedent();
32
		public HasClickHandlers getBoutonPrecedent();
40
 
-
 
41
		public HasClickHandlers getBoutonPremierePage();
33
		public HasClickHandlers getBoutonPremierePage();
42
 
-
 
43
		public HasClickHandlers getBoutonDernierePage();
34
		public HasClickHandlers getBoutonDernierePage();
44
 
-
 
45
		public void masquerBoutonPrecedent();
35
		public void masquerBoutonPrecedent();
46
 
-
 
47
		public void afficherBoutonPrecedent();
36
		public void afficherBoutonPrecedent();
48
 
-
 
49
		public void masquerBoutonSuivant();
37
		public void masquerBoutonSuivant();
50
 
-
 
51
		public void afficherBoutonSuivant();
38
		public void afficherBoutonSuivant();
52
 
-
 
53
		public boolean boutonPrecedentEstAffiche();
39
		public boolean boutonPrecedentEstAffiche();
54
 
-
 
55
		public boolean boutonSuivantEstAffiche();
40
		public boolean boutonSuivantEstAffiche();
56
 
-
 
57
		public HasChangeHandlers getSelecteurPas();
41
		public HasChangeHandlers getSelecteurPas();
58
 
-
 
59
		public int getPasSelectionne();
42
		public int getPasSelectionne();
60
 
43
		public void changerSelecteurPas(int index);
61
		public void changerSelecteurPas(int index);
-
 
62
	}
44
	}
63
 
45
	private Vue vue;
64
	private Vue vue;
46
	private int nbPage;
65
	private int nbPage;
47
	private int pageCourante = 1;
66
	private int pageCourante = 1;
48
	private int nbElementsTotal = 0;
67
	private int nbElementsTotal = 0;
Line 54... Line 73...
54
	 * @param nbElementsTotal
73
	 * @param nbElementsTotal
55
	 *            : le nombre total des éléments à paginer
74
	 *            : le nombre total des éléments à paginer
56
	 * @param pas
75
	 * @param pas
57
	 *            : le nombre d'éléments à afficher par page
76
	 *            : le nombre d'éléments à afficher par page
58
	 * */
77
	 * */
59
	public PaginationPresenteur(PaginationPresenteur.Vue vue, int nbElementsTotal, int pas) {
78
	public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas) {
60
		this.nbElementsTotal = nbElementsTotal;
79
		this.nbElementsTotal = nbElementsTotal;
61
		this.vue = vue;
80
		this.vue = vue;
62
		changerPas(this.pas);
81
		changerPas(this.pas);
63
	}
82
	}
Line 77... Line 96...
77
	/** Met à jour le nombre de page en fonction du pas */
96
	/** Met à jour le nombre de page en fonction du pas */
78
	public void actualiserNbPage() {
97
	public void actualiserNbPage() {
79
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
98
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
80
		this.nbPage = nombrePages.intValue();
99
		this.nbPage = nombrePages.intValue();
81
	}
100
	}
82
	
101
 
83
	public void setNbPages(int nbPages) {
102
	public void setNbPages(int nbPages) {
84
		this.nbPage = nbPages;
103
		this.nbPage = nbPages;
85
	}
104
	}
86
	
105
 
87
	public int getNbPages() {
106
	public int getNbPages() {
88
		return nbPage;
107
		return nbPage;
89
	}
108
	}
90
	
109
 
91
	public Vue getVue() {
110
	public Vue getVue() {
92
		return vue;
111
		return vue;
93
	}
112
	}
Line 94... Line 113...
94
 
113
 
Line 101... Line 120...
101
	public void changerPas(int pas) {
120
	public void changerPas(int pas) {
102
		int ancienPas = this.pas;
121
		int ancienPas = this.pas;
103
		setPas(pas);
122
		setPas(pas);
104
		actualiserNbPage();
123
		actualiserNbPage();
105
		gererDecalagePageCourante(ancienPas, pas);
124
		gererDecalagePageCourante(ancienPas, pas);
106
		changerPage(pas * (pageCourante -1), pas * pageCourante);
125
		changerPage(pas * (pageCourante - 1), pas * pageCourante);
107
		actualiserLiens();
126
		actualiserLiens();
108
		actualiserPasCache(pas);
127
		actualiserPasCache(pas);
109
	}
128
	}
110
	
129
 
111
	public void setPas(int pas) {		
130
	public void setPas(int pas) {
112
		this.pas = pas;	
131
		this.pas = pas;
113
		switch (pas) {
132
		switch (pas) {
114
		case 5:
133
		case 5:
115
			vue.changerSelecteurPas(0);
134
			vue.changerSelecteurPas(0);
116
			break;
135
			break;
117
		case 10:
136
		case 10:
Line 123... Line 142...
123
		case 20:
142
		case 20:
124
			vue.changerSelecteurPas(3);
143
			vue.changerSelecteurPas(3);
125
			break;
144
			break;
126
		default:
145
		default:
127
			break;
146
			break;
128
		}	
147
		}
129
	}
148
	}
130
	
149
 
131
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {	
150
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
132
		if(ancienPas != nouveauPas) {
151
		if (ancienPas != nouveauPas) {
133
			double rapportPas = (double)ancienPas/(double)nouveauPas;
152
			double rapportPas = (double) ancienPas / (double) nouveauPas;
134
			pageCourante = (int)(Math.ceil((double)pageCourante*(double)rapportPas));
153
			pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
135
		}
154
		}
136
	}
155
	}
Line 137... Line 156...
137
 
156
 
138
	/**
157
	/**
Line 145... Line 164...
145
 
164
 
146
		int pageDebut = pagesAvant();
165
		int pageDebut = pagesAvant();
Line 147... Line 166...
147
		int pageFin = pagesApres();
166
		int pageFin = pagesApres();
148
 
167
 
149
		for (int i = pageDebut; i < pageFin; i++) {
168
		for (int i = pageDebut; i < pageFin; i++) {
150
			vue.ajouterBoutonZoneLiens(i+"");
169
			vue.ajouterBoutonZoneLiens(i + "");
151
		}
170
		}
152
		setBoutonActif();
171
		setBoutonActif();
Line 153... Line 172...
153
		gererEvenementsBoutonsDynamiques();
172
		gererEvenementsBoutonsDynamiques();
154
	}
173
	}
155
 
174
 
156
	private int pagesAvant() {
175
	private int pagesAvant() {
157
		int pageDebut = pageCourante - 5;
176
		int pageDebut = pageCourante - 5;
158
		if (pageDebut < 1) {
177
		if (pageDebut < 1) {
159
			pageDebut = 1;
178
			pageDebut = 1;
160
		}
179
		}
161
		if(pageCourante == 1) {
180
		if (pageCourante == 1) {
162
			vue.masquerBoutonPrecedent();
181
			vue.masquerBoutonPrecedent();
163
		} else {
182
		} else {
Line 170... Line 189...
170
		int pageFin = pageCourante + 5;
189
		int pageFin = pageCourante + 5;
171
		vue.afficherBoutonSuivant();
190
		vue.afficherBoutonSuivant();
172
		if (pageFin > nbPage) {
191
		if (pageFin > nbPage) {
173
			pageFin = nbPage;
192
			pageFin = nbPage;
174
		}
193
		}
175
		if(pageCourante == nbPage - 1) {
194
		if (pageCourante == nbPage - 1) {
176
			vue.masquerBoutonSuivant();
195
			vue.masquerBoutonSuivant();
177
		} else {
196
		} else {
178
			vue.afficherBoutonSuivant();
197
			vue.afficherBoutonSuivant();
179
		}
198
		}
180
		
199
 
181
		return pageFin;
200
		return pageFin;
182
	}
201
	}
Line 183... Line 202...
183
 
202
 
184
	private void setBoutonActif() {
203
	private void setBoutonActif() {
185
		int nbLiens = vue.getNbWidgetsZoneLiens();
204
		int nbLiens = vue.getNbWidgetsZoneLiens();
186
		for (int i = 0; i < nbLiens; i++) {
205
		for (int i = 0; i < nbLiens; i++) {
187
			HasText boutonCourant = vue.getWidgetZoneLiensAsText(i);
206
			HasText boutonCourant = vue.getWidgetZoneLiensAsText(i);
188
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
207
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
189
				vue.changerStyleBoutonZoneLiens(i,"actif");
208
				vue.changerStyleBoutonZoneLiens(i, "actif");
190
			} else {
209
			} else {
191
				vue.changerStyleBoutonZoneLiens(i,"inactif");
210
				vue.changerStyleBoutonZoneLiens(i, "inactif");
192
			}
211
			}
193
		}
212
		}
Line 194... Line 213...
194
	}
213
	}
195
 
214
 
-
 
215
	/**
196
	/**
216
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et
197
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et selecteur pas) 
217
	 * selecteur pas)
198
	 * */
218
	 * */
199
	public void gererEvenementsBoutonsStatiques() {		
219
	public void gererEvenementsBoutonsStatiques() {
200
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
220
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
201
			@Override
221
			@Override
202
			public void onChange(ChangeEvent event) {
222
			public void onChange(ChangeEvent event) {
Line 216... Line 236...
216
			@Override
236
			@Override
217
			public void onClick(ClickEvent event) {
237
			public void onClick(ClickEvent event) {
218
				pageSuivante();
238
				pageSuivante();
219
			}
239
			}
220
		});
240
		});
221
		
241
 
222
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
242
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
223
			@Override
243
			@Override
224
			public void onClick(ClickEvent event) {
244
			public void onClick(ClickEvent event) {
225
				premierePage();
245
				premierePage();
226
			}
246
			}
Line 231... Line 251...
231
			public void onClick(ClickEvent event) {
251
			public void onClick(ClickEvent event) {
232
				dernierePage();
252
				dernierePage();
233
			}
253
			}
234
		});
254
		});
235
	}
255
	}
236
	
256
 
237
	/**
257
	/**
238
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à chaque fois)
258
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à
-
 
259
	 * chaque fois)
239
	 * */
260
	 * */
240
	public void gererEvenementsBoutonsDynamiques() {
261
	public void gererEvenementsBoutonsDynamiques() {
241
		int nbLiens = vue.getNbWidgetsZoneLiens();
262
		int nbLiens = vue.getNbWidgetsZoneLiens();
242
		for (int i = 0; i < nbLiens; i++) {
263
		for (int i = 0; i < nbLiens; i++) {
243
			HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
264
			HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
244
			boutonCourant.addClickHandler(new ClickHandler() {
265
			boutonCourant.addClickHandler(new ClickHandler() {
245
				@Override
266
				@Override
246
				public void onClick(ClickEvent event) {
267
				public void onClick(ClickEvent event) {
247
					HasText boutonCourant = (HasText)event.getSource();
268
					HasText boutonCourant = (HasText) event.getSource();
248
					pageCourante = Integer.parseInt(boutonCourant.getText());
269
					pageCourante = Integer.parseInt(boutonCourant.getText());
249
					int debut = (Integer.parseInt(boutonCourant.getText()) - 1) * pas;
270
					int debut = (Integer.parseInt(boutonCourant.getText()) - 1) * pas;
250
					int fin = (debut + pas);
271
					int fin = (debut + pas);
251
					setBoutonActif();
272
					setBoutonActif();
252
					changerPage(debut, fin);
273
					changerPage(debut, fin);
Line 254... Line 275...
254
					synchroniser();
275
					synchroniser();
255
				}
276
				}
256
			});
277
			});
257
		}
278
		}
258
	}
279
	}
259
	
280
 
260
	public void premierePage() {
281
	public void premierePage() {
261
		if (pageCourante > 1) {
282
		if (pageCourante > 1) {
262
			pageCourante =  1;
283
			pageCourante = 1;
263
			int debut = (pageCourante -1) * pas;
284
			int debut = (pageCourante - 1) * pas;
264
			int fin = debut + pas;
285
			int fin = debut + pas;
265
			changerPage(debut, fin);
286
			changerPage(debut, fin);
266
			actualiserLiens();
287
			actualiserLiens();
267
			synchroniser();
288
			synchroniser();
268
		}
289
		}
269
	}
290
	}
270
	
291
 
271
	public void dernierePage() {
292
	public void dernierePage() {
272
		if (pageCourante < nbPage - 1) {
293
		if (pageCourante < nbPage - 1) {
273
			pageCourante = nbPage - 1;
294
			pageCourante = nbPage - 1;
274
			int debut = (pageCourante -1) * pas;
295
			int debut = (pageCourante - 1) * pas;
275
			int fin = debut + pas;
296
			int fin = debut + pas;
276
			changerPage(debut, fin);
297
			changerPage(debut, fin);
277
			actualiserLiens();
298
			actualiserLiens();
278
			synchroniser();
299
			synchroniser();
279
		}
300
		}
280
	}
301
	}
Line 281... Line 302...
281
 
302
 
282
	public void pageSuivante() {
303
	public void pageSuivante() {
283
		if (pageCourante < nbPage - 1) {
304
		if (pageCourante < nbPage - 1) {
284
			pageCourante++;
305
			pageCourante++;
285
			int debut = (pageCourante -1) * pas;
306
			int debut = (pageCourante - 1) * pas;
286
			int fin = debut + pas;
307
			int fin = debut + pas;
287
			changerPage(debut, fin);
308
			changerPage(debut, fin);
288
			actualiserLiens();
309
			actualiserLiens();
289
			synchroniser();
310
			synchroniser();
290
		}
311
		}
Line 291... Line 312...
291
	}
312
	}
292
 
313
 
293
	public void pagePrecedente() {
314
	public void pagePrecedente() {
294
		if (pageCourante > 1) {
315
		if (pageCourante > 1) {
295
			pageCourante--;
316
			pageCourante--;
296
			int debut = (pageCourante -1) * pas;
317
			int debut = (pageCourante - 1) * pas;
297
			int fin = debut + pas;
318
			int fin = debut + pas;
298
			changerPage(debut, fin);
319
			changerPage(debut, fin);
299
			actualiserLiens();
320
			actualiserLiens();
300
			synchroniser();
321
			synchroniser();
Line 301... Line 322...
301
		}
322
		}
302
	}
323
	}
303
 
324
 
304
	public int getPageCourante() {
325
	public int getPageCourante() {
305
		return this.pageCourante;
326
		return this.pageCourante;
306
	}
327
	}
307
	
328
 
308
	public int getPas() {
329
	public int getPas() {
309
		return this.pas;
330
		return this.pas;
310
	}
331
	}
311
	
332
 
Line 312... Line 333...
312
	public void setPageCourante(int pageCourante) {
333
	public void setPageCourante(int pageCourante) {
Line 313... Line 334...
313
		this.pageCourante = pageCourante;
334
		this.pageCourante = pageCourante;
314
	}
335
	}
315
 
336
 
-
 
337
	public abstract void changerPage(int debut, int fin);
-
 
338
 
-
 
339
	public abstract void actualiserPasCache(int pas);
-
 
340
 
-
 
341
	public void synchroniser() {
Line 316... Line 342...
316
	public abstract void changerPage(int debut, int fin);
342
		setPas(getPas());