4,12 → 4,12 |
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.event.dom.client.HasChangeHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.google.gwt.user.client.ui.ListBox; |
|
import com.google.gwt.user.client.ui.IsWidget; |
/** |
* @author gregoire Pagination GENERIQUE qui permet d'afficher un nombre donné |
* d'éléments (pas) La méthode changerPage est abstraite et doit être |
20,7 → 20,27 |
* */ |
public abstract class PaginationPresenteur { |
|
private final PaginationVue vue; |
public interface Vue extends IsWidget { |
|
public HasWidgets getZoneLiens(); |
public int getNbWidgetsZoneLiens(); |
public HasClickHandlers getWidgetZoneLiensHasClickHandlers(int index); |
public HasText getWidgetZoneLiensAsText(int index); |
public void changerStyleBoutonZoneLiens(int index, String style); |
public void ajouterBoutonZoneLiens(String label); |
public HasClickHandlers getBoutonSuivant(); |
public HasClickHandlers getBoutonPrecedent(); |
public HasClickHandlers getBoutonPremierePage(); |
public HasClickHandlers getBoutonDernierePage(); |
public void masquerBoutonDebut(); |
public void afficherBoutonDebut(); |
public void masquerBoutonSuivant(); |
public void afficherBoutonSuivant(); |
public HasChangeHandlers getSelecteurPas(); |
public int getPasSelectionne(); |
public void changerSelecteurPas(int index); |
} |
private Vue vue; |
private int nbPage; |
private int pageCourante = 1; |
private int nbElementsTotal = 0; |
34,9 → 54,9 |
* @param pas |
* : le nombre d'éléments à afficher par page |
* */ |
public PaginationPresenteur(int nbElementsTotal, int pas) { |
public PaginationPresenteur(PaginationPresenteur.Vue vue, int nbElementsTotal, int pas) { |
this.nbElementsTotal = nbElementsTotal; |
vue = new PaginationVue(); |
this.vue = vue; |
changerPas(this.pas); |
} |
|
49,14 → 69,22 |
public void go(HasWidgets container) { |
gererEvenementsBoutonsStatiques(); |
actualiserLiens(); |
container.add(vue); |
container.add(vue.asWidget()); |
} |
|
/** Met à jour le nombre de page en fonction du pas */ |
private void actualiserNbPage() { |
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; |
} |
|
/** |
* Changer le pas de la pagination |
66,28 → 94,32 |
*/ |
public void changerPas(int pas) { |
int ancienPas = this.pas; |
this.pas = pas; |
setPas(pas); |
actualiserNbPage(); |
gererDecalagePageCourante(ancienPas, pas); |
changerPage(pas * (pageCourante -1), pas * pageCourante); |
actualiserLiens(); |
changerPage(pas * (pageCourante -1), pas * pageCourante); |
actualiserPasCache(pas); |
} |
|
public void setPas(int pas) { |
this.pas = pas; |
switch (pas) { |
case 5: |
vue.getSelecteurPas().setSelectedIndex(0); |
vue.changerSelecteurPas(0); |
break; |
case 10: |
vue.getSelecteurPas().setSelectedIndex(1); |
vue.changerSelecteurPas(1); |
break; |
case 15: |
vue.getSelecteurPas().setSelectedIndex(2); |
vue.changerSelecteurPas(2); |
break; |
case 20: |
vue.getSelecteurPas().setSelectedIndex(3); |
vue.changerSelecteurPas(3); |
break; |
default: |
break; |
} |
actualiserPasCache(pas); |
} |
} |
|
private void gererDecalagePageCourante(int ancienPas, int nouveauPas) { |
94,7 → 126,6 |
if(ancienPas != nouveauPas) { |
double rapportPas = (double)ancienPas/(double)nouveauPas; |
pageCourante = (int)(Math.ceil((double)pageCourante*(double)rapportPas)); |
synchroniser(); |
} |
} |
|
103,7 → 134,7 |
* */ |
public void actualiserLiens() { |
|
HorizontalPanel zoneLiens = vue.zoneLiens; |
HasWidgets zoneLiens = vue.getZoneLiens(); |
zoneLiens.clear(); |
|
int pageDebut = pagesAvant(); |
110,8 → 141,7 |
int pageFin = pagesApres(); |
|
for (int i = pageDebut; i < pageFin; i++) { |
Button bouton = new Button(i+""); |
zoneLiens.add(bouton); |
vue.ajouterBoutonZoneLiens(i+""); |
} |
setBoutonActif(); |
gererEvenementsBoutonsDynamiques(); |
139,13 → 169,13 |
} |
|
private void setBoutonActif() { |
int nbLiens = vue.zoneLiens.getWidgetCount(); |
int nbLiens = vue.getNbWidgetsZoneLiens(); |
for (int i = 0; i < nbLiens; i++) { |
Button boutonCourant = (Button) vue.zoneLiens.getWidget(i); |
HasText boutonCourant = vue.getWidgetZoneLiensAsText(i); |
if (boutonCourant.getText().equals(String.valueOf(pageCourante))) { |
boutonCourant.setStyleName("actif"); |
vue.changerStyleBoutonZoneLiens(i,"actif"); |
} else { |
boutonCourant.setStyleName("inactif"); |
vue.changerStyleBoutonZoneLiens(i,"inactif"); |
} |
} |
} |
154,18 → 184,16 |
* Gérer les évènements sur les boutons statiques (précédent, suivant et selecteur pas) |
* */ |
public void gererEvenementsBoutonsStatiques() { |
vue.selecteurPas.addChangeHandler(new ChangeHandler() { |
vue.getSelecteurPas().addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
ListBox nbElements = (ListBox) event.getSource(); |
int index = nbElements.getSelectedIndex(); |
changerPas(Integer.parseInt(nbElements.getValue(index))); |
changerPas(vue.getPasSelectionne()); |
synchroniser(); |
} |
|
}); |
|
vue.boutonPrecedent.addClickHandler(new ClickHandler() { |
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
pagePrecedente(); |
172,12 → 200,26 |
} |
}); |
|
vue.boutonSuivant.addClickHandler(new ClickHandler() { |
vue.getBoutonSuivant().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
pageSuivante(); |
} |
}); |
|
vue.getBoutonPremierePage().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
premierePage(); |
} |
}); |
|
vue.getBoutonDernierePage().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
dernierePage(); |
} |
}); |
} |
|
/** |
184,15 → 226,13 |
* Gérer les évènements sur les boutons dynamiques (qui sont recréés à chaque fois) |
* */ |
public void gererEvenementsBoutonsDynamiques() { |
int nbLiens = vue.zoneLiens.getWidgetCount(); |
int nbLiens = vue.getNbWidgetsZoneLiens(); |
for (int i = 0; i < nbLiens; i++) { |
Button boutonCourant = (Button) vue.zoneLiens.getWidget(i); |
|
HasClickHandlers boutonCourant = vue.getWidgetZoneLiensHasClickHandlers(i); |
boutonCourant.addClickHandler(new ClickHandler() { |
|
@Override |
public void onClick(ClickEvent event) { |
Button boutonCourant = (Button) event.getSource(); |
HasText boutonCourant = (HasText)event.getSource(); |
pageCourante = Integer.parseInt(boutonCourant.getText()); |
int debut = (Integer.parseInt(boutonCourant.getText()) - 1) * pas; |
int fin = (debut + pas); |
204,10 → 244,29 |
}); |
} |
} |
|
public void premierePage() { |
if (pageCourante > 1) { |
pageCourante = 1; |
int debut = (pageCourante -1) * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
actualiserLiens(); |
synchroniser(); |
} |
} |
|
public void dernierePage() { |
if (pageCourante < nbPage - 1) { |
pageCourante = nbPage - 1; |
int debut = (pageCourante -1) * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
actualiserLiens(); |
synchroniser(); |
} |
} |
|
/** |
* Retourne la limite supèrieure du nombre de pages à afficher |
* */ |
public void pageSuivante() { |
if (pageCourante < nbPage - 1) { |
pageCourante++; |
219,9 → 278,6 |
} |
} |
|
/** |
* Retourne la limite infèrieure du nombre de pages à afficher |
* */ |
public void pagePrecedente() { |
if (pageCourante > 1) { |
pageCourante--; |
233,11 → 289,11 |
} |
} |
|
protected int getPageCourante() { |
public int getPageCourante() { |
return this.pageCourante; |
} |
|
protected int getPas() { |
public int getPas() { |
return this.pas; |
} |
|