New file |
0,0 → 1,170 |
package org.tela_botanica.del.client.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.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; |
|
public abstract class PaginationPresenteur { |
|
// Singleton |
private static PaginationPresenteur presenteur; |
|
private final PaginationVue vue; |
private int nbElementsTotal = 0; |
private int nbPage; |
private Vector<Button> liens; |
private int pageActuelle = 0; |
private int pas; |
|
public PaginationPresenteur(int nbElements) { |
|
presenteur = this; |
this.nbElementsTotal = nbElements; |
actualiserNbPage(); |
vue = new PaginationVue(); |
setPas(10); |
} |
|
private void actualiserNbPage() { |
Double a = Math.ceil((double) nbElementsTotal / (double) pas); |
this.nbPage = a.intValue(); |
} |
|
public void setPageActuelle(int pageActuelle) { |
this.pageActuelle = pageActuelle; |
} |
|
public void setPas(int pas) { |
this.pas = pas; |
actualiserNbPage(); |
creerLiens(); |
changerPage(pas * pageActuelle, pas * (pageActuelle + 1)); |
} |
|
public void creerLiens() { |
HorizontalPanel zoneLiens = vue.getZoneLiens(); |
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); |
|
for (int i = 0; i < nbPage; 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(); |
} |
|
public void initNbElements() { |
|
ListBox nbElements = vue.getNbElements(); |
for (int i = 0; i < 20; i += 5) { |
int valeur = i; |
if (i == 0) { |
valeur = 1; |
} |
|
nbElements.addItem(String.valueOf(valeur)); |
} |
nbElements.setSelectedIndex(pas / 5); |
nbElements.addChangeHandler(new ChangeHandler() { |
|
@Override |
public void onChange(ChangeEvent event) { |
ListBox nbElements = (ListBox) event.getSource(); |
int index = nbElements.getSelectedIndex(); |
setPas(Integer.parseInt(nbElements.getValue(index))); |
} |
|
}); |
} |
|
public void go(HasWidgets container) { |
initNbElements(); |
creerLiens(); |
container.add(vue); |
|
} |
|
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(); |
pageActuelle = Integer.parseInt(bouton.getText()); |
int debut = Integer.parseInt(bouton.getText()) * pas; |
int fin = (debut + pas); |
changerPage(debut, fin); |
|
} |
}); |
|
} |
} |
|
public void pageSuivante() { |
if (pageActuelle < nbPage - 1) { |
pageActuelle++; |
int debut = pageActuelle * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
|
} |
} |
|
public void pagePrecedente() { |
|
if (pageActuelle > 0) { |
pageActuelle--; |
int debut = pageActuelle * pas; |
int fin = debut + pas; |
changerPage(debut, fin); |
|
} |
} |
|
public abstract void changerPage(int debut, int fin); |
|
public PaginationPresenteur getInstance() { |
return presenteur; |
} |
} |