Rev 210 | Rev 263 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.composants.pagination;import java.util.Iterator;import java.util.Vector;import org.tela_botanica.del.client.cache.CacheClient;import com.google.gwt.event.dom.client.ChangeEvent;import com.google.gwt.event.dom.client.ChangeHandler;import com.google.gwt.event.dom.client.ClickEvent;import com.google.gwt.event.dom.client.ClickHandler;import com.google.gwt.user.client.ui.Button;import com.google.gwt.user.client.ui.HasWidgets;import com.google.gwt.user.client.ui.HorizontalPanel;import com.google.gwt.user.client.ui.ListBox;public abstract class PaginationPresenteur {// Singletonprivate static PaginationPresenteur presenteur;private final PaginationVue vue;private int nbElementsTotal = 0;private int nbPage;private Vector<Button> liens;public PaginationPresenteur(int nbElements) {presenteur = this;this.nbElementsTotal = nbElements;actualiserNbPage();vue = new PaginationVue();setPas(CacheClient.getInstance().getPasPageRechercheImage());}private void setBoutonActif() {Iterator<Button> it = liens.iterator();while (it.hasNext()) {Button boutonCourant = it.next();if (boutonCourant.getText().equals(String.valueOf(CacheClient.getInstance().getNumPageRechercheImage()))) {boutonCourant.setStyleName("actif");} else {boutonCourant.setStyleName("inactif");}}}private void actualiserNbPage() {Double a = Math.ceil((double) nbElementsTotal / (double) CacheClient.getInstance().getPasPageRechercheImage());this.nbPage = a.intValue();}public void setPas(int pas) {CacheClient.getInstance().setPasPageRechercheImage(pas);actualiserNbPage();creerLiens();changerPage(CacheClient.getInstance().getPasPageRechercheImage() * CacheClient.getInstance().getNumPageRechercheImage(), CacheClient.getInstance().getPasPageRechercheImage() * (CacheClient.getInstance().getNumPageRechercheImage() + 1));}public void creerLiens() {HorizontalPanel zoneLiens = vue.getZoneLiens();zoneLiens.clear();liens = new Vector<Button>();Button precedent = new Button();precedent.setText("<");precedent.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {pagePrecedente();}});liens.add(precedent);vue.getZoneLiens().add(precedent);// TODO : gérer le nombre de pages excessivesfor (int i = 0; i < nbPage; i++) {Button bouton = new Button();bouton.setText(String.valueOf(i));liens.add(bouton);zoneLiens.add(bouton);}Button suivant = new Button();suivant.setText(">");suivant.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {pageSuivante();}});liens.add(suivant);vue.getZoneLiens().add(suivant);handleEvents();setBoutonActif();}public void initNbElements() {ListBox nbElements = vue.getNbElements();for (int i = 0; i < 20; i += 5) {int valeur = i;if (i == 0) {valeur = 1;}nbElements.addItem(String.valueOf(valeur));}nbElements.setSelectedIndex(CacheClient.getInstance().getPasPageRechercheImage() / 5);nbElements.addChangeHandler(new ChangeHandler() {@Overridepublic void onChange(ChangeEvent event) {ListBox nbElements = (ListBox) event.getSource();int index = nbElements.getSelectedIndex();setPas(Integer.parseInt(nbElements.getValue(index)));}});}public void go(HasWidgets container) {initNbElements();creerLiens();container.add(vue);}public void handleEvents() {Iterator<Button> iterator = liens.iterator();while (iterator.hasNext()) {Button bouton = iterator.next();bouton.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {Button bouton = (Button) event.getSource();CacheClient.getInstance().setNumPageRechercheImage(Integer.parseInt(bouton.getText()));int debut = Integer.parseInt(bouton.getText()) * CacheClient.getInstance().getPasPageRechercheImage();int fin = (debut + CacheClient.getInstance().getPasPageRechercheImage());setBoutonActif();changerPage(debut, fin);}});}}public void pageSuivante() {if (CacheClient.getInstance().getNumPageRechercheImage() < nbPage - 1) {CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() + 1);int debut = CacheClient.getInstance().getNumPageRechercheImage() * CacheClient.getInstance().getPasPageRechercheImage();int fin = debut + CacheClient.getInstance().getPasPageRechercheImage();changerPage(debut, fin);}setBoutonActif();}public void pagePrecedente() {if (CacheClient.getInstance().getNumPageRechercheImage() > 0) {CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() - 1);int debut = CacheClient.getInstance().getNumPageRechercheImage() * CacheClient.getInstance().getPasPageRechercheImage();int fin = debut + CacheClient.getInstance().getPasPageRechercheImage();changerPage(debut, fin);}setBoutonActif();}public abstract void changerPage(int debut, int fin);public PaginationPresenteur getInstance() {return presenteur;}}