Subversion Repositories eFlore/Applications.del

Rev

Rev 256 | Rev 264 | 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;
120 gduche 24
 
263 gduche 25
	public PaginationPresenteur(int nbElements, int pas) {
120 gduche 26
		this.nbElementsTotal = nbElements;
27
		actualiserNbPage();
28
		vue = new PaginationVue();
263 gduche 29
		//FIXME : doit être dans la page de rechercheImage
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();
147 benjamin 37
			if (boutonCourant.getText().equals(String.valueOf(CacheClient.getInstance().getNumPageRechercheImage()))) {
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();
263 gduche 53
		changerPage(pas * CacheClient.getInstance().getNumPageRechercheImage(), pas * (CacheClient.getInstance().getNumPageRechercheImage() + 1));
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
 
263 gduche 75
		int pageDebut = CacheClient.getInstance().getNumPageRechercheImage() - 5;
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();
147 benjamin 150
					CacheClient.getInstance().setNumPageRechercheImage(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
 
162
	public void pageSuivante() {
147 benjamin 163
		if (CacheClient.getInstance().getNumPageRechercheImage() < nbPage - 1) {
164
			CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() + 1);
263 gduche 165
			int debut = CacheClient.getInstance().getNumPageRechercheImage() * pas;
166
			int fin = debut + pas;
120 gduche 167
			changerPage(debut, fin);
168
		}
137 gduche 169
		setBoutonActif();
120 gduche 170
	}
171
 
172
	public void pagePrecedente() {
173
 
147 benjamin 174
		if (CacheClient.getInstance().getNumPageRechercheImage() > 0) {
175
			CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() - 1);
263 gduche 176
			int debut = CacheClient.getInstance().getNumPageRechercheImage() * pas;
177
			int fin = debut + pas;
120 gduche 178
			changerPage(debut, fin);
179
		}
137 gduche 180
		setBoutonActif();
120 gduche 181
	}
182
 
183
	public abstract void changerPage(int debut, int fin);
263 gduche 184
	public abstract void actualiserPasCache(int pas);
120 gduche 185
 
186
}