3,161 → 3,160 |
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.Window; |
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; |
|
/** |
* @author gregoire |
* Pagination GENERIQUE qui permet d'afficher un nombre donné d'éléments (pas) |
* La méthode changerPage est abstraite et doit être définie lors de l'instanciation |
* de la classe pagination pour permettre d'afficher la suite des éléments |
* La méthode actualiserPasCache est abstraite car le pas est différent en |
* fonction de la page où l'on se trouve |
* */ |
public abstract class PaginationPresenteur { |
|
private final PaginationVue vue; |
private int nbPage; |
private int pageCourante = 1; |
private int nbElementsTotal = 0; |
private int nbPage; |
private Vector<Button> liens; |
private int pas = 10; |
private int pageCourante = 1; |
|
public PaginationPresenteur(int nbElements, int pas) { |
this.nbElementsTotal = nbElements; |
actualiserNbPage(); |
/** |
* Constructeur de l'application |
* @param nbElementsTotal : le nombre total des éléments à paginer |
* @param pas : le nombre d'éléments à afficher par page |
* */ |
public PaginationPresenteur(int nbElementsTotal, int pas) { |
this.nbElementsTotal = nbElementsTotal; |
changerPas(pas); |
vue = new PaginationVue(); |
setPas(pas); |
} |
|
private void setBoutonActif() { |
Iterator<Button> it = liens.iterator(); |
while (it.hasNext()) { |
Button boutonCourant = it.next(); |
if (boutonCourant.getText().equals(String.valueOf(pageCourante))) { |
boutonCourant.setStyleName("actif"); |
} else { |
boutonCourant.setStyleName("inactif"); |
} |
} |
} |
|
|
/** Met à jour le nombre de page en fonction du pas */ |
private void actualiserNbPage() { |
Double a = Math.ceil((double) nbElementsTotal / (double) pas); |
this.nbPage = a.intValue(); |
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas); |
this.nbPage = nombrePages.intValue(); |
} |
|
public void setPas(int pas) { |
/** Changer le pas de la pagination |
* @param pas : le nombre d'éléments à afficher par page */ |
public void changerPas(int pas) { |
actualiserNbPage(); |
creerLiens(); |
changerPage(pas * pageCourante, pas * (pageCourante + 1)); |
|
actualiserPasCache(pas); |
} |
|
public void creerLiens() { |
HorizontalPanel zoneLiens = vue.getZoneLiens(); |
|
/** Methode Go du modèle MVP |
* @param container : la vue ou éxécuter l'affichage */ |
public void go(HasWidgets container) { |
actualiserLiens(); |
container.add(vue); |
} |
|
/** Actualiser les liens pour n'afficher 5 avant et 5 après |
* */ |
public void actualiserLiens() { |
HorizontalPanel zoneLiens = vue.zoneLiens; |
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); |
|
|
|
int pageDebut = pagesAvant(); |
int pageFin = pagesApres(); |
|
for (int i = pageDebut; i < pageFin; i++) { |
Button bouton = new Button(String.valueOf(i)); |
zoneLiens.add(bouton); |
} |
setBoutonActif(); |
gererEvenements(); |
} |
|
private int pagesAvant() { |
int pageDebut = pageCourante - 5; |
if (pageDebut < 1) { |
pageDebut = 1; |
} |
|
int pageFin = pageDebut + 5; |
return pageDebut; |
} |
|
private int pagesApres() { |
int pageFin = pageCourante + 5; |
if (pageFin > nbPage) { |
pageFin = nbPage; |
} |
|
for (int i = pageDebut; i < pageFin; 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(); |
return pageFin; |
} |
|
public void initNbElements() { |
|
ListBox nbElements = vue.getNbElements(); |
for (int i = 0; i < 20; i += 5) { |
int valeur = i; |
if (i == 0) { |
valeur = 1; |
|
private void setBoutonActif() { |
int nbLiens = vue.zoneLiens.getWidgetCount(); |
for (int i=0; i < nbLiens; i++) { |
Button boutonCourant = (Button) vue.zoneLiens.getWidget(i); |
if (boutonCourant.getText().equals(String.valueOf(pageCourante))) { |
boutonCourant.setStyleName("actif"); |
} else { |
boutonCourant.setStyleName("inactif"); |
} |
|
nbElements.addItem(String.valueOf(valeur)); |
} |
nbElements.setSelectedIndex(pas / 5); |
nbElements.addChangeHandler(new ChangeHandler() { |
} |
|
/** Gérer les évènements sur les boutons |
* */ |
public void gererEvenements() { |
vue.selecteurPas.addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
ListBox nbElements = (ListBox) event.getSource(); |
int index = nbElements.getSelectedIndex(); |
setPas(Integer.parseInt(nbElements.getValue(index))); |
changerPas(Integer.parseInt(nbElements.getValue(index))); |
} |
|
}); |
} |
|
vue.boutonPrecedent.addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
pagePrecedente(); |
} |
}); |
|
public void go(HasWidgets container) { |
initNbElements(); |
creerLiens(); |
container.add(vue); |
vue.boutonSuivant.addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
pageSuivante(); |
} |
}); |
|
|
int nbLiens = vue.zoneLiens.getWidgetCount(); |
for (int i=0; i < nbLiens; i++) { |
Button boutonCourant = (Button) vue.zoneLiens.getWidget(i); |
|
} |
boutonCourant.addClickHandler(new ClickHandler() { |
|
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(); |
pageCourante = Integer.parseInt(bouton.getText()); |
int debut = Integer.parseInt(bouton.getText()) * pas; |
Button boutonCourant = (Button) event.getSource(); |
pageCourante = Integer.parseInt(boutonCourant.getText()); |
int debut = Integer.parseInt(boutonCourant.getText()) * pas; |
int fin = (debut + pas); |
setBoutonActif(); |
changerPage(debut, fin); |
actualiserLiens(); |
} |
}); |
|
} |
} |
|
/** Retourne la limite supèrieur du nombre de pages à afficher |
* */ |
public void pageSuivante() { |
if (pageCourante < nbPage - 1) { |
pageCourante++; |
164,19 → 163,20 |
int debut = pageCourante * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
actualiserLiens(); |
} |
setBoutonActif(); |
} |
|
|
/** Retourne la limite infèrieure du nombre de pages à afficher |
* */ |
public void pagePrecedente() { |
|
if (pageCourante > 0) { |
if (pageCourante > 1) { |
pageCourante--; |
int debut = pageCourante * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
actualiserLiens(); |
} |
setBoutonActif(); |
} |
|
protected int getPageCourante() { |