New file |
0,0 → 1,180 |
package org.tela_botanica.del.client.pagination; |
|
import java.util.Iterator; |
import java.util.Vector; |
|
import org.tela_botanica.del.client.cache.CacheClient; |
|
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; |
|
public PaginationPresenteur(int nbElements) { |
presenteur = this; |
this.nbElementsTotal = nbElements; |
actualiserNbPage(); |
vue = new PaginationVue(); |
setPas(CacheClient.getInstance().getPasPageRechercheImage()); |
} |
|
private void setBoutonActif() { |
Iterator<Button> it = liens.iterator(); |
while (it.hasNext()) { |
Button boutonCourant = it.next(); |
if (boutonCourant.getText().equals(String.valueOf(CacheClient.getInstance().getNumPageRechercheImage()))) { |
boutonCourant.setStyleName("actif"); |
} else { |
boutonCourant.setStyleName("inactif"); |
} |
} |
} |
|
private void actualiserNbPage() { |
Double a = Math.ceil((double) nbElementsTotal / (double) CacheClient.getInstance().getPasPageRechercheImage()); |
this.nbPage = a.intValue(); |
} |
|
public void setPas(int pas) { |
CacheClient.getInstance().setPasPageRechercheImage(pas); |
actualiserNbPage(); |
creerLiens(); |
changerPage(CacheClient.getInstance().getPasPageRechercheImage() * CacheClient.getInstance().getNumPageRechercheImage(), CacheClient.getInstance().getPasPageRechercheImage() * (CacheClient.getInstance().getNumPageRechercheImage() + 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); |
|
// TODO : gérer le nombre de pages excessives |
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(); |
setBoutonActif(); |
} |
|
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(CacheClient.getInstance().getPasPageRechercheImage() / 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(); |
CacheClient.getInstance().setNumPageRechercheImage(Integer.parseInt(bouton.getText())); |
int debut = Integer.parseInt(bouton.getText()) * CacheClient.getInstance().getPasPageRechercheImage(); |
int fin = (debut + CacheClient.getInstance().getPasPageRechercheImage()); |
setBoutonActif(); |
changerPage(debut, fin); |
|
} |
}); |
|
} |
} |
|
public void pageSuivante() { |
if (CacheClient.getInstance().getNumPageRechercheImage() < nbPage - 1) { |
CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() + 1); |
int debut = CacheClient.getInstance().getNumPageRechercheImage() * CacheClient.getInstance().getPasPageRechercheImage(); |
int fin = debut + CacheClient.getInstance().getPasPageRechercheImage(); |
changerPage(debut, fin); |
} |
setBoutonActif(); |
} |
|
public void pagePrecedente() { |
|
if (CacheClient.getInstance().getNumPageRechercheImage() > 0) { |
CacheClient.getInstance().setNumPageRechercheImage(CacheClient.getInstance().getNumPageRechercheImage() - 1); |
int debut = CacheClient.getInstance().getNumPageRechercheImage() * CacheClient.getInstance().getPasPageRechercheImage(); |
int fin = debut + CacheClient.getInstance().getPasPageRechercheImage(); |
changerPage(debut, fin); |
} |
setBoutonActif(); |
} |
|
public abstract void changerPage(int debut, int fin); |
|
public PaginationPresenteur getInstance() { |
return presenteur; |
} |
} |