Subversion Repositories eFlore/Applications.del

Rev

Details | Last modification | View Log | RSS feed

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