Subversion Repositories eFlore/Applications.del

Rev

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

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