Rev 269 | Rev 358 | 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 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 pas = 10;/*** 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();}/** Met à jour le nombre de page en fonction du pas */private void actualiserNbPage() {Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);this.nbPage = nombrePages.intValue();}/** Changer le pas de la pagination* @param pas : le nombre d'éléments à afficher par page */public void changerPas(int pas) {actualiserNbPage();changerPage(pas * pageCourante, pas * (pageCourante + 1));actualiserPasCache(pas);}/** 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();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;vue.afficherBoutonDebut();if (pageDebut < 1) {pageDebut = 1;//Masquer le bouton de débutvue.masquerBoutonDebut();}return pageDebut;}private int pagesApres() {int pageFin = pageCourante + 5;vue.afficherBoutonSuivant();if (pageFin > nbPage) {pageFin = nbPage;vue.masquerBoutonSuivant();}return pageFin;}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");}}}/** Gérer les évènements sur les boutons* */public void gererEvenements() {vue.selecteurPas.addChangeHandler(new ChangeHandler() {@Overridepublic void onChange(ChangeEvent event) {ListBox nbElements = (ListBox) event.getSource();int index = nbElements.getSelectedIndex();changerPas(Integer.parseInt(nbElements.getValue(index)));}});vue.boutonPrecedent.addClickHandler(new ClickHandler() {@Overridepublic void onClick(ClickEvent event) {pagePrecedente();}});vue.boutonSuivant.addClickHandler(new ClickHandler() {@Overridepublic 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() {@Overridepublic void onClick(ClickEvent event) {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++;int debut = pageCourante * pas;int fin = debut + pas;changerPage(debut, fin);actualiserLiens();}}/** Retourne la limite infèrieure du nombre de pages à afficher* */public void pagePrecedente() {if (pageCourante > 1) {pageCourante--;int debut = pageCourante * pas;int fin = debut + pas;changerPage(debut, fin);actualiserLiens();}}protected int getPageCourante() {return this.pageCourante;}public abstract void changerPage(int debut, int fin);public abstract void actualiserPasCache(int pas);}