Rev 137 | Rev 210 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.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 {
// Singleton
private 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() {
@Override
public void onClick(ClickEvent event) {
pagePrecedente();
}
});
liens.add(precedent);
vue.getZoneLiens().add(precedent);
// TODO : gérer le nombre de pages excessives
for (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() {
@Override
public 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() {
@Override
public 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() {
@Override
public 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;
}
}