Subversion Repositories eFlore/Applications.del

Compare Revisions

Ignore whitespace Rev 268 → Rev 269

/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationPresenteur.java
3,161 → 3,160
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.Window;
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 nbPage;
private Vector<Button> liens;
private int pas = 10;
private int pageCourante = 1;
public PaginationPresenteur(int nbElements, int pas) {
this.nbElementsTotal = nbElements;
actualiserNbPage();
/**
* 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;
changerPas(pas);
vue = new PaginationVue();
setPas(pas);
}
 
private void setBoutonActif() {
Iterator<Button> it = liens.iterator();
while (it.hasNext()) {
Button boutonCourant = it.next();
if (boutonCourant.getText().equals(String.valueOf(pageCourante))) {
boutonCourant.setStyleName("actif");
} else {
boutonCourant.setStyleName("inactif");
}
}
}
 
/** Met à jour le nombre de page en fonction du pas */
private void actualiserNbPage() {
Double a = Math.ceil((double) nbElementsTotal / (double) pas);
this.nbPage = a.intValue();
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas);
this.nbPage = nombrePages.intValue();
}
 
public void setPas(int pas) {
/** Changer le pas de la pagination
* @param pas : le nombre d'éléments à afficher par page */
public void changerPas(int pas) {
actualiserNbPage();
creerLiens();
changerPage(pas * pageCourante, pas * (pageCourante + 1));
actualiserPasCache(pas);
}
 
public void creerLiens() {
HorizontalPanel zoneLiens = vue.getZoneLiens();
/** Methode Go du modèle MVP
* @param container : la vue ou éxécuter l'affichage */
public void go(HasWidgets container) {
actualiserLiens();
container.add(vue);
}
/** Actualiser les liens pour n'afficher 5 avant et 5 après
* */
public void actualiserLiens() {
HorizontalPanel zoneLiens = vue.zoneLiens;
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);
 
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;
if (pageDebut < 1) {
pageDebut = 1;
}
int pageFin = pageDebut + 5;
return pageDebut;
}
private int pagesApres() {
int pageFin = pageCourante + 5;
if (pageFin > nbPage) {
pageFin = nbPage;
}
for (int i = pageDebut; i < pageFin; 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();
return pageFin;
}
 
public void initNbElements() {
 
ListBox nbElements = vue.getNbElements();
for (int i = 0; i < 20; i += 5) {
int valeur = i;
if (i == 0) {
valeur = 1;
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");
}
 
nbElements.addItem(String.valueOf(valeur));
}
nbElements.setSelectedIndex(pas / 5);
nbElements.addChangeHandler(new ChangeHandler() {
}
 
/** Gérer les évènements sur les boutons
* */
public void gererEvenements() {
vue.selecteurPas.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
ListBox nbElements = (ListBox) event.getSource();
int index = nbElements.getSelectedIndex();
setPas(Integer.parseInt(nbElements.getValue(index)));
changerPas(Integer.parseInt(nbElements.getValue(index)));
}
 
});
}
vue.boutonPrecedent.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
pagePrecedente();
}
});
 
public void go(HasWidgets container) {
initNbElements();
creerLiens();
container.add(vue);
vue.boutonSuivant.addClickHandler(new ClickHandler() {
@Override
public 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() {
 
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();
pageCourante = Integer.parseInt(bouton.getText());
int debut = Integer.parseInt(bouton.getText()) * pas;
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++;
164,19 → 163,20
int debut = pageCourante * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
}
setBoutonActif();
}
 
/** Retourne la limite infèrieure du nombre de pages à afficher
* */
public void pagePrecedente() {
 
if (pageCourante > 0) {
if (pageCourante > 1) {
pageCourante--;
int debut = pageCourante * pas;
int fin = debut + pas;
changerPage(debut, fin);
actualiserLiens();
}
setBoutonActif();
}
protected int getPageCourante() {
/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.java
3,6 → 3,7
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.ListBox;
14,10 → 15,11
HorizontalPanel zoneLiens;
 
@UiField
ListBox nbElements;
ListBox selecteurPas;
@UiField
Button boutonPrecedent, boutonSuivant;
 
// Annotation can be used to change the name of the associated xml file
// @UiTemplate("PaginationVue.ui.xml")
interface MyUiBinder extends UiBinder<Widget, PaginationVue> {
}
 
27,11 → 29,4
initWidget(uiBinder.createAndBindUi(this));
}
 
public HorizontalPanel getZoneLiens() {
return this.zoneLiens;
}
 
public ListBox getNbElements() {
return nbElements;
}
}
/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.ui.xml
1,11 → 1,19
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat'
ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
<ui:style src="pagination.css" />
 
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui' ui:generateFormat='com.google.gwt.i18n.rebind.format.PropertiesFormat' ui:generateKeys="com.google.gwt.i18n.rebind.keygen.MD5KeyGenerator" ui:generateLocales="default">
<ui:with field='res' type='org.tela_botanica.del.client.Ressources'/>
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/>
<g:HorizontalPanel styleName="{style.pagination}">
<g:HorizontalPanel ui:field="zoneLiens"></g:HorizontalPanel>
<g:ListBox ui:field="nbElements" styleName="{style.selecteurElements}"></g:ListBox>
<ui:style src="pagination.css" />
<g:HorizontalPanel styleName="{style.pagination}">
<g:Button ui:field="boutonPrecedent" text="previous" />
<g:HorizontalPanel ui:field="zoneLiens"/>
<g:HorizontalPanel styleName="{style.pagination}" /><g:Button ui:field="boutonSuivant" text="next" />
<g:ListBox ui:field="selecteurPas" styleName="{style.selecteurElements}">
<g:item value="5">5</g:item>
<g:item value="10">10</g:item>
<g:item value="15">15</g:item>
<g:item value="20">20</g:item>
</g:ListBox>
</g:HorizontalPanel>
</ui:UiBinder>