/trunk/src/org/tela_botanica/del/client/vues/rechercheobservations/RechercheObservationsPresenteur.java |
---|
4,6 → 4,7 |
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRecherchePresenteur; |
import org.tela_botanica.del.client.composants.moteurrecherche.MoteurRechercheVue; |
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur; |
import org.tela_botanica.del.client.composants.pagination.PaginationVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Observation; |
71,7 → 72,7 |
} |
private void creerWidgetPagination(int nbObservations) { |
this.paginationHautPresenteur = new PaginationPresenteur(nbObservations, CacheClient.getInstance().getPasPagination()) { |
this.paginationHautPresenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination()) { |
@Override |
public void changerPage(int debut, int fin) { |
86,14 → 87,15 |
@Override |
public void synchroniser() { |
paginationBasPresenteur.setPas(getPas()); |
paginationBasPresenteur.setPageCourante(getPageCourante()); |
paginationBasPresenteur.setNbPages(getNbPages()); |
paginationBasPresenteur.actualiserLiens(); |
paginationBasPresenteur.changerPas(getPas()); |
} |
}; |
paginationHautPresenteur.go(vue.getZonePaginationHaut()); |
this.paginationBasPresenteur = new PaginationPresenteur(nbObservations, CacheClient.getInstance().getPasPagination()) { |
this.paginationBasPresenteur = new PaginationPresenteur(new PaginationVue(), nbObservations, CacheClient.getInstance().getPasPagination()) { |
@Override |
public void changerPage(int debut, int fin) { |
108,9 → 110,10 |
@Override |
public void synchroniser() { |
paginationHautPresenteur.setPas(getPas()); |
paginationHautPresenteur.setPageCourante(getPageCourante()); |
paginationHautPresenteur.setNbPages(getNbPages()); |
paginationHautPresenteur.actualiserLiens(); |
paginationHautPresenteur.changerPas(getPas()); |
} |
}; |
paginationBasPresenteur.go(vue.getZonePaginationBas()); |
/trunk/src/org/tela_botanica/del/client/vues/rechercheimages/resultats/ResultatRechercheImagePresenteur.java |
---|
6,6 → 6,7 |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.pagination.PaginationPresenteur; |
import org.tela_botanica.del.client.composants.pagination.PaginationVue; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.ImageServiceResultat; |
import org.tela_botanica.del.client.services.rest.ImageService; |
32,7 → 33,7 |
} |
//new ResultatRechercheImageVue(); |
private Vue vue; |
private List<ImagePresenteur> observationPresenteurs = new ArrayList<ImagePresenteur>(); |
private List<ImagePresenteur> ImagePresenteurs = new ArrayList<ImagePresenteur>(); |
private ImageService imageService; |
private PaginationPresenteur paginationHautPresenteur, paginationBasPresenteur; |
95,7 → 96,7 |
ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue()); |
imagePresenteur.go(imagePanel); |
panneauxImagesAffichees.add(imagePanel); |
observationPresenteurs.add(imagePresenteur); |
ImagePresenteurs.add(imagePresenteur); |
} |
vue.afficherPanneauxObservation(panneauxImagesAffichees); |
104,7 → 105,7 |
private void creerWidgetPagination(int nbImages) { |
this.paginationBasPresenteur = new PaginationPresenteur(nbImages, CacheClient.getInstance().getPasPagination()) { |
this.paginationBasPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination()) { |
@Override |
public void changerPage(int debut, int fin) { |
if(!requeteEnCours) { |
115,21 → 116,19 |
@Override |
public void actualiserPasCache(int pas) { |
// TODO:Figer la hauteur du panel images selon le pas car pendant le chargement |
// c'est moche ! (il est au moins facile de garder l'ancienne et ne changer |
// la taille du panneau qu'à la fin du chargement) |
CacheClient.getInstance().setPasPagination(pas); |
} |
@Override |
public void synchroniser() { |
paginationHautPresenteur.setPas(getPas()); |
paginationHautPresenteur.setPageCourante(getPageCourante()); |
paginationHautPresenteur.setNbPages(getNbPages()); |
paginationHautPresenteur.actualiserLiens(); |
paginationHautPresenteur.changerPas(getPas()); |
} |
}; |
this.paginationHautPresenteur = new PaginationPresenteur(nbImages, CacheClient.getInstance().getPasPagination()) { |
this.paginationHautPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination()) { |
@Override |
public void changerPage(int debut, int fin) { |
137,26 → 136,22 |
chargerEtAfficherImages(debut, fin); |
} |
CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante()); |
} |
@Override |
public void actualiserPasCache(int pas) { |
// TODO:Figer la hauteur du panel images selon le pas car pendant le chargement |
// c'est moche ! (il est au moins facile de garder l'ancienne et ne changer |
// la taille du panneau qu'à la fin du chargement) |
CacheClient.getInstance().setPasPagination(pas); |
} |
@Override |
public void synchroniser() { |
paginationBasPresenteur.setPas(getPas()); |
paginationBasPresenteur.setPageCourante(getPageCourante()); |
paginationBasPresenteur.setNbPages(getNbPages()); |
paginationBasPresenteur.actualiserLiens(); |
paginationBasPresenteur.changerPas(getPas()); |
} |
}; |
this.paginationBasPresenteur.go(vue.getPanneauPagination()); |
this.paginationHautPresenteur.go(vue.getPanneauPaginationHaut()); |
} |
} |
/trunk/src/org/tela_botanica/del/client/composants/pagination/pagination.css |
---|
5,5 → 5,7 |
.zoneLiens button:hover {background:#8EB533} |
select {background:white} |
.boutonPrecedent {width:20px; height:25px; background:url(./img/prev.png) no-repeat} |
.boutonSuivant {width:20px; height:25px; background:url(./img/next.png) no-repeat} |
.boutonPrecedent {border:solid 1px #8EB533; width:20px; height:20px; background:url(./img/prev.png) no-repeat} |
.boutonSuivant {border:solid 1px #8EB533; width:20px; height:20px; background:url(./img/next.png) no-repeat} |
.boutonPremierePage {width:20px; height:20px; background:url(./img/first.png) no-repeat} |
.boutonDernierePage {width:20px; height:20px; background:url(./img/last.png) no-repeat} |
/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.ui.xml |
---|
3,10 → 3,12 |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="pagination.css" /> |
<g:HorizontalPanel styleName="{style.pagination}"> |
<g:Button ui:field="boutonPremierePage" styleName="{style.boutonPremierePage}" text=" " /> |
<g:Button ui:field="boutonPrecedent" styleName="{style.boutonPrecedent}" text=" " /> |
<g:HorizontalPanel styleName="{style.zoneLiens}" ui:field="zoneLiens"/> |
<g:HorizontalPanel /> |
<g:Button ui:field="boutonSuivant" styleName="{style.boutonSuivant}" text=" "/> |
<g:Button ui:field="boutonDernierePage" styleName="{style.boutonDernierePage}" text=" " /> |
<g:ListBox ui:field="selecteurPas" styleName="{style.selecteurElements}"> |
<g:item value="5">5</g:item> |
<g:item value="10">10</g:item> |
/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationPresenteur.java |
---|
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; |
} |
/trunk/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.java |
---|
1,15 → 1,18 |
package org.tela_botanica.del.client.composants.pagination; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
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.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.Widget; |
public class PaginationVue extends Composite { |
public class PaginationVue extends Composite implements PaginationPresenteur.Vue { |
@UiField |
HorizontalPanel zoneLiens; |
18,7 → 21,7 |
ListBox selecteurPas; |
@UiField |
Button boutonPrecedent, boutonSuivant; |
Button boutonPrecedent, boutonSuivant, boutonPremierePage, boutonDernierePage; |
interface MyUiBinder extends UiBinder<Widget, PaginationVue> { |
} |
30,19 → 33,23 |
} |
public void masquerBoutonDebut() { |
boutonPremierePage.setVisible(false); |
boutonPrecedent.setVisible(false); |
} |
public void afficherBoutonDebut() { |
boutonPremierePage.setVisible(true); |
boutonPrecedent.setVisible(true); |
} |
public void masquerBoutonSuivant() { |
boutonDernierePage.setVisible(false); |
boutonSuivant.setVisible(false); |
} |
public void afficherBoutonSuivant() { |
boutonDernierePage.setVisible(true); |
boutonSuivant.setVisible(true); |
} |
50,4 → 57,66 |
return selecteurPas; |
} |
@Override |
public HasWidgets getZoneLiens() { |
return zoneLiens; |
} |
@Override |
public HasClickHandlers getBoutonSuivant() { |
return boutonSuivant; |
} |
@Override |
public HasClickHandlers getBoutonPrecedent() { |
return boutonPrecedent; |
} |
@Override |
public HasClickHandlers getBoutonPremierePage() { |
return boutonPremierePage; |
} |
@Override |
public HasClickHandlers getBoutonDernierePage() { |
return boutonDernierePage; |
} |
@Override |
public void changerSelecteurPas(int index) { |
selecteurPas.setSelectedIndex(index); |
} |
@Override |
public int getNbWidgetsZoneLiens() { |
return zoneLiens.getWidgetCount(); |
} |
@Override |
public HasClickHandlers getWidgetZoneLiensHasClickHandlers(int index) { |
return (Button)zoneLiens.getWidget(index); |
} |
@Override |
public HasText getWidgetZoneLiensAsText(int index) { |
return (Button)zoneLiens.getWidget(index); |
} |
@Override |
public void changerStyleBoutonZoneLiens(int index, String style) { |
zoneLiens.getWidget(index).setStyleName(style); |
} |
@Override |
public void ajouterBoutonZoneLiens(String label) { |
Button bouton = new Button(label); |
zoneLiens.add(bouton); |
} |
@Override |
public int getPasSelectionne() { |
int index = selecteurPas.getSelectedIndex(); |
return Integer.parseInt(selecteurPas.getValue(index)); |
} |
} |