/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraPresenteur.java |
---|
New file |
0,0 → 1,392 |
package org.tela_botanica.del.client.vues.pictoflora.resultats; |
import java.util.List; |
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.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.ModeTri; |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.modeles.ProtocoleServiceResultat; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole; |
import org.tela_botanica.del.client.services.rest.ImageService; |
import org.tela_botanica.del.client.services.rest.ProtocoleService; |
import org.tela_botanica.del.client.services.rest.async.ImagesParTaxonCallback; |
import org.tela_botanica.del.client.services.rest.async.ProtocolesCallback; |
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImagePresenteur; |
import org.tela_botanica.del.client.vues.pictoflora.resultats.images.ImageVue; |
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.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.HTMLPanel; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.ListBox; |
public class ResultatPictofloraPresenteur { |
public interface Vue extends IsWidget { |
public void startChargement(); |
public void nettoyer(); |
public void creerPanneauxObservations(int size); |
public void stopChargement(); |
public List<HasWidgets> getPanneauxImages(); |
public HasWidgets getPanneauPagination(); |
public HasWidgets getPanneauPaginationHaut(); |
public HasClickHandlers getTriParNbVotesAscendant(); |
public HasClickHandlers getTriParNbVotesDescendant(); |
public HasClickHandlers getTriParDateAscendant(); |
public HasClickHandlers getTriParDateDescendant(); |
public HasClickHandlers getTriParNbTagsAscendant(); |
public HasClickHandlers getTriParNbTagsDescendant(); |
public void afficherElementsAucunResultatTrouve(); |
public void afficherElementsResultatsTrouve(); |
public HTMLPanel getImageTable(); |
public String getNomProtocoleSelectionne(); |
public int getIdProtocoleSelectionne(); |
public void setListeProtocoles(ListBox listeProtocoles); |
public HasChangeHandlers getListeProtocoles(); |
public void ajouterProtocoles(List<Protocole> protocoles); |
public void selectionnerProtocole(int index); |
public HasClickHandlers getLabelVote(); |
public void masquerVoteAscendant(); |
public void masquerVoteDescendant(); |
public void afficherVoteAscendant(); |
public void afficherVoteDescendant(); |
public HasClickHandlers getLabelDate(); |
public HasClickHandlers getLabelTag(); |
public void masquerDateAscendant(); |
public void masquerDateDescendant(); |
public void afficherDateAscendant(); |
public void afficherDateDescendant(); |
public void masquerTagAscendant(); |
public void afficherTagDescendant(); |
public void masquerTagDescendant(); |
public void afficherTagAscendant(); |
public void mettreAJourDescriptionProtocoleCourant( |
Protocole protocoleCourant); |
} |
private Vue vue; |
private ImageService imageService; |
private final ProtocoleService protocoleService; |
private List<Protocole> protocoles; |
private ModeTri triCourantVote = ModeTri.TRI_ASCENDANT; |
private ModeTri triCourantDate = ModeTri.TRI_DESCENDANT; |
private ModeTri triCourantTag = ModeTri.TRI_DESCENDANT; |
public ResultatPictofloraPresenteur(ImageService imageService, ProtocoleService protocoleService, Vue vue) { |
this.vue = vue; |
this.imageService = imageService; |
this.protocoleService=protocoleService; |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
vue.startChargement(); |
rechercherImagesEtCreerWidgetPagination(); |
gererEvenements(); |
chargerProtocoles(); |
vue.masquerVoteDescendant(); |
vue.masquerVoteAscendant(); |
// vue.masquerDateDescendant(); |
vue.masquerDateAscendant(); |
vue.masquerTagAscendant(); |
vue.masquerTagDescendant(); |
} |
public void gererEvenements() { |
vue.getListeProtocoles().addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
surChangementProtocole(); |
} |
}); |
ClickHandler surClicTriVote = new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surClicTriVote(); |
} |
}; |
vue.getLabelVote().addClickHandler(surClicTriVote); |
vue.getTriParNbVotesAscendant().addClickHandler(surClicTriVote); |
vue.getTriParNbVotesDescendant().addClickHandler(surClicTriVote); |
ClickHandler surClicTriDate = new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surClicTriDate(); |
} |
}; |
vue.getLabelDate().addClickHandler(surClicTriDate); |
vue.getTriParDateAscendant().addClickHandler(surClicTriDate); |
vue.getTriParDateDescendant().addClickHandler(surClicTriDate); |
ClickHandler surClicTriTag = new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surClicTriTag(); |
} |
}; |
vue.getLabelTag().addClickHandler(surClicTriTag); |
vue.getTriParNbTagsAscendant().addClickHandler(surClicTriTag); |
vue.getTriParNbTagsDescendant().addClickHandler(surClicTriTag); |
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() { |
@Override |
public void onChangementProtocole(EvenementChangementProtocole event) { |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
if (informationsRechercheImages.getTriParNbVotes() != ModeTri.PAS_DE_TRI) { |
informationsRechercheImages.setIdProtocoleSelectionne(event.getProtocole().getId() + ""); |
chargerEtAfficherImagesPageEnCours(); |
} |
} |
}); |
} |
protected void surClicTriTag() { |
vue.masquerDateDescendant(); |
vue.masquerDateAscendant(); |
vue.masquerVoteDescendant(); |
vue.masquerVoteAscendant(); |
if (triCourantTag == ModeTri.TRI_ASCENDANT) { |
triCourantTag = ModeTri.TRI_DESCENDANT; |
vue.masquerTagAscendant(); |
vue.afficherTagDescendant(); |
} else { |
triCourantTag = ModeTri.TRI_ASCENDANT; |
vue.masquerTagDescendant(); |
vue.afficherTagAscendant(); |
} |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
informationsRechercheImages.setTriParNbTags(triCourantTag); |
informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI); |
informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI); |
chargerEtAfficherImagesPageEnCours(); |
} |
public void surClicTriVote() { |
vue.masquerDateDescendant(); |
vue.masquerDateAscendant(); |
vue.masquerTagAscendant(); |
vue.masquerTagDescendant(); |
if (triCourantVote == ModeTri.TRI_ASCENDANT) { |
triCourantVote = ModeTri.TRI_DESCENDANT; |
vue.masquerVoteAscendant(); |
vue.afficherVoteDescendant(); |
} else { |
triCourantVote = ModeTri.TRI_ASCENDANT; |
vue.masquerVoteDescendant(); |
vue.afficherVoteAscendant(); |
} |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
int IdProtocole = CacheClient.getInstance().getProtocoleCourant().getId(); |
informationsRechercheImages.setTriParNbVotes(triCourantVote); |
informationsRechercheImages.setIdProtocoleSelectionne(IdProtocole + ""); |
informationsRechercheImages.setTriParDate(ModeTri.PAS_DE_TRI); |
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI); |
chargerEtAfficherImagesPageEnCours(); |
} |
public void surClicTriDate() { |
vue.masquerVoteDescendant(); |
vue.masquerVoteAscendant(); |
if (triCourantDate == ModeTri.TRI_ASCENDANT) { |
triCourantDate = ModeTri.TRI_DESCENDANT; |
vue.masquerDateAscendant(); |
vue.afficherDateDescendant(); |
} else { |
triCourantDate = ModeTri.TRI_ASCENDANT; |
vue.masquerDateDescendant(); |
vue.afficherDateAscendant(); |
} |
InformationsRecherche informationsRechercheImages = CacheClient.getInstance().getInformationsRechercheImage(); |
informationsRechercheImages.setTriParDate(triCourantDate); |
informationsRechercheImages.setTriParNbVotes(ModeTri.PAS_DE_TRI); |
informationsRechercheImages.setTriParNbTags(ModeTri.PAS_DE_TRI); |
chargerEtAfficherImagesPageEnCours(); |
} |
public void surChangementProtocole() { |
Protocole protocoleCourant = null; |
for (Protocole protocole : protocoles) { |
if (protocole.getId() == vue.getIdProtocoleSelectionne()) { |
protocoleCourant = protocole; |
} |
} |
vue.mettreAJourDescriptionProtocoleCourant(protocoleCourant); |
CacheClient.getInstance().setProtocoleCourant(protocoleCourant); |
EvenementChangementProtocole evenement = new EvenementChangementProtocole(protocoleCourant); |
BusEvenementiel.getInstance().fireEvent(evenement); |
} |
private void chargerProtocoles() { |
// test pour ne pas charger les protocoles déjà chargés |
// TODO: faire un systeme de cache gérés par les web service eux même |
if (CacheClient.getInstance().getListeProtocoles() == null) { |
protocoleService.getProtocoles(new ProtocolesCallback() { |
@Override |
public void surRetour(ProtocoleServiceResultat protocolesRecus) { |
protocoles = protocolesRecus.getProtocoles(); |
remplirListeProtocole(protocoles); |
} |
}); |
} else { |
protocoles = CacheClient.getInstance().getListeProtocoles(); |
remplirListeProtocole(CacheClient.getInstance().getListeProtocoles()); |
} |
} |
private void remplirListeProtocole(List<Protocole> protocoles) { |
vue.ajouterProtocoles(protocoles); |
if (CacheClient.getInstance().getProtocoleCourant() == null) { |
vue.selectionnerProtocole(0); |
vue.mettreAJourDescriptionProtocoleCourant(protocoles.get(0)); |
} else { |
vue.mettreAJourDescriptionProtocoleCourant(CacheClient.getInstance().getProtocoleCourant()); |
} |
} |
public void rechercherImagesEtCreerWidgetPagination() { |
// appel du service d'image pour avoir le nb total d'elements pour la |
// pagination |
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() { |
@Override |
public void surRetour(ImageServiceResultat imagesRecues) { |
creerWidgetPagination(imagesRecues.getNbTotalImagesPourLaRecherche()); |
afficherImages(imagesRecues); |
} |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
} |
}; |
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination(); |
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination(); |
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), debut, fin, callback); |
} |
private void chargerEtAfficherImages(final int premier, final int dernier) { |
vue.startChargement(); |
vue.nettoyer(); |
ImagesParTaxonCallback callback = new ImagesParTaxonCallback() { |
@Override |
public void surRetour(ImageServiceResultat imagesRecues) { |
afficherImages(imagesRecues); |
} |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
} |
}; |
imageService.getImagesParTaxon(CacheClient.getInstance().getInformationsRechercheImage(), premier, dernier, callback); |
} |
public void afficherImages(ImageServiceResultat imageServiceResult) { |
List<Image> images = imageServiceResult.getImages(); |
if (images == null || images.size() == 0) { |
vue.afficherElementsAucunResultatTrouve(); |
} else { |
vue.afficherElementsResultatsTrouve(); |
for (Image image : images) { |
ImagePresenteur imagePresenteur = new ImagePresenteur(image, CacheClient.getInstance().getProtocoleCourant(), new ImageVue()); |
imagePresenteur.go(vue.getImageTable()); |
} |
} |
vue.stopChargement(); |
} |
private void creerWidgetPagination(int nbImages) { |
PaginationPresenteur imagesPaginationPresenteurHaut = creerPresenteurPagination(nbImages); |
PaginationPresenteur imagesPaginationPresenteurBas = creerPresenteurPagination(nbImages); |
imagesPaginationPresenteurHaut.setGroupePagination("pagination_images"); |
imagesPaginationPresenteurBas.setGroupePagination("pagination_images"); |
imagesPaginationPresenteurHaut.go(vue.getPanneauPaginationHaut()); |
imagesPaginationPresenteurBas.go(vue.getPanneauPagination()); |
} |
public PaginationPresenteur creerPresenteurPagination(int nbImages) { |
PaginationPresenteur imagesPaginationPresenteur = new PaginationPresenteur(new PaginationVue(), nbImages, CacheClient.getInstance().getPasPagination(), CacheClient.getInstance().getPageCouranteRechercheImage()) { |
@Override |
public void chargerElements(int debut, int fin) { |
chargerEtAfficherImages(debut, fin); |
CacheClient.getInstance().setPageCouranteRechercheImages(getPageCourante()); |
} |
@Override |
public void actualiserPasCache(int pas) { |
CacheClient.getInstance().setPasPagination(pas); |
} |
}; |
return imagesPaginationPresenteur; |
} |
public void chargerEtAfficherImagesPageEnCours() { |
final int debut = (CacheClient.getInstance().getPageCouranteRechercheImage() - 1) * CacheClient.getInstance().getPasPagination(); |
final int fin = (CacheClient.getInstance().getPageCouranteRechercheImage()) * CacheClient.getInstance().getPasPagination(); |
chargerEtAfficherImages(debut, fin); |
} |
public Vue getVue() { |
return vue; |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.java |
---|
New file |
0,0 → 1,165 |
package org.tela_botanica.del.client.vues.pictoflora.resultats.images; |
import org.tela_botanica.del.client.i18n.I18n; |
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.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class ImageVue extends Composite implements ImagePresenteur.Vue { |
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("ObservationVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, ImageVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
@UiField |
protected HTML nomEspece, nomAuteur; |
@UiField |
protected HTMLPanel zoneVoter, zonePlus; |
@UiField |
protected HorizontalPanel voter; |
@UiField |
protected Panel zoneCache, zoneMotsCles; |
@UiField |
Image imagePrincipale; |
@UiField |
Label enSavoirPlus, voirMotsCles; |
@UiField Panel metadonnees; |
public ImageVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
public HasWidgets getZoneVoter() { |
return voter; |
} |
public void cacherZoneCache() { |
zoneCache.setVisible(false); |
} |
public void afficherZoneCache() { |
zoneCache.setVisible(true); |
} |
public void loadImage(org.tela_botanica.del.client.modeles.Image image) { |
zoneCache.setVisible(false); |
zoneMotsCles.setVisible(false); |
nomEspece.setHTML("<p>"+image.getObservation().getNomRetenu()+"</p>"); |
nomAuteur.setHTML("<p>"+image.getObservation().getAuteur()+"</p>"); |
imagePrincipale.setUrl(image.getUrl()); |
imagePrincipale.setTitle(I18n.getVocabulary().indicationActionClicImage()); |
imagePrincipale.setAltText(image.getObservation().getAuteur() + " - " + image.getObservation().getNomRetenu()); |
String styleZonePlus = "image_determinee"; |
if(image.estADeterminer()) { |
styleZonePlus = "image_non_determinee"; |
} |
zonePlus.setTitle(I18n.getVocabulary().voirFicheIndividu()); |
zonePlus.addStyleName(styleZonePlus); |
voirMotsCles.setTitle(I18n.getVocabulary().voirMotsCles()); |
enSavoirPlus.setTitle(I18n.getVocabulary().voirMetadonnees()); |
} |
@Override |
public HasClickHandlers getImagePrincipale() { |
return imagePrincipale; |
} |
@Override |
public IsWidget getImagePrincipaleWidget() { |
return imagePrincipale; |
} |
@Override |
public HasClickHandlers getEnSavoirPlus() { |
return enSavoirPlus; |
} |
@Override |
public HasClickHandlers getVoirMotsCles() { |
return voirMotsCles; |
} |
@Override |
public void setUrlImagePrincipale(String url) { |
imagePrincipale.setUrl(url); |
} |
@Override |
public void setTitreImagePrincipale(String titre) { |
imagePrincipale.setTitle(titre); |
} |
@Override |
public void setAltTextImagePrincipale(String altText) { |
imagePrincipale.setAltText(altText); |
} |
@Override |
public String getUrlImagePrincipale() { |
return imagePrincipale.getUrl(); |
} |
@Override |
public String getTitreImagePrincipale() { |
return imagePrincipale.getTitle(); |
} |
@Override |
public String getAltTextImagePrincipale() { |
return imagePrincipale.getAltText(); |
} |
@Override |
public HasClickHandlers getNomAuteur() { |
return nomAuteur; |
} |
@Override |
public HasClickHandlers getNomEspece() { |
return nomEspece; |
} |
public HasWidgets getMetadonnees() { |
return metadonnees; |
} |
@Override |
public void cacherZoneMotsCles() { |
zoneMotsCles.setVisible(false); |
} |
@Override |
public void afficherZoneMotsCles() { |
zoneMotsCles.setVisible(true); |
} |
@Override |
public HasWidgets getZoneMotsCles() { |
return zoneMotsCles; |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/image.css |
---|
New file |
0,0 → 1,130 |
.observations { |
width: 250px; |
height: 250px; |
margin-bottom: 50px; |
} |
.observations img { |
width: 250px; |
padding: 0; |
} |
.zoneCache { |
position: absolute; |
padding: 5px; |
border: solid 1px #CCC; |
background: #333; |
opacity: 0.9; |
color: white; |
width: 250px; |
z-index: 1000; |
margin-top: 30px; |
} |
.zoneMotsCles { |
position: absolute; |
padding: 5px; |
border: solid 1px #CCC; |
background: #333; |
opacity: 0.9; |
color: white; |
width: 239px; |
z-index: 1000; |
margin-top: 212px; |
} |
.enSavoirPlus { |
position: absolute; |
background: url(./img/ajouter.png) no-repeat; |
width: 30px; |
height: 30px; |
cursor: pointer; |
margin-top: 3px; |
margin-left: 3px; |
} |
.voirMotsCles { |
position: absolute; |
background: url(./img/tagger.png) no-repeat; |
width: 30px; |
height: 30px; |
cursor: pointer; |
margin-top: 180px; |
margin-left: 216px; |
} |
.zoom { |
background: url(./img/loupe.png); |
width: 30px; |
height: 30px; |
cursor: pointer; |
margin-top: 3px; |
position: absolute; |
margin-left: 217px; |
} |
.espece { |
font-size: 12px; |
font-weight: bold; |
color: white; |
padding-left: 5px; |
padding-right: 1px; |
} |
.zonePlus:hover { |
background:#8EB533; |
} |
.espece p,.auteur p { |
padding: 0px; |
margin: 0px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: pre; |
min-height: 13px; |
} |
.zoneDetail { |
position: absolute; |
} |
.zonePlus { |
position: absolute; |
width: 246px; |
padding: 2px; |
margin-top: -88px; |
opacity: 0.9; |
color: white; |
text-align: left; |
cursor: pointer; |
overflow: hidden; |
text-overflow: ellipsis; |
background:#333; |
} |
.zoneImage { |
cursor: pointer; |
height: 280px; |
margin-bottom: 20px; |
background: #DDD; |
} |
.zoneVoter { |
margin-top: -48px; |
text-align: center; |
opacity: 0.9; |
width: 240px; |
position: absolute; |
height: 35px; |
padding: 5px; |
} |
.metadonnees, .motsCles { |
text-align: left; |
} |
.auteur { |
padding-left: 5px; |
padding-right: 1px; |
padding-top: 3px; |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImageVue.ui.xml |
---|
New file |
0,0 → 1,30 |
<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.resources.Ressources'/> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="image.css" /> |
<g:HTMLPanel styleName="{style.observations}"> |
<g:HTMLPanel styleName="{style.zoneDetail}"> |
<g:Label ui:field="enSavoirPlus" text=" " styleName="{style.enSavoirPlus}"/> |
<g:Label ui:field="voirMotsCles" text=" " styleName="{style.voirMotsCles}"/> |
<g:HTMLPanel styleName="{style.zoneCache}" ui:field="zoneCache"> |
<g:HTMLPanel ui:field="metadonnees" styleName="{style.metadonnees}"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneMotsCles}" ui:field="zoneMotsCles"> |
<g:HTMLPanel ui:field="motsCles" styleName="{style.motsCles}"/> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneImage}"><g:Image ui:field="imagePrincipale" resource='{res.logo}'/></g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePlus}" ui:field="zonePlus"> |
<g:HTML ui:field="nomAuteur" styleName="petit {style.auteur}">Auteur</g:HTML> |
<g:HTML ui:field="nomEspece" styleName="{style.espece}"></g:HTML> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneVoter} arrondi-faible" ui:field="zoneVoter"><g:HorizontalPanel ui:field="voter"/></g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/images/ImagePresenteur.java |
---|
New file |
0,0 → 1,235 |
package org.tela_botanica.del.client.vues.pictoflora.resultats.images; |
import java.util.HashMap; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlaySimplePresenteur; |
import org.tela_botanica.del.client.composants.images.DetailImagePresenteur; |
import org.tela_botanica.del.client.composants.images.DetailImageVue; |
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesPresenteur; |
import org.tela_botanica.del.client.composants.metadonnees.MetadonneesVue; |
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImagePresenteur; |
import org.tela_botanica.del.client.composants.motsclesimages.MotsClesImageVue; |
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur; |
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImageVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue; |
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVotePresenteur; |
import org.tela_botanica.del.client.composants.votes.moyennevotes.MoyenneVoteVue; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.ModeRecherche; |
import org.tela_botanica.del.client.modeles.Observation; |
import org.tela_botanica.del.client.modeles.Protocole; |
import org.tela_botanica.del.client.modeles.VoteProtocole; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.EvenementChangementProtocole; |
import org.tela_botanica.del.client.navigation.evenement.changementprotocole.GestionnaireEvenementChangementProtocole; |
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.EvenementVoirDetailsImage; |
import org.tela_botanica.del.client.navigation.evenement.rechercheimage.GestionnaireEvenementVoirDetailsImage; |
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation; |
import org.tela_botanica.del.client.navigation.evenement.validationobservationpictoflora.EvenementValidationPictoflora; |
import org.tela_botanica.del.client.services.rest.MotsClesService; |
import org.tela_botanica.del.client.services.rest.MotsClesServiceConcret; |
import org.tela_botanica.del.client.services.rest.VoteProtocoleServiceConcret; |
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.Widget; |
public class ImagePresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public abstract void loadImage(Image image); |
public abstract HasClickHandlers getImagePrincipale(); |
public IsWidget getImagePrincipaleWidget(); |
public void setUrlImagePrincipale(String url); |
public void setTitreImagePrincipale(String titre); |
public void setAltTextImagePrincipale(String altText); |
public String getUrlImagePrincipale(); |
public String getTitreImagePrincipale(); |
public String getAltTextImagePrincipale(); |
public abstract HasClickHandlers getEnSavoirPlus(); |
public abstract void cacherZoneCache(); |
public abstract void afficherZoneCache(); |
public abstract HasWidgets getZoneVoter(); |
public HasClickHandlers getNomAuteur(); |
public HasClickHandlers getNomEspece(); |
public HasWidgets getMetadonnees(); |
public HasClickHandlers getVoirMotsCles(); |
public HasWidgets getZoneMotsCles(); |
public void cacherZoneMotsCles(); |
public void afficherZoneMotsCles(); |
} |
private Vue vue; |
private final Image image; |
private boolean detailsOuverts = false; |
private Protocole protocole; |
private boolean motsClesOuverts = false; |
private MotsClesImagePresenteur motsClesImagePresenteur; |
public ImagePresenteur(Image image, Protocole protocole, Vue vue) { |
this.image = image; |
this.protocole = protocole; |
this.vue = vue; |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
vue.loadImage(image); |
new MetadonneesPresenteur(new MetadonneesVue(), image.getObservation(), ModeRecherche.MODE_IMAGE, true).go(vue.getMetadonnees()); |
motsClesImagePresenteur = new MotsClesImagePresenteur(image, new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImagePresenteur(image.getIdImage(), new MotsClesServiceConcret(), new FormulaireSaisieMotsClesImageVue()), new MotsClesImageVue()); |
motsClesImagePresenteur.go(vue.getZoneMotsCles()); |
chargerDonneesValidation(); |
gererEvenements(); |
} |
private void chargerDonneesValidation() { |
vue.getZoneVoter().clear(); |
if (protocole != null) { |
HashMap<String, VoteProtocole> observationValidationDatas = image.getVotesProtocoles(protocole.getId()); |
if (observationValidationDatas != null) { |
new MoyenneVotePresenteur(image, protocole, new MoyenneVoteVue(), new VoteProtocoleServiceConcret()).go(vue.getZoneVoter()); |
} |
} |
} |
private void lancerEvenementValidation() { |
CacheClient.getInstance().setImageCourante(image); |
final Observation obs = image.getObservation(); |
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPictoflora(obs)); |
} |
protected void gererEvenements() { |
ClickHandler zoomeur = new ClickHandler() { |
public void onClick(ClickEvent event) { |
FenetreOverlaySimplePresenteur presenteurGalerie = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue()); |
presenteurGalerie.ouvrirFenetreModaleDefilante(0, new DetailImagePresenteur(image, new DetailImageVue())); |
presenteurGalerie.afficherBoutonsSuivantsPrecedents(false); |
}}; |
vue.getImagePrincipale().addClickHandler(zoomeur); |
vue.getNomAuteur().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
lancerEvenementValidation(); |
} |
}); |
vue.getNomEspece().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
lancerEvenementValidation(); |
} |
}); |
vue.getEnSavoirPlus().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
BusEvenementiel.getInstance().fireEvent(new EvenementVoirDetailsImage(image)); |
} |
}); |
vue.getVoirMotsCles().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if(!motsClesOuverts) { |
afficherPanneauMotsCles(); |
} else { |
cacherPanneauMotsCles(); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementVoirDetailsImage.TYPE, new GestionnaireEvenementVoirDetailsImage() { |
@Override |
public void onVoirDetailsImage(EvenementVoirDetailsImage event) { |
if (image.getIdImage().equals(event.getImage().getIdImage())) { |
if (!detailsOuverts) { |
afficherDetails(); |
} else { |
cacherDetails(); |
} |
} else { |
cacherDetails(); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementProtocole.TYPE, new GestionnaireEvenementChangementProtocole() { |
@Override |
public void onChangementProtocole(EvenementChangementProtocole event) { |
setProtocole(event.getProtocole()); |
chargerDonneesValidation(); |
} |
}); |
} |
protected void afficherPanneauMotsCles() { |
vue.afficherZoneMotsCles(); |
motsClesOuverts = true; |
motsClesImagePresenteur.chargerMotsCles(); |
motsClesImagePresenteur.focuserChampsSaisie(); |
} |
protected void cacherPanneauMotsCles() { |
vue.cacherZoneMotsCles(); |
motsClesOuverts = false; |
} |
public void cacherDetails() { |
vue.cacherZoneCache(); |
detailsOuverts = false; |
} |
public void afficherDetails() { |
vue.afficherZoneCache(); |
detailsOuverts = true; |
} |
public boolean isDetailsOpen() { |
return detailsOuverts; |
} |
public Protocole getProtocole() { |
return protocole; |
} |
public void setProtocole(Protocole protocole) { |
this.protocole = protocole; |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.java |
---|
New file |
0,0 → 1,280 |
package org.tela_botanica.del.client.vues.pictoflora.resultats; |
import java.util.ArrayList; |
import java.util.List; |
import org.tela_botanica.del.client.modeles.Protocole; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.dom.client.NodeList; |
import com.google.gwt.dom.client.OptionElement; |
import com.google.gwt.dom.client.SelectElement; |
import com.google.gwt.event.dom.client.HasChangeHandlers; |
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.Window; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.ListBox; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class ResultatPictofloraVue extends Composite implements ResultatPictofloraPresenteur.Vue { |
@UiField |
Panel panneauChargement; |
private final List<HasWidgets> panneauxImages = new ArrayList<HasWidgets>(); |
private final int nbImagesPerPage = 10; |
private int numImage = 0; |
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("ObservationRechercheVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, ResultatPictofloraVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
@UiField |
Panel panneauPagination, panneauPaginationHaut, zoneTri; |
@UiField |
HTMLPanel imageTable; |
@UiField |
Button triParNbVotesAscendant, triParNbVotesDescendant, triParDateAscendant, triParDateDescendant, triParNbTagsAscendant, triParNbTagsDescendant; |
@UiField |
Label aucunResultat; |
@UiField |
Label labelVote, labelDate, labelTag; |
@UiField |
ListBox listeProtocoles; |
// Constructeur |
public ResultatPictofloraVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
/** |
* Nettoie et remet à zéro les composants du panneau qui doivent l'être |
* */ |
public void nettoyer() { |
setNumImage(0); |
imageTable.clear(); |
panneauxImages.clear(); |
} |
public void creerPanneauxObservations(int taille) { |
panneauxImages.clear(); |
for (int i = 0; i < taille; i++) { |
Panel imagePanel = new HTMLPanel(""); |
panneauxImages.add(imagePanel); |
} |
} |
public void afficherElementsAucunResultatTrouve() { |
imageTable.clear(); |
aucunResultat.setVisible(true); |
panneauPaginationHaut.setVisible(false); |
panneauPagination.setVisible(false); |
zoneTri.setVisible(false); |
} |
public void afficherElementsResultatsTrouve() { |
aucunResultat.setVisible(false); |
panneauPaginationHaut.setVisible(true); |
panneauPagination.setVisible(true); |
zoneTri.setVisible(true); |
} |
public void setNumImage(int numImage) { |
this.numImage = numImage; |
} |
public void startChargement() { |
panneauChargement.setHeight((this.getOffsetHeight() - (panneauPagination.getOffsetHeight() * 2)) + "px"); |
panneauChargement.setVisible(true); |
} |
public void stopChargement() { |
panneauChargement.setVisible(false); |
} |
public HTMLPanel getImageTable() { |
return imageTable; |
} |
public int getNumImage() { |
return numImage; |
} |
public Panel getPanneauChargement() { |
return panneauChargement; |
} |
public Panel getPanneauPagination() { |
return panneauPagination; |
} |
public Panel getPanneauPaginationHaut() { |
return panneauPaginationHaut; |
} |
public int getNbImagesPerPage() { |
return nbImagesPerPage; |
} |
public List<HasWidgets> getPanneauxImages() { |
return panneauxImages; |
} |
public Button getTriParNbVotesAscendant() { |
return triParNbVotesAscendant; |
} |
public Button getTriParNbVotesDescendant() { |
return triParNbVotesDescendant; |
} |
public Button getTriParDateAscendant() { |
return triParDateAscendant; |
} |
public Button getTriParDateDescendant() { |
return triParDateDescendant; |
} |
public void setListeProtocoles(ListBox listeProtocoles) { |
this.listeProtocoles = listeProtocoles; |
} |
public HasChangeHandlers getListeProtocoles() { |
return listeProtocoles; |
} |
public void ajouterProtocole(String NomProtocole, String idProtocole) { |
listeProtocoles.addItem(NomProtocole, idProtocole); |
} |
public void selectionnerProtocole(int index) { |
listeProtocoles.setSelectedIndex(index); |
} |
@Override |
public String getNomProtocoleSelectionne() { |
return listeProtocoles.getItemText((listeProtocoles.getSelectedIndex())); |
} |
@Override |
public int getIdProtocoleSelectionne() { |
return Integer.parseInt(listeProtocoles.getValue((listeProtocoles.getSelectedIndex()))); |
} |
@Override |
public Label getLabelVote() { |
return labelVote; |
} |
@Override |
public void masquerVoteAscendant() { |
triParNbVotesAscendant.setVisible(false); |
} |
@Override |
public void masquerVoteDescendant() { |
triParNbVotesDescendant.setVisible(false); |
} |
@Override |
public void afficherVoteAscendant() { |
triParNbVotesAscendant.setVisible(true); |
} |
@Override |
public void afficherVoteDescendant() { |
triParNbVotesDescendant.setVisible(true); |
} |
@Override |
public Label getLabelDate() { |
return labelDate; |
} |
@Override |
public Label getLabelTag() { |
return labelTag; |
} |
@Override |
public void masquerDateAscendant() { |
triParDateAscendant.setVisible(false); |
} |
@Override |
public void masquerDateDescendant() { |
triParDateDescendant.setVisible(false); |
} |
@Override |
public void afficherDateAscendant() { |
triParDateAscendant.setVisible(true); |
} |
@Override |
public void afficherDateDescendant() { |
triParDateDescendant.setVisible(true); |
} |
@Override |
public HasClickHandlers getTriParNbTagsAscendant() { |
return triParNbTagsAscendant; |
} |
@Override |
public HasClickHandlers getTriParNbTagsDescendant() { |
return triParNbTagsDescendant; |
} |
@Override |
public void afficherTagAscendant() { |
triParNbTagsAscendant.setVisible(true); |
} |
@Override |
public void masquerTagAscendant() { |
triParNbTagsAscendant.setVisible(false); |
} |
@Override |
public void afficherTagDescendant() { |
triParNbTagsDescendant.setVisible(true); |
} |
@Override |
public void masquerTagDescendant() { |
triParNbTagsDescendant.setVisible(false); |
} |
@Override |
public void ajouterProtocoles(List<Protocole> protocoles) { |
SelectElement selectElement = SelectElement.as(listeProtocoles.getElement()); |
NodeList<OptionElement> options = selectElement.getOptions(); |
for (int i = 0; i < protocoles.size(); i++) { |
listeProtocoles.addItem(protocoles.get(i).getNom(), protocoles.get(i).getId()+""); |
options.getItem(i).setTitle(protocoles.get(i).getDescription()); |
} |
} |
@Override |
public void mettreAJourDescriptionProtocoleCourant( |
Protocole protocoleCourant) { |
listeProtocoles.setTitle(protocoleCourant.getDescription()); |
} |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictoflora.css |
---|
New file |
0,0 → 1,80 |
.contenuResultat { |
text-align: center; |
} |
.barreNavigation { |
max-width: 810px; |
margin-top: -15px; |
padding-bottom: 20px |
} |
.votes { |
padding-left: 10px; |
padding-top: 3px; |
cursor: pointer; |
} |
.date { |
padding-left: 10px; |
padding-top: 3px; |
cursor: pointer; |
} |
.tag { |
padding-left: 10px; |
padding-top: 3px; |
cursor: pointer; |
} |
.zoneTri { |
padding-left: 10px; |
float: right; |
} |
.labeltri { |
padding-top: 3px; |
} |
.protocoles { |
padding-left: 10px; |
} |
.paginationHaut { |
} |
.images { |
width: 100%; |
clear: left; |
margin-top: 10px; |
margin-left:15px; |
} |
.images>div { |
float: left; |
margin: 0 20px 50px 0px |
} |
.boutonTriAsc,.boutonTriDesc { |
border: none; |
cursor: pointer; |
} |
.boutonTriAsc:hover,.boutonTriDesc:hover { |
border:dotted 1px #8EB533; |
border-width:0 0 1px 0; |
} |
.boutonTriAsc { |
height: 19px; |
background: url(./img/fleche-haut.png) no-repeat |
} |
.boutonTriDesc { |
height: 19px; |
background: url(./img/fleche-bas.png) no-repeat |
} |
.aucunResultat { |
text-align: left; |
} |
/trunk/src/org/tela_botanica/del/client/vues/pictoflora/resultats/ResultatPictofloraVue.ui.xml |
---|
New file |
0,0 → 1,44 |
<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="ResultatPictoflora.css" /> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<g:HTMLPanel styleName="{style.contenuResultat}"> |
<g:HTMLPanel styleName="{style.barreNavigation} limiteMax limiteMin"> |
<g:VerticalPanel ui:field="panneauPaginationHaut" styleName="gauche {style.paginationHaut}" /> |
<g:HTMLPanel styleName="gauche {style.protocoles}"> |
<g:ListBox ui:field="listeProtocoles" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="zoneTri" styleName="gauche {style.zoneTri} petit"> |
<g:Label text="{constants.tri}" styleName="gauche {style.labeltri}"/> |
<g:HTMLPanel ui:field="triParNbVotes" styleName="gauche"> |
<g:Label text="{constants.triParNbVotes}" styleName="gauche {style.votes}" ui:field="labelVote"/> |
<g:Button title="{constants.triParNbVotesAscendant}" ui:field="triParNbVotesAscendant" styleName="{style.boutonTriAsc} gauche" /> |
<g:Button title="{constants.triParNbVotesDescendant}" ui:field="triParNbVotesDescendant" styleName="{style.boutonTriDesc} gauche" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="triParDate" styleName="gauche"> |
<g:Label text="{constants.triParDate}" styleName="gauche {style.date}" ui:field="labelDate"/> |
<g:Button title="{constants.triParDateAscendant}" ui:field="triParDateAscendant" styleName="{style.boutonTriAsc} gauche" /> |
<g:Button title="{constants.triParDateDescendant}" ui:field="triParDateDescendant" styleName="{style.boutonTriDesc} gauche" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="triParNbTags" styleName="gauche"> |
<g:Label text="{constants.triParNbTags}" styleName="gauche {style.tag}" ui:field="labelTag"/> |
<g:Button title="{constants.triParNbTagsAscendant}" ui:field="triParNbTagsAscendant" styleName="{style.boutonTriAsc} gauche" /> |
<g:Button title="{constants.triParNbTagsDescendant}" ui:field="triParNbTagsDescendant" styleName="{style.boutonTriDesc} gauche" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:VerticalPanel ui:field="panneauChargement"> |
<g:Image url="./img/wait.gif"></g:Image> |
</g:VerticalPanel> |
<g:Label ui:field="aucunResultat" styleName="{style.aucunResultat}" text="{constants.aucunResultat}" visible="false" /> |
<g:HTMLPanel ui:field="imageTable" styleName="{style.images}" /> |
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel> |
<g:VerticalPanel ui:field="panneauPagination" styleName="limiteMax limiteMin"/> |
</g:HTMLPanel> |
</ui:UiBinder> |