Rev 335 | Rev 382 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.del.client.composants.pagination;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;/*** @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;vue = new PaginationVue();changerPas(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);}/** 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) {this.pas = pas;actualiserNbPage();changerPage(pas * pageCourante, pas * (pageCourante + 1));switch (pas) {case 5:vue.getSelecteurPas().setSelectedIndex(0);break;case 10:vue.getSelecteurPas().setSelectedIndex(1);break;case 15:vue.getSelecteurPas().setSelectedIndex(2);break;case 20:vue.getSelecteurPas().setSelectedIndex(3);break;default:break;}actualiserPasCache(pas);}/*** 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);}