Subversion Repositories eFlore/Applications.del

Rev

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

Rev 390 Rev 391
Line 2... Line 2...
2
 
2
 
3
import com.google.gwt.event.dom.client.ChangeEvent;
3
import com.google.gwt.event.dom.client.ChangeEvent;
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;
-
 
7
import com.google.gwt.event.dom.client.HasChangeHandlers;
6
import com.google.gwt.event.dom.client.ClickHandler;
8
import com.google.gwt.event.dom.client.HasClickHandlers;
7
import com.google.gwt.user.client.Window;
9
import com.google.gwt.user.client.Window;
8
import com.google.gwt.user.client.ui.Button;
10
import com.google.gwt.user.client.ui.HasText;
9
import com.google.gwt.user.client.ui.HasWidgets;
-
 
10
import com.google.gwt.user.client.ui.HorizontalPanel;
11
import com.google.gwt.user.client.ui.HasWidgets;
11
import com.google.gwt.user.client.ui.ListBox;
-
 
12
 
12
import com.google.gwt.user.client.ui.IsWidget;
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
18
 *         actualiserPasCache est abstraite car le pas est différent en fonction
18
 *         actualiserPasCache est abstraite car le pas est différent en fonction
19
 *         de la page où l'on se trouve
19
 *         de la page où l'on se trouve
20
 * */
20
 * */
Line -... Line 21...
-
 
21
public abstract class PaginationPresenteur {
-
 
22
 
-
 
23
	public interface Vue extends IsWidget {
-
 
24
		
-
 
25
		public HasWidgets getZoneLiens();
-
 
26
		public int getNbWidgetsZoneLiens();
-
 
27
		public HasClickHandlers getWidgetZoneLiensHasClickHandlers(int index);
-
 
28
		public HasText getWidgetZoneLiensAsText(int index);
-
 
29
		public void changerStyleBoutonZoneLiens(int index, String style);
-
 
30
		public void ajouterBoutonZoneLiens(String label);
-
 
31
		public HasClickHandlers getBoutonSuivant();
-
 
32
		public HasClickHandlers getBoutonPrecedent();
-
 
33
		public HasClickHandlers getBoutonPremierePage();
-
 
34
		public HasClickHandlers getBoutonDernierePage();
-
 
35
		public void masquerBoutonDebut();
-
 
36
		public void afficherBoutonDebut();
-
 
37
		public void masquerBoutonSuivant();
-
 
38
		public void afficherBoutonSuivant();
-
 
39
		public HasChangeHandlers getSelecteurPas();
-
 
40
		public int getPasSelectionne();
21
public abstract class PaginationPresenteur {
41
		public void changerSelecteurPas(int index);
22
 
42
	}
23
	private final PaginationVue vue;
43
	private Vue vue;
24
	private int nbPage;
44
	private int nbPage;
25
	private int pageCourante = 1;
45
	private int pageCourante = 1;
Line 32... Line 52...
32
	 * @param nbElementsTotal
52
	 * @param nbElementsTotal
33
	 *            : le nombre total des éléments à paginer
53
	 *            : le nombre total des éléments à paginer
34
	 * @param pas
54
	 * @param pas
35
	 *            : le nombre d'éléments à afficher par page
55
	 *            : le nombre d'éléments à afficher par page
36
	 * */
56
	 * */
37
	public PaginationPresenteur(int nbElementsTotal, int pas) {
57
	public PaginationPresenteur(PaginationPresenteur.Vue vue, int nbElementsTotal, int pas) {
38
		this.nbElementsTotal = nbElementsTotal;
58
		this.nbElementsTotal = nbElementsTotal;
39
		vue = new PaginationVue();
59
		this.vue = vue;
40
		changerPas(this.pas);
60
		changerPas(this.pas);
41
	}
61
	}
Line 42... Line 62...
42
 
62
 
43
	/**
63
	/**
Line 47... Line 67...
47
	 *            : la vue ou éxécuter l'affichage
67
	 *            : la vue ou éxécuter l'affichage
48
	 */
68
	 */
49
	public void go(HasWidgets container) {
69
	public void go(HasWidgets container) {
50
		gererEvenementsBoutonsStatiques();
70
		gererEvenementsBoutonsStatiques();
51
		actualiserLiens();
71
		actualiserLiens();
52
		container.add(vue);
72
		container.add(vue.asWidget());
53
	}
73
	}
Line 54... Line 74...
54
 
74
 
55
	/** Met à jour le nombre de page en fonction du pas */
75
	/** Met à jour le nombre de page en fonction du pas */
56
	private void actualiserNbPage() {
76
	public void actualiserNbPage() {
57
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
77
		Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
58
		this.nbPage = nombrePages.intValue();
78
		this.nbPage = nombrePages.intValue();
-
 
79
	}
-
 
80
	
-
 
81
	public void setNbPages(int nbPages) {
-
 
82
		this.nbPage = nbPages;
-
 
83
	}
-
 
84
	
-
 
85
	public int getNbPages() {
-
 
86
		return nbPage;
Line 59... Line 87...
59
	}
87
	}
60
 
88
 
61
	/**
89
	/**
62
	 * Changer le pas de la pagination
90
	 * Changer le pas de la pagination
63
	 * 
91
	 * 
64
	 * @param pas
92
	 * @param pas
65
	 *            : le nombre d'éléments à afficher par page
93
	 *            : le nombre d'éléments à afficher par page
66
	 */
94
	 */
67
	public void changerPas(int pas) {
95
	public void changerPas(int pas) {
68
		int ancienPas = this.pas;
96
		int ancienPas = this.pas;
69
		this.pas = pas;
97
		setPas(pas);
70
		actualiserNbPage();
-
 
71
		gererDecalagePageCourante(ancienPas, pas);
98
		actualiserNbPage();
-
 
99
		gererDecalagePageCourante(ancienPas, pas);
-
 
100
		changerPage(pas * (pageCourante -1), pas * pageCourante);
-
 
101
		actualiserLiens();
-
 
102
		actualiserPasCache(pas);
-
 
103
	}
-
 
104
	
72
		actualiserLiens();
105
	public void setPas(int pas) {		
73
		changerPage(pas * (pageCourante -1), pas * pageCourante);
106
		this.pas = pas;	
74
		switch (pas) {
107
		switch (pas) {
75
		case 5:
108
		case 5:
76
			vue.getSelecteurPas().setSelectedIndex(0);
109
			vue.changerSelecteurPas(0);
77
			break;
110
			break;
78
		case 10:
111
		case 10:
79
			vue.getSelecteurPas().setSelectedIndex(1);
112
			vue.changerSelecteurPas(1);
80
			break;
113
			break;
81
		case 15:
114
		case 15:
82
			vue.getSelecteurPas().setSelectedIndex(2);
115
			vue.changerSelecteurPas(2);
83
			break;
116
			break;
84
		case 20:
117
		case 20:
85
			vue.getSelecteurPas().setSelectedIndex(3);
118
			vue.changerSelecteurPas(3);
86
			break;
119
			break;
87
		default:
120
		default:
88
			break;
-
 
89
		}
121
			break;
Line 90... Line 122...
90
		actualiserPasCache(pas);
122
		}	
91
	}
123
	}
92
	
124
	
93
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {	
125
	private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {	
94
		if(ancienPas != nouveauPas) {
-
 
95
			double rapportPas = (double)ancienPas/(double)nouveauPas;
126
		if(ancienPas != nouveauPas) {
96
			pageCourante = (int)(Math.ceil((double)pageCourante*(double)rapportPas));
127
			double rapportPas = (double)ancienPas/(double)nouveauPas;
Line 97... Line 128...
97
			synchroniser();
128
			pageCourante = (int)(Math.ceil((double)pageCourante*(double)rapportPas));
98
		}
129
		}
99
	}
130
	}
100
 
131
 
Line 101... Line 132...
101
	/**
132
	/**
102
	 * Actualiser les liens pour n'afficher 5 avant et 5 après
133
	 * Actualiser les liens pour n'afficher 5 avant et 5 après
Line 103... Line 134...
103
	 * */
134
	 * */
104
	public void actualiserLiens() {
135
	public void actualiserLiens() {
Line 105... Line 136...
105
 
136
 
106
		HorizontalPanel zoneLiens = vue.zoneLiens;
137
		HasWidgets zoneLiens = vue.getZoneLiens();
107
		zoneLiens.clear();
-
 
108
 
138
		zoneLiens.clear();
109
		int pageDebut = pagesAvant();
139
 
110
		int pageFin = pagesApres();
140
		int pageDebut = pagesAvant();
111
 
141
		int pageFin = pagesApres();
Line 137... Line 167...
137
		}
167
		}
138
		return pageFin;
168
		return pageFin;
139
	}
169
	}
Line 140... Line 170...
140
 
170
 
141
	private void setBoutonActif() {
171
	private void setBoutonActif() {
142
		int nbLiens = vue.zoneLiens.getWidgetCount();
172
		int nbLiens = vue.getNbWidgetsZoneLiens();
143
		for (int i = 0; i < nbLiens; i++) {
173
		for (int i = 0; i < nbLiens; i++) {
144
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
174
			HasText boutonCourant = vue.getWidgetZoneLiensAsText(i);
145
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
175
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
146
				boutonCourant.setStyleName("actif");
176
				vue.changerStyleBoutonZoneLiens(i,"actif");
147
			} else {
177
			} else {
148
				boutonCourant.setStyleName("inactif");
178
				vue.changerStyleBoutonZoneLiens(i,"inactif");
149
			}
179
			}
150
		}
180
		}
Line 151... Line 181...
151
	}
181
	}
152
 
182
 
153
	/**
183
	/**
154
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et selecteur pas) 
184
	 * Gérer les évènements sur les boutons statiques (précédent, suivant et selecteur pas) 
155
	 * */
185
	 * */
156
	public void gererEvenementsBoutonsStatiques() {		
186
	public void gererEvenementsBoutonsStatiques() {		
157
		vue.selecteurPas.addChangeHandler(new ChangeHandler() {
187
		vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
158
			@Override
-
 
159
			public void onChange(ChangeEvent event) {
188
			@Override
160
				ListBox nbElements = (ListBox) event.getSource();
-
 
161
				int index = nbElements.getSelectedIndex();
189
			public void onChange(ChangeEvent event) {
162
				changerPas(Integer.parseInt(nbElements.getValue(index)));
190
				changerPas(vue.getPasSelectionne());
Line 163... Line 191...
163
				synchroniser();
191
				synchroniser();
Line 164... Line 192...
164
			}
192
			}
165
 
193
 
166
		});
194
		});
167
 
195
 
168
		vue.boutonPrecedent.addClickHandler(new ClickHandler() {
196
		vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
169
			@Override
197
			@Override
Line 170... Line 198...
170
			public void onClick(ClickEvent event) {
198
			public void onClick(ClickEvent event) {
171
				pagePrecedente();
199
				pagePrecedente();
172
			}
200
			}
173
		});
201
		});
174
 
202
 
175
		vue.boutonSuivant.addClickHandler(new ClickHandler() {
203
		vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
-
 
204
			@Override
-
 
205
			public void onClick(ClickEvent event) {
-
 
206
				pageSuivante();
-
 
207
			}
-
 
208
		});
-
 
209
		
-
 
210
		vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
-
 
211
			@Override
-
 
212
			public void onClick(ClickEvent event) {
-
 
213
				premierePage();
-
 
214
			}
-
 
215
		});
-
 
216
 
-
 
217
		vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
176
			@Override
218
			@Override
Line 177... Line 219...
177
			public void onClick(ClickEvent event) {
219
			public void onClick(ClickEvent event) {
178
				pageSuivante();
220
				dernierePage();
179
			}
221
			}
180
		});
222
		});
181
	}
223
	}
182
	
224
	
183
	/**
225
	/**
184
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à chaque fois)
-
 
185
	 * */
226
	 * Gérer les évènements sur les boutons dynamiques (qui sont recréés à chaque fois)
186
	public void gererEvenementsBoutonsDynamiques() {
-
 
187
		int nbLiens = vue.zoneLiens.getWidgetCount();
227
	 * */
188
		for (int i = 0; i < nbLiens; i++) {
228
	public void gererEvenementsBoutonsDynamiques() {
189
			Button boutonCourant = (Button) vue.zoneLiens.getWidget(i);
229
		int nbLiens = vue.getNbWidgetsZoneLiens();
190
 
230
		for (int i = 0; i < nbLiens; i++) {
191
			boutonCourant.addClickHandler(new ClickHandler() {
231
			HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
192
 
232
			boutonCourant.addClickHandler(new ClickHandler() {
193
				@Override
233
				@Override
194
				public void onClick(ClickEvent event) {
234
				public void onClick(ClickEvent event) {
Line 202... Line 242...
202
					synchroniser();
242
					synchroniser();
203
				}
243
				}
204
			});
244
			});
205
		}
245
		}
206
	}
246
	}
-
 
247
	
-
 
248
	public void premierePage() {
-
 
249
		if (pageCourante > 1) {
-
 
250
			pageCourante =  1;
-
 
251
			int debut = (pageCourante -1) * pas;
-
 
252
			int fin = debut + pas;
-
 
253
			changerPage(debut, fin);
-
 
254
			actualiserLiens();
-
 
255
			synchroniser();
-
 
256
		}
-
 
257
	}
-
 
258
	
-
 
259
	public void dernierePage() {
-
 
260
		if (pageCourante < nbPage - 1) {
-
 
261
			pageCourante = nbPage - 1;
-
 
262
			int debut = (pageCourante -1) * pas;
-
 
263
			int fin = debut + pas;
-
 
264
			changerPage(debut, fin);
-
 
265
			actualiserLiens();
-
 
266
			synchroniser();
-
 
267
		}
-
 
268
	}
Line 207... Line -...
207
 
-
 
208
	/**
-
 
209
	 * Retourne la limite supèrieure du nombre de pages à afficher
-
 
210
	 * */
269
 
211
	public void pageSuivante() {
270
	public void pageSuivante() {
212
		if (pageCourante < nbPage - 1) {
271
		if (pageCourante < nbPage - 1) {
213
			pageCourante++;
272
			pageCourante++;
214
			int debut = (pageCourante -1) * pas;
273
			int debut = (pageCourante -1) * pas;
Line 217... Line 276...
217
			actualiserLiens();
276
			actualiserLiens();
218
			synchroniser();
277
			synchroniser();
219
		}
278
		}
220
	}
279
	}
Line 221... Line -...
221
 
-
 
222
	/**
-
 
223
	 * Retourne la limite infèrieure du nombre de pages à afficher
-
 
224
	 * */
280
 
225
	public void pagePrecedente() {
281
	public void pagePrecedente() {
226
		if (pageCourante > 1) {
282
		if (pageCourante > 1) {
227
			pageCourante--;
283
			pageCourante--;
228
			int debut = (pageCourante -1) * pas;
284
			int debut = (pageCourante -1) * pas;
Line 231... Line 287...
231
			actualiserLiens();
287
			actualiserLiens();
232
			synchroniser();
288
			synchroniser();
233
		}
289
		}
234
	}
290
	}
Line 235... Line 291...
235
 
291
 
236
	protected int getPageCourante() {
292
	public int getPageCourante() {
237
		return this.pageCourante;
293
		return this.pageCourante;
Line 238... Line 294...
238
	}
294
	}
239
	
295
	
240
	protected int getPas() {
296
	public int getPas() {
Line 241... Line 297...
241
		return this.pas;
297
		return this.pas;
242
	}
298
	}