Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 444 → Rev 445

/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationPresenteur.java
1,5 → 1,11
package org.tela_botanica.del.client.composants.pagination;
 
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel;
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage;
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas;
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage;
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas;
 
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
21,7 → 27,6
public abstract class PaginationPresenteur {
 
public interface Vue extends IsWidget {
 
public HasWidgets getZoneLiens();
 
public int getNbWidgetsZoneLiens();
58,11 → 63,13
 
public int getPasSelectionne();
 
public void changerSelecteurPas(int index);
public void afficherPas(int pas);
 
public void mettreEnValeurPageActive(int pageActive);
}
 
private Vue vue;
private int nbPage;
private int nbPage = 1;
private int pageCourante = 1;
private int nbElementsTotal = 0;
private int pas = 10;
75,10 → 82,11
* @param pas
* : le nombre d'éléments à afficher par page
* */
public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas) {
public PaginationPresenteur(Vue vue, int nbElementsTotal, int pas, int pageCourante) {
this.nbElementsTotal = nbElementsTotal;
this.vue = vue;
changerPas(this.pas);
this.pas = pas;
this.pageCourante = pageCourante;
}
 
/**
88,140 → 96,22
* : la vue ou éxécuter l'affichage
*/
public void go(HasWidgets container) {
gererEvenementsBoutonsStatiques();
actualiserLiens();
container.add(vue.asWidget());
gererEvenements();
actualiserLiensPagesPagination();
actualiserPas();
}
 
/** Met à jour le nombre de page en fonction du pas */
public void actualiserNbPage() {
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
this.nbPage = nombrePages.intValue();
}
 
public void setNbPages(int nbPages) {
this.nbPage = nbPages;
}
 
public int getNbPages() {
return nbPage;
}
 
public Vue getVue() {
return vue;
}
 
/**
* Changer le pas de la pagination
*
* @param pas
* : le nombre d'éléments à afficher par page
*/
public void changerPas(int pas) {
int ancienPas = this.pas;
setPas(pas);
actualiserNbPage();
gererDecalagePageCourante(ancienPas, pas);
changerPage(pas * (pageCourante - 1), pas * pageCourante);
actualiserLiens();
actualiserPasCache(pas);
}
 
public void setPas(int pas) {
this.pas = pas;
switch (pas) {
case 5:
vue.changerSelecteurPas(0);
break;
case 10:
vue.changerSelecteurPas(1);
break;
case 15:
vue.changerSelecteurPas(2);
break;
case 20:
vue.changerSelecteurPas(3);
break;
default:
break;
}
}
 
private void gererDecalagePageCourante(int ancienPas, int nouveauPas) {
if (ancienPas != nouveauPas) {
double rapportPas = (double) ancienPas / (double) nouveauPas;
pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas));
}
}
 
/**
* Actualiser les liens pour n'afficher 5 avant et 5 après
* */
public void actualiserLiens() {
 
HasWidgets zoneLiens = vue.getZoneLiens();
zoneLiens.clear();
 
int pageDebut = pagesAvant();
int pageFin = pagesApres();
 
for (int i = pageDebut; i < pageFin; i++) {
vue.ajouterBoutonZoneLiens(i + "");
}
setBoutonActif();
gererEvenementsBoutonsDynamiques();
}
 
private int pagesAvant() {
int pageDebut = pageCourante - 5;
if (pageDebut < 1) {
pageDebut = 1;
}
if (pageCourante == 1) {
vue.masquerBoutonPrecedent();
} else {
vue.afficherBoutonPrecedent();
}
return pageDebut;
}
 
private int pagesApres() {
int pageFin = pageCourante + 5;
vue.afficherBoutonSuivant();
if (pageFin > nbPage) {
pageFin = nbPage;
}
if (pageCourante == nbPage - 1) {
vue.masquerBoutonSuivant();
} else {
vue.afficherBoutonSuivant();
}
 
return pageFin;
}
 
private void setBoutonActif() {
int nbLiens = vue.getNbWidgetsZoneLiens();
for (int i = 0; i < nbLiens; i++) {
HasText boutonCourant = vue.getWidgetZoneLiensAsText(i);
if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
vue.changerStyleBoutonZoneLiens(i, "actif");
} else {
vue.changerStyleBoutonZoneLiens(i, "inactif");
}
}
}
 
/**
* Gérer les évènements sur les boutons statiques (précédent, suivant et
* selecteur pas)
* */
public void gererEvenementsBoutonsStatiques() {
protected void gererEvenements() {
vue.getSelecteurPas().addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
changerPas(vue.getPasSelectionne());
synchroniser();
chargerElements(0, vue.getPasSelectionne());
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(vue.getPasSelectionne()));
}
});
 
228,7 → 118,7
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
pagePrecedente();
allerALaPagePrecedente();
}
});
 
235,7 → 125,7
vue.getBoutonSuivant().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
pageSuivante();
allerALapageSuivante();
}
});
 
242,7 → 132,7
vue.getBoutonPremierePage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
premierePage();
afficherLaPremierePage();
}
});
 
249,9 → 139,34
vue.getBoutonDernierePage().addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
dernierePage();
afficherlaDernierePage();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() {
 
@Override
public void onChangementPage(EvenementChangementPage event) {
pageCourante = event.getPageAAfficher();
mettreEnValeurPageCourante();
}
});
 
BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() {
 
@Override
public void onChangementPas(EvenementChangementPas event) {
 
// remet la page a zero lors du changement de pas
pageCourante = 1;
 
// modifie le pas et les liens en fonction
pas = event.getPas();
actualiserPas();
actualiserLiensPagesPagination();
 
}
});
}
 
/**
258,7 → 173,7
* Gérer les évènements sur les boutons dynamiques (qui sont recréés à
* chaque fois)
* */
public void gererEvenementsBoutonsDynamiques() {
private void gererEvenementsBoutonsDynamiques() {
int nbLiens = vue.getNbWidgetsZoneLiens();
for (int i = 0; i < nbLiens; i++) {
HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i);
266,60 → 181,37
@Override
public void onClick(ClickEvent event) {
HasText boutonCourant = (HasText) event.getSource();
pageCourante = Integer.parseInt(boutonCourant.getText());
int debut = (Integer.parseInt(boutonCourant.getText()) - 1) * pas;
int fin = (debut + pas);
setBoutonActif();
changerPage(debut, fin);
actualiserLiens();
synchroniser();
int pageAAfficher = Integer.parseInt(boutonCourant.getText());
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
}
});
}
}
 
public void premierePage() {
if (pageCourante > 1) {
pageCourante = 1;
int debut = (pageCourante - 1) * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
synchroniser();
}
public void actualiserPas() {
actualiserPasCache(pas);
vue.afficherPas(pas);
}
 
public void dernierePage() {
if (pageCourante < nbPage - 1) {
pageCourante = nbPage - 1;
int debut = (pageCourante - 1) * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
synchroniser();
}
}
/**
* Actualiser les liens pour n'afficher 5 avant et 5 après
* */
public void actualiserLiensPagesPagination() {
 
public void pageSuivante() {
if (pageCourante < nbPage - 1) {
pageCourante++;
int debut = (pageCourante - 1) * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
synchroniser();
}
}
this.nbPage = calculerNbPage();
 
public void pagePrecedente() {
if (pageCourante > 1) {
pageCourante--;
int debut = (pageCourante - 1) * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
synchroniser();
HasWidgets zoneLiens = vue.getZoneLiens();
zoneLiens.clear();
 
int pageDebut = 1;
int pageFin = nbPage;
 
for (int i = pageDebut; i < pageFin; i++) {
vue.ajouterBoutonZoneLiens(i + "");
}
gererEvenementsBoutonsDynamiques();
mettreEnValeurPageCourante();
}
 
public int getPageCourante() {
334,15 → 226,63
this.pageCourante = pageCourante;
}
 
public abstract void changerPage(int debut, int fin);
public void allerALaPagePrecedente() {
if (pageCourante > 1) {
int pageAAfficher = pageCourante - 1;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
}
 
}
 
public void allerALapageSuivante() {
if (pageCourante < nbPage - 1) {
int pageAAfficher = pageCourante + 1;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
}
}
 
public void afficherLaPremierePage() {
int pageAAfficher = 1;
chargerElements(0, pas);
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
}
 
public void afficherlaDernierePage() {
int pageAAfficher = nbPage - 1;
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher));
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher));
}
 
/** calcule le nombre de page en fonction du pas */
private int calculerNbPage() {
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
return nombrePages.intValue();
}
 
public void mettreEnValeurPageCourante() {
getVue().mettreEnValeurPageActive(getPageCourante());
}
 
public void setNbPages(int nbPages) {
this.nbPage = nbPages;
}
 
public int getNbPages() {
return nbPage;
}
 
public Vue getVue() {
return vue;
}
 
public abstract void chargerElements(int debut, int fin);
 
public abstract void actualiserPasCache(int pas);
 
public void synchroniser() {
setPas(getPas());
setPageCourante(getPageCourante());
setNbPages(getNbPages());
actualiserLiens();
public void setPas(int pas) {
this.pas = pas;
}
 
}