Subversion Repositories eFlore/Applications.del

Rev

Rev 137 | Go to most recent revision | 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
 
29
		presenteur = this;
30
		this.nbElementsTotal = nbElements;
31
		actualiserNbPage();
32
		vue = new PaginationVue();
33
		setPas(10);
34
	}
35
 
36
	private void actualiserNbPage() {
37
		Double a = Math.ceil((double) nbElementsTotal / (double) pas);
38
		this.nbPage = a.intValue();
39
	}
40
 
41
	public void setPageActuelle(int pageActuelle) {
42
		this.pageActuelle = pageActuelle;
43
	}
44
 
45
	public void setPas(int pas) {
46
		this.pas = pas;
47
		actualiserNbPage();
48
		creerLiens();
49
		changerPage(pas * pageActuelle, pas * (pageActuelle + 1));
50
	}
51
 
52
	public void creerLiens() {
53
		HorizontalPanel zoneLiens = vue.getZoneLiens();
54
		zoneLiens.clear();
55
		liens = new Vector<Button>();
56
		Button precedent = new Button();
57
		precedent.setText("<");
58
		precedent.addClickHandler(new ClickHandler() {
59
 
60
			@Override
61
			public void onClick(ClickEvent event) {
62
				pagePrecedente();
63
			}
64
		});
65
 
66
		liens.add(precedent);
67
		vue.getZoneLiens().add(precedent);
68
 
69
		for (int i = 0; i < nbPage; i++) {
70
			Button bouton = new Button();
71
			bouton.setText(String.valueOf(i));
72
			liens.add(bouton);
73
			zoneLiens.add(bouton);
74
		}
75
 
76
		Button suivant = new Button();
77
		suivant.setText(">");
78
		suivant.addClickHandler(new ClickHandler() {
79
 
80
			@Override
81
			public void onClick(ClickEvent event) {
82
				pageSuivante();
83
			}
84
		});
85
 
86
		liens.add(suivant);
87
		vue.getZoneLiens().add(suivant);
88
 
89
		handleEvents();
90
	}
91
 
92
	public void initNbElements() {
93
 
94
		ListBox nbElements = vue.getNbElements();
95
		for (int i = 0; i < 20; i += 5) {
96
			int valeur = i;
97
			if (i == 0) {
98
				valeur = 1;
99
			}
100
 
101
			nbElements.addItem(String.valueOf(valeur));
102
		}
103
		nbElements.setSelectedIndex(pas / 5);
104
		nbElements.addChangeHandler(new ChangeHandler() {
105
 
106
			@Override
107
			public void onChange(ChangeEvent event) {
108
				ListBox nbElements = (ListBox) event.getSource();
109
				int index = nbElements.getSelectedIndex();
110
				setPas(Integer.parseInt(nbElements.getValue(index)));
111
			}
112
 
113
		});
114
	}
115
 
116
	public void go(HasWidgets container) {
117
		initNbElements();
118
		creerLiens();
119
		container.add(vue);
120
 
121
	}
122
 
123
	public void handleEvents() {
124
		Iterator<Button> iterator = liens.iterator();
125
		while (iterator.hasNext()) {
126
			Button bouton = iterator.next();
127
 
128
			bouton.addClickHandler(new ClickHandler() {
129
 
130
				@Override
131
				public void onClick(ClickEvent event) {
132
					Button bouton = (Button) event.getSource();
133
					pageActuelle = Integer.parseInt(bouton.getText());
134
					int debut = Integer.parseInt(bouton.getText()) * pas;
135
					int fin = (debut + pas);
136
					changerPage(debut, fin);
137
 
138
				}
139
			});
140
 
141
		}
142
	}
143
 
144
	public void pageSuivante() {
145
		if (pageActuelle < nbPage - 1) {
146
			pageActuelle++;
147
			int debut = pageActuelle * pas;
148
			int fin = debut + pas;
149
			changerPage(debut, fin);
150
 
151
		}
152
	}
153
 
154
	public void pagePrecedente() {
155
 
156
		if (pageActuelle > 0) {
157
			pageActuelle--;
158
			int debut = pageActuelle * pas;
159
			int fin = debut + pas;
160
			changerPage(debut, fin);
161
 
162
		}
163
	}
164
 
165
	public abstract void changerPage(int debut, int fin);
166
 
167
	public PaginationPresenteur getInstance() {
168
		return presenteur;
169
	}
170
}