Subversion Repositories eFlore/Applications.del

Rev

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

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