Subversion Repositories eFlore/Applications.del

Rev

Rev 263 | Rev 269 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
256 gduche 1
package org.tela_botanica.del.client.composants.pagination;
120 gduche 2
 
3
import java.util.Iterator;
4
import java.util.Vector;
5
 
147 benjamin 6
import org.tela_botanica.del.client.cache.CacheClient;
7
 
120 gduche 8
import com.google.gwt.event.dom.client.ChangeEvent;
9
import com.google.gwt.event.dom.client.ChangeHandler;
10
import com.google.gwt.event.dom.client.ClickEvent;
11
import com.google.gwt.event.dom.client.ClickHandler;
12
import com.google.gwt.user.client.ui.Button;
13
import com.google.gwt.user.client.ui.HasWidgets;
14
import com.google.gwt.user.client.ui.HorizontalPanel;
15
import com.google.gwt.user.client.ui.ListBox;
16
 
17
public abstract class PaginationPresenteur {
18
 
19
	private final PaginationVue vue;
20
	private int nbElementsTotal = 0;
21
	private int nbPage;
22
	private Vector<Button> liens;
263 gduche 23
	private int pas = 10;
264 gduche 24
	private int pageCourante = 1;
25
 
263 gduche 26
	public PaginationPresenteur(int nbElements, int pas) {
120 gduche 27
		this.nbElementsTotal = nbElements;
28
		actualiserNbPage();
29
		vue = new PaginationVue();
263 gduche 30
		setPas(pas);
120 gduche 31
	}
32
 
137 gduche 33
	private void setBoutonActif() {
34
		Iterator<Button> it = liens.iterator();
35
		while (it.hasNext()) {
36
			Button boutonCourant = it.next();
264 gduche 37
			if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
137 gduche 38
				boutonCourant.setStyleName("actif");
39
			} else {
40
				boutonCourant.setStyleName("inactif");
41
			}
42
		}
43
	}
44
 
120 gduche 45
	private void actualiserNbPage() {
263 gduche 46
		Double a = Math.ceil((double) nbElementsTotal / (double) pas);
120 gduche 47
		this.nbPage = a.intValue();
48
	}
49
 
50
	public void setPas(int pas) {
51
		actualiserNbPage();
52
		creerLiens();
264 gduche 53
		changerPage(pas * pageCourante, pas * (pageCourante + 1));
263 gduche 54
 
55
		actualiserPasCache(pas);
120 gduche 56
	}
57
 
58
	public void creerLiens() {
59
		HorizontalPanel zoneLiens = vue.getZoneLiens();
60
		zoneLiens.clear();
61
		liens = new Vector<Button>();
62
		Button precedent = new Button();
63
		precedent.setText("<");
64
		precedent.addClickHandler(new ClickHandler() {
65
 
66
			@Override
67
			public void onClick(ClickEvent event) {
68
				pagePrecedente();
69
			}
70
		});
71
 
72
		liens.add(precedent);
73
		vue.getZoneLiens().add(precedent);
74
 
264 gduche 75
		int pageDebut = pageCourante - 5;
263 gduche 76
		if (pageDebut < 1) {
77
			pageDebut = 1;
78
		}
79
 
80
		int pageFin = pageDebut + 5;
81
		if (pageFin > nbPage) {
82
			pageFin = nbPage;
83
		}
84
 
85
		for (int i = pageDebut; i < pageFin; i++) {
120 gduche 86
			Button bouton = new Button();
87
			bouton.setText(String.valueOf(i));
88
			liens.add(bouton);
89
			zoneLiens.add(bouton);
90
		}
91
 
92
		Button suivant = new Button();
93
		suivant.setText(">");
94
		suivant.addClickHandler(new ClickHandler() {
95
 
96
			@Override
97
			public void onClick(ClickEvent event) {
98
				pageSuivante();
99
			}
100
		});
101
 
102
		liens.add(suivant);
103
		vue.getZoneLiens().add(suivant);
104
 
105
		handleEvents();
137 gduche 106
		setBoutonActif();
120 gduche 107
	}
108
 
109
	public void initNbElements() {
110
 
111
		ListBox nbElements = vue.getNbElements();
112
		for (int i = 0; i < 20; i += 5) {
113
			int valeur = i;
114
			if (i == 0) {
115
				valeur = 1;
116
			}
117
 
118
			nbElements.addItem(String.valueOf(valeur));
119
		}
263 gduche 120
		nbElements.setSelectedIndex(pas / 5);
120 gduche 121
		nbElements.addChangeHandler(new ChangeHandler() {
122
 
123
			@Override
124
			public void onChange(ChangeEvent event) {
125
				ListBox nbElements = (ListBox) event.getSource();
126
				int index = nbElements.getSelectedIndex();
127
				setPas(Integer.parseInt(nbElements.getValue(index)));
128
			}
129
 
130
		});
131
	}
132
 
133
	public void go(HasWidgets container) {
134
		initNbElements();
135
		creerLiens();
136
		container.add(vue);
137
 
138
	}
139
 
140
	public void handleEvents() {
141
		Iterator<Button> iterator = liens.iterator();
142
		while (iterator.hasNext()) {
143
			Button bouton = iterator.next();
144
 
145
			bouton.addClickHandler(new ClickHandler() {
146
 
147
				@Override
148
				public void onClick(ClickEvent event) {
149
					Button bouton = (Button) event.getSource();
264 gduche 150
					pageCourante = Integer.parseInt(bouton.getText());
263 gduche 151
					int debut = Integer.parseInt(bouton.getText()) * pas;
152
					int fin = (debut + pas);
137 gduche 153
					setBoutonActif();
120 gduche 154
					changerPage(debut, fin);
155
				}
156
			});
157
 
158
		}
159
	}
160
 
161
	public void pageSuivante() {
264 gduche 162
		if (pageCourante < nbPage - 1) {
163
			pageCourante++;
164
			int debut = pageCourante * pas;
263 gduche 165
			int fin = debut + pas;
120 gduche 166
			changerPage(debut, fin);
167
		}
137 gduche 168
		setBoutonActif();
120 gduche 169
	}
170
 
171
	public void pagePrecedente() {
172
 
264 gduche 173
		if (pageCourante > 0) {
174
			pageCourante--;
175
			int debut = pageCourante * pas;
263 gduche 176
			int fin = debut + pas;
120 gduche 177
			changerPage(debut, fin);
178
		}
137 gduche 179
		setBoutonActif();
120 gduche 180
	}
264 gduche 181
 
182
	protected int getPageCourante() {
183
		return this.pageCourante;
184
	}
120 gduche 185
 
186
	public abstract void changerPage(int debut, int fin);
263 gduche 187
	public abstract void actualiserPasCache(int pas);
120 gduche 188
 
189
}