/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/preferences/preferences.css |
---|
New file |
0,0 → 1,57 |
.conteneurPreferences { |
z-index: 1500; |
padding: 30px; |
padding-right: 21px; |
padding-top: 20px; |
background: white; |
width: 370px; |
margin: 0 auto; |
margin-top: 75px; |
padding-bottom:50px; |
} |
.messageTemporaire { |
font-style: italic; |
} |
.boutonSauvegarder:hover { |
background-color: #AAA |
} |
.colonneGauche,.colonneDroite { |
width: 300px; |
} |
.colonneGauche { |
padding-right: 30px |
} |
.colonneGauche select { |
width: 100% |
} |
.colonneGauche input { |
width: 95% |
} |
.boutonSauvegarder { |
border: solid 1px #AAA; |
cursor: pointer; |
float: left; |
margin-top: 10px; |
margin-bottom: 5px; |
margin-right: 5px; |
float: right; |
background: url(./img/add.png) no-repeat 5px 7px #DDD; |
padding: 5px; |
padding-left: 25px; |
cursor: pointer |
} |
.zoneMailsMesObs { |
margin-bottom: 10px; |
} |
.zoneMailsToutesObs { |
margin-bottom: 10px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/preferences/PreferencesVue.ui.xml |
---|
New file |
0,0 → 1,29 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui'> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="preferences.css" /> |
<g:HTMLPanel styleName="{style.conteneurPreferences}"> |
<g:Label text="{constants.preferences}" styleName="titre"/> |
<g:Label styleName="petit {style.messageTemporaire}" text="{constants.messageTemporaireMails}" /> |
<g:HTML><br /></g:HTML> |
<g:VerticalPanel ui:field="panneauChargement"> |
<g:Image url="./img/wait.gif"></g:Image> |
</g:VerticalPanel> |
<g:HTMLPanel styleName="{style.colonneGauche}" ui:field="conteneurChamps"> |
<g:HTMLPanel styleName="{style.zoneMailsMesObs}"> |
<g:Label text="{constants.recevoirMailsMesObs}" styleName="petit" /> |
<g:CheckBox ui:field="recevoirMailsMesObs"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneMailsToutesObs}"> |
<g:Label text="{constants.recevoirMailsToutesObs}" styleName="petit" /> |
<g:CheckBox ui:field="recevoirMailsToutesObs"/> |
</g:HTMLPanel> |
<g:Button text="{constants.sauvegarder}" ui:field="boutonSauvegarderPreferences" styleName="{style.boutonSauvegarder} arrondi"/> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/preferences/PreferencesPresenteur.java |
---|
New file |
0,0 → 1,89 |
package org.tela_botanica.del.client.composants.preferences; |
import java.util.HashMap; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences; |
import org.tela_botanica.del.client.services.rest.PreferencesService; |
import org.tela_botanica.del.client.services.rest.async.ListePreferencesCallback; |
import org.tela_botanica.del.client.services.rest.async.ModificationPreferencesCallback; |
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; |
public class PreferencesPresenteur extends Presenteur { |
private Vue vue; |
private PreferencesService preferencesService; |
private HashMap<String, String> preferences = null; |
public interface Vue extends IsWidget { |
public void afficherMessageChargement(); |
public void cacherMessageChargement(); |
public String getValeurRecevoirMailsMesObs(); |
public String getValeurRecevoirMailsToutesObs(); |
public void setValeurRecevoirMailsMesObs(boolean valeur); |
public void setValeurRecevoirMailsToutesObs(boolean valeur); |
public HasClickHandlers getBoutonSauvegarder(); |
} |
public PreferencesPresenteur(Vue vue, PreferencesService preferencesService) { |
this.vue = vue; |
this.preferencesService = preferencesService; |
gererEvenements(); |
} |
@Override |
public void go(HasWidgets composite) { |
preferences = CacheClient.getInstance().getUtilisateur().getPreferences(); |
if (preferences == null) { |
preferencesService.chargerPreferences(CacheClient.getInstance().getUtilisateur(), new ListePreferencesCallback() { |
@Override |
public void surRetour(java.util.HashMap<String, String> objetRetour) { |
preferences = objetRetour; |
CacheClient.getInstance().getUtilisateur().setPreferences(objetRetour); |
affecterValeursChamps(preferences); |
vue.cacherMessageChargement(); |
} |
}); |
} else { |
vue.cacherMessageChargement(); |
affecterValeursChamps(preferences); |
} |
composite.add(vue.asWidget()); |
} |
private void affecterValeursChamps(HashMap<String, String> preferences) { |
vue.setValeurRecevoirMailsMesObs(getPreferenceBool(preferences.get("mail_notification_mes_obs"))); |
vue.setValeurRecevoirMailsToutesObs(getPreferenceBool(preferences.get("mail_notification_toutes_obs"))); |
} |
private boolean getPreferenceBool(String valeur) { |
return (valeur.equals("1")) ? true : false; |
} |
@Override |
protected void gererEvenements() { |
vue.getBoutonSauvegarder().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
vue.afficherMessageChargement(); |
preferences.put("mail_notification_mes_obs", vue.getValeurRecevoirMailsMesObs()); |
preferences.put("mail_notification_toutes_obs", vue.getValeurRecevoirMailsToutesObs()); |
preferencesService.modifierPreferences(CacheClient.getInstance().getUtilisateur(), preferences, new ModificationPreferencesCallback() { |
@Override |
public void surRetour(String objetRetour) { |
vue.cacherMessageChargement(); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPreferences()); |
} |
}); |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/preferences/PreferencesVue.java |
---|
New file |
0,0 → 1,73 |
package org.tela_botanica.del.client.composants.preferences; |
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.CheckBox; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class PreferencesVue extends Composite implements PreferencesPresenteur.Vue { |
@UiField |
Panel panneauChargement, conteneurChamps; |
@UiField |
public CheckBox recevoirMailsMesObs; |
@UiField |
public CheckBox recevoirMailsToutesObs; |
@UiField |
public Button boutonSauvegarderPreferences; |
interface PreferencesVueUIiBinder extends UiBinder<Widget, PreferencesVue> { |
}; |
PreferencesVueUIiBinder uiBinder = GWT.create(PreferencesVueUIiBinder.class); |
public PreferencesVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void afficherMessageChargement() { |
panneauChargement.setHeight(this.getOffsetHeight()+"px"); |
panneauChargement.setVisible(true); |
conteneurChamps.setVisible(false); |
} |
@Override |
public void cacherMessageChargement() { |
panneauChargement.setVisible(false); |
conteneurChamps.setVisible(true); |
} |
@Override |
public void setValeurRecevoirMailsMesObs(boolean valeur) { |
recevoirMailsMesObs.setValue(valeur); |
} |
@Override |
public void setValeurRecevoirMailsToutesObs(boolean valeur) { |
recevoirMailsToutesObs.setValue(valeur); |
} |
@Override |
public String getValeurRecevoirMailsMesObs() { |
return (recevoirMailsMesObs.getValue()) ? "1" : "0"; |
} |
@Override |
public String getValeurRecevoirMailsToutesObs() { |
return (recevoirMailsToutesObs.getValue()) ? "1" : "0"; |
} |
@Override |
public HasClickHandlers getBoutonSauvegarder() { |
return boutonSauvegarderPreferences; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesEnLigneVue.ui.xml |
---|
New file |
0,0 → 1,75 |
<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="metadonneesEnLigne.css" /> |
<g:HTMLPanel styleName="{style.metadonnees}"> |
<g:HTMLPanel styleName="{style.metaPart1}"> |
<g:HTMLPanel styleName="{style.espece}"> |
<g:Label ui:field="nomRetenu" title="Voir la fiche eFlore" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.nomCommun}"> |
<g:Label ui:field="nomCommun" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label text="référentiel" styleName="{style.label}" /> |
<g:Label ui:field="referentiel" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label text="observée à" styleName="{style.label}" /> |
<g:Label ui:field="localite" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label text="le" styleName="{style.label}" /> |
<g:InlineLabel ui:field="dateReleve" /> |
</g:HTMLPanel> |
<br/> |
<g:HTMLPanel> |
<g:Label text="par" styleName="{style.label}" /> |
<g:Label ui:field="auteur" title="Voir le profil" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
(<g:Anchor ui:field="courrielAuteur" />) |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.metaPart2}"> |
<g:HTMLPanel styleName="{style.zoneLieu}"> |
<g:Label text="Lieu :" styleName="{style.labelGeo}"/> |
<g:HTML ui:field="lieuDit" styleName="{style.lieuDit}" title="{constants.lieuDit}" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneStation}"> |
<g:Label text="Station :" styleName="{style.labelGeo}"/> |
<g:Label ui:field="station" title="{constants.station}" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneMilieu}"> |
<g:Label text="Milieu :" styleName="{style.labelGeo}"/> |
<g:Label ui:field="milieu" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.metaPart3}"> |
<g:HTMLPanel styleName="{style.famille}"> |
<g:Label ui:field="famille" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label ui:field="motsClefs" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label ui:field="numNomenclatural" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label ui:field="commentaire" /> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label text="Publié le" styleName="{style.label}" /> |
<g:InlineLabel ui:field="dateTransmission" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesPresenteur.java |
---|
New file |
0,0 → 1,331 |
package org.tela_botanica.del.client.composants.metadonnees; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.ModeRecherche; |
import org.tela_botanica.del.client.modeles.Observation; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.detailsimage.EvenementRechercheImage; |
import org.tela_botanica.del.client.navigation.evenement.rechercheobservation.EvenementRechercheObservation; |
import org.tela_botanica.del.client.utils.UtilitairesServiceResultat; |
import com.google.gwt.core.shared.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.i18n.client.DateTimeFormat; |
import com.google.gwt.user.client.History; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class MetadonneesPresenteur extends Presenteur { |
public abstract interface Vue extends IsWidget { |
public HasText getNomRetenu(); |
public HasClickHandlers getLienNomRetenu(); |
public HasText getNomCommun(); |
public HasText getFamille(); |
public HasText getLocalite(); |
public HasText getLieuDit(); |
public HasText getMilieu(); |
public HasText getCommentaire(); |
public HasText getAuteur(); |
public HasText getCourrielAuteur(); |
public void setCourrielAuteurHref(String courriel); |
public HasText getDateTransmission(); |
public HasText getMotsClefs(); |
public HasText getNumNomenclatural(); |
public HasText getDateReleve(); |
public HasClickHandlers getLienFamille(); |
public HasClickHandlers getLienAuteur(); |
public HasClickHandlers getLienCourrielAuteur(); |
public HasClickHandlers getLienDateTransmission(); |
public HasClickHandlers getLienDateReleve(); |
public HasClickHandlers getLienLocalite(); |
public HasClickHandlers getLienMotsClefs(); |
public HasClickHandlers getLienNumNomenclatural(); |
public HasClickHandlers getLienNomCommun(); |
public HasClickHandlers getLienMilieu(); |
public HasClickHandlers getLienCommentaire(); |
public void setStation(String station) ; |
public void masquerChampsVides(); |
public void activerLiens(); |
public void activerLienAuteur(); |
public void activerLienNomRetenu(); |
public void setLienIdentiplante(String id); |
void desactiverLienAuteur(); |
public HasText getReferentiel(); |
public void afficherCourrielAuteur(); |
public void cacherCourrielAuteur(); |
} |
private Vue vue; |
private Observation observation; |
private ModeRecherche modeRecherche; |
private boolean avecLiens; |
public MetadonneesPresenteur(Vue vue, Observation observation, ModeRecherche modeRecherche, boolean avecLiens) { |
this.vue = vue; |
this.modeRecherche = modeRecherche; |
setObservation(observation); |
this.avecLiens = avecLiens; |
} |
public void setObservation(Observation observation) { |
this.observation = observation; |
} |
public void chargerMetaDonnees() { |
vue.getNomRetenu().setText(observation.getNomRetenu()); |
vue.getNomCommun().setText(observation.getNomCommun()); |
vue.getReferentiel().setText(observation.getReferentiel()); |
vue.getFamille().setText(observation.getFamille()); |
vue.getLocalite().setText(observation.getLocaliteAvecIdFormatee()); |
vue.getLieuDit().setText(observation.getLieuDit()); |
vue.setStation(observation.getStation()); |
vue.getMilieu().setText(observation.getMilieu()); |
vue.getCommentaire().setText(observation.getCommentaire()); |
vue.getAuteur().setText(observation.getAuteur()); |
vue.getDateTransmission().setText(formaterDate(observation.getDateTransmission())); |
vue.getDateReleve().setText(formaterDate(observation.getDateReleve())); |
gererAffichageCourrielAuteur(); |
// ATTENTION : Masquer champs vide doit se faire en dernier ! |
vue.masquerChampsVides(); |
} |
public String formaterDate(String dateNonFormatee) { |
try { |
String dateFormatee = DateTimeFormat.getFormat("dd/MM/yyyy").format(UtilitairesServiceResultat.parserDateObservation(dateNonFormatee)); |
dateFormatee = (dateFormatee == "01/01/1970") ? "???" : dateFormatee ; |
return dateFormatee; |
} catch (IllegalArgumentException e) { |
return ""; |
} |
} |
@Override |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
chargerMetaDonnees(); |
gererEvenements(); |
} |
@Override |
protected void gererEvenements() { |
if (this.avecLiens) { |
if (!observation.getIdAuteur().equals("0")) { |
vue.getLienAuteur().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setAuteur(vue.getAuteur().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
} |
vue.getLienDateReleve().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setDate(vue.getDateReleve().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienDateTransmission().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setDate(vue.getDateReleve().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienFamille().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setFamille(vue.getFamille().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienLocalite().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setCommune(vue.getLocalite().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienMotsClefs().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setMotClef(vue.getMotsClefs().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienNomCommun().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setRechercheLibre(vue.getNomCommun().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienNomRetenu().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setRechercheLibre(vue.getNomRetenu().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienMilieu().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setRechercheLibre(vue.getMilieu().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.getLienCommentaire().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
InformationsRecherche informationsRecherche = new InformationsRecherche(); |
informationsRecherche.setRechercheLibre(vue.getCommentaire().getText()); |
setInfosRechercheEnCacheEtLancerEvenement(informationsRecherche); |
History.fireCurrentHistoryState(); |
} |
}); |
vue.setLienIdentiplante(this.observation.getId()); |
vue.activerLiens(); |
if (observation.getIdAuteur().equals("0")) { |
vue.desactiverLienAuteur(); |
} |
} else { |
if (! observation.getIdAuteur().equals("0")) { |
vue.getLienAuteur().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
Config config = new Config(); |
Window.open(config.getUrl("profil") + observation.getIdAuteur(), "Consultation de l'annuaire", config.getInfo("popupOptions")); |
} |
}); |
vue.activerLienAuteur(); |
} |
if (observation.getNumNomenclatural() != null && ! observation.getNumNomenclatural().equals("0") && ! observation.getNumNomenclatural().equals("")) { |
vue.activerLienNomRetenu(); |
vue.getLienNomRetenu().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
Config config = new Config(); |
String efloreUrlFicheTpl = config.getUrl("efloreTaxon"); |
String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", observation.getReferentiel()+"-nn-"+observation.getNumNomenclatural()); |
Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions")); |
} |
}); |
} |
} |
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() { |
@Override |
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) { |
gererAffichageCourrielAuteur(); |
} |
}); |
} |
public void gererAffichageCourrielAuteur() { |
GWT.log("Auteur courrriel :"+observation.getCourrielAuteur()); |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
if (utilisateur.etreAdmin()) { |
vue.getCourrielAuteur().setText(observation.getCourrielAuteur()); |
vue.setCourrielAuteurHref(observation.getCourrielAuteur()); |
vue.afficherCourrielAuteur(); |
} else { |
vue.getCourrielAuteur().setText(""); |
vue.setCourrielAuteurHref(""); |
vue.cacherCourrielAuteur(); |
} |
} |
public void setInfosRechercheEnCacheEtLancerEvenement(InformationsRecherche informationsRecherche) { |
switch (modeRecherche) { |
case MODE_IMAGE: |
CacheClient.getInstance().setPageCouranteRechercheImages(1); |
CacheClient.getInstance().setInformationsRechercheImage(informationsRecherche); |
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheImage()); |
break; |
case MODE_OBSERVATION: |
CacheClient.getInstance().setPageCouranteRechercheObservations(1); |
CacheClient.getInstance().setInformationsRechercheObservation(informationsRecherche); |
BusEvenementiel.getInstance().fireEvent(new EvenementRechercheObservation()); |
default: |
break; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesVue.java |
---|
New file |
0,0 → 1,228 |
package org.tela_botanica.del.client.composants.metadonnees; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.gestionhistorique.ConstantesNavigation; |
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.Window; |
import com.google.gwt.user.client.ui.Anchor; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.Hyperlink; |
import com.google.gwt.user.client.ui.InlineLabel; |
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 MetadonneesVue extends Composite implements MetadonneesPresenteur.Vue { |
// Gestion d'UiBinder |
interface Binder extends UiBinder<Widget, MetadonneesVue> { |
} |
private static Binder binder = GWT.create(Binder.class); |
@UiField |
Label nomRetenu, famille, auteur, localite, motsClefs, numNomenclatural, nomCommun, commentaire, milieu, station, referentiel; |
@UiField |
Anchor courrielAuteur; |
@UiField |
HTML lieuDit; |
@UiField |
Panel zoneStation; |
@UiField |
InlineLabel dateReleve, dateTransmission; |
@UiField |
Anchor lienIdentiplante; |
public MetadonneesVue() { |
initWidget(binder.createAndBindUi(this)); |
// Le lien ne doit être affiché que sur pictoflora |
String urlCourante = Window.Location.getHref(); |
Config config = new Config(); |
String urlAppliImg = config.getUrl("pictoflora"); |
if (!urlCourante.contains(urlAppliImg)) { |
lienIdentiplante.setVisible(false); |
} |
} |
public HasText getNomRetenu() { |
return this.nomRetenu; |
} |
public HasText getFamille() { |
return this.famille; |
} |
public HasText getAuteur() { |
return this.auteur; |
} |
public HasText getCourrielAuteur() { |
return this.courrielAuteur; |
} |
public void setCourrielAuteurHref(String courriel) { |
this.courrielAuteur.setHref("mailto:"+courriel); |
} |
public HasText getDateTransmission() { |
return this.dateTransmission; |
} |
public HasText getDateReleve() { |
return this.dateReleve; |
} |
public HasText getLocalite() { |
return this.localite; |
} |
public HasText getMotsClefs() { |
return this.motsClefs; |
} |
public HasText getNumNomenclatural() { |
return this.numNomenclatural; |
} |
public HasText getNomCommun() { |
return nomCommun; |
} |
public HasText getLieuDit() { |
return lieuDit; |
} |
public HasText getMilieu() { |
return milieu; |
} |
public HasText getCommentaire() { |
return commentaire; |
} |
@Override |
public HasClickHandlers getLienNomRetenu() { |
return nomRetenu; |
} |
public HasClickHandlers getLienFamille() { |
return this.famille; |
} |
public HasClickHandlers getLienAuteur() { |
return this.auteur; |
} |
public HasClickHandlers getLienCourrielAuteur() { |
return this.courrielAuteur; |
} |
public HasClickHandlers getLienDateTransmission() { |
return this.dateTransmission; |
} |
public HasClickHandlers getLienDateReleve() { |
return this.dateReleve; |
} |
public HasClickHandlers getLienLocalite() { |
return this.localite; |
} |
public HasClickHandlers getLienMotsClefs() { |
return this.motsClefs; |
} |
public HasClickHandlers getLienNumNomenclatural() { |
return this.numNomenclatural; |
} |
public HasClickHandlers getLienNomCommun() { |
return nomCommun; |
} |
public HasClickHandlers getLienMilieu() { |
return milieu; |
} |
public HasClickHandlers getLienCommentaire() { |
return commentaire; |
} |
@Override |
public void masquerChampsVides() { |
HasText[] champs = {nomRetenu, nomCommun, famille, localite, auteur, motsClefs, commentaire, milieu, lieuDit, dateReleve, dateTransmission}; |
for (int i = 0; i < champs.length; i ++) { |
HasText champ = champs[i]; |
if ("".equals(champ.getText())) { |
Widget widget = (Widget) champ; |
widget.getParent().setVisible(false); |
} |
} |
} |
@Override |
public void setStation(String station) { |
if (station.equals("")) { |
this.zoneStation.setVisible(false); |
} else { |
this.station.setText(station); |
} |
} |
public void activerLiens() { |
dateReleve.addStyleName("labelLien"); |
nomRetenu.addStyleName("labelLien"); |
famille.addStyleName("labelLien"); |
auteur.addStyleName("labelLien"); |
localite.addStyleName("labelLien"); |
motsClefs.addStyleName("labelLien"); |
nomCommun.addStyleName("labelLien"); |
commentaire.addStyleName("labelLien"); |
milieu.addStyleName("labelLien"); |
} |
@Override |
public void activerLienAuteur() { |
auteur.addStyleName("labelLien"); |
} |
@Override |
public void desactiverLienAuteur() { |
auteur.removeStyleName("labelLien"); |
} |
public void setLienIdentiplante(String id) { |
lienIdentiplante.setHref(CacheClient.getInstance().getUrlPageSignalerMauvaiseId(id)); |
lienIdentiplante.setTarget("_blank"); |
} |
@Override |
public HasText getReferentiel() { |
return referentiel; |
} |
@Override |
public void activerLienNomRetenu() { |
// TODO Auto-generated method stub |
} |
public void afficherCourrielAuteur() { |
courrielAuteur.setVisible(true); |
} |
public void cacherCourrielAuteur() { |
courrielAuteur.setVisible(false); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesEnLigneVue.java |
---|
New file |
0,0 → 1,202 |
package org.tela_botanica.del.client.composants.metadonnees; |
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.Anchor; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.Hyperlink; |
import com.google.gwt.user.client.ui.InlineLabel; |
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 MetadonneesEnLigneVue extends Composite implements MetadonneesPresenteur.Vue { |
// Gestion d'UiBinder |
interface Binder extends UiBinder<Widget, MetadonneesEnLigneVue> { |
} |
private static Binder binder = GWT.create(Binder.class); |
@UiField |
Label nomRetenu, famille, auteur, localite, motsClefs, numNomenclatural, nomCommun, commentaire, milieu, station, referentiel; |
@UiField |
Anchor courrielAuteur; |
@UiField |
HTML lieuDit; |
@UiField |
InlineLabel dateReleve, dateTransmission; |
public MetadonneesEnLigneVue() { |
initWidget(binder.createAndBindUi(this)); |
} |
public HasText getNomRetenu() { |
return this.nomRetenu; |
} |
public HasText getFamille() { |
return this.famille; |
} |
public HasText getAuteur() { |
return this.auteur; |
} |
public HasText getCourrielAuteur() { |
return courrielAuteur; |
} |
public void setCourrielAuteurHref(String courriel) { |
this.courrielAuteur.setHref("mailto:"+courriel); |
} |
public HasText getDateTransmission() { |
return this.dateTransmission; |
} |
public HasText getDateReleve() { |
return this.dateReleve; |
} |
public HasText getLocalite() { |
return this.localite; |
} |
public HasText getMotsClefs() { |
return this.motsClefs; |
} |
public HasText getNumNomenclatural() { |
return this.numNomenclatural; |
} |
public HasText getNomCommun() { |
return nomCommun; |
} |
public HasText getLieuDit() { |
return lieuDit; |
} |
public HasText getMilieu() { |
return milieu; |
} |
public HasText getCommentaire() { |
return commentaire; |
} |
@Override |
public HasClickHandlers getLienNomRetenu() { |
return nomRetenu; |
} |
public HasClickHandlers getLienFamille() { |
return this.famille; |
} |
public HasClickHandlers getLienAuteur() { |
return this.auteur; |
} |
public HasClickHandlers getLienCourrielAuteur() { |
return this.courrielAuteur; |
} |
public HasClickHandlers getLienDateTransmission() { |
return this.dateTransmission; |
} |
public HasClickHandlers getLienDateReleve() { |
return this.dateReleve; |
} |
public HasClickHandlers getLienLocalite() { |
return this.localite; |
} |
public HasClickHandlers getLienMotsClefs() { |
return this.motsClefs; |
} |
public HasClickHandlers getLienNumNomenclatural() { |
return this.numNomenclatural; |
} |
public HasClickHandlers getLienNomCommun() { |
return nomCommun; |
} |
public HasClickHandlers getLienMilieu() { |
return milieu; |
} |
public HasClickHandlers getLienCommentaire() { |
return commentaire; |
} |
@Override |
public void masquerChampsVides() { |
HasText[] champs = {nomRetenu, referentiel, nomCommun, famille, localite, auteur, courrielAuteur, motsClefs, commentaire, lieuDit, station, milieu, dateReleve, dateTransmission}; |
for (int i = 0; i < champs.length; i ++) { |
HasText champ = champs[i]; |
if ("".equals(champ.getText().trim())) { |
Widget widget = (Widget) champ; |
widget.getParent().setVisible(false); |
} |
} |
} |
@Override |
public void setStation(String station) { |
if (station.equals("")) { |
this.station.setVisible(false); |
} else { |
this.station.setText(station); |
} |
} |
@Override |
public void activerLiens() { |
} |
@Override |
public void activerLienAuteur() { |
auteur.addStyleName("labelLien"); |
} |
@Override |
public void activerLienNomRetenu() { |
nomRetenu.addStyleName("labelLien"); |
} |
@Override |
public void desactiverLienAuteur() { |
auteur.removeStyleName("labelLien"); |
} |
public void setLienIdentiplante(String id) {} |
@Override |
public HasText getReferentiel() { |
return referentiel; |
} |
public void afficherCourrielAuteur() { |
courrielAuteur.getParent().setVisible(true); |
courrielAuteur.setVisible(true); |
} |
public void cacherCourrielAuteur() { |
courrielAuteur.getParent().setVisible(false); |
courrielAuteur.setVisible(false); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/metadonnees.css |
---|
New file |
0,0 → 1,77 |
.metadonnees { |
width:100%; |
overflow:hidden; |
} |
.metadonnees .donnee { |
display: inline-block; |
} |
.labelNomRetenu { |
display: none |
} |
.nomRetenu { |
display: none; |
font-size: 15px; |
color: #598000; |
width: 170px; |
overflow: auto; |
white-space: nowrap; |
text-overflow: ellipsis; |
} |
.lieuDuReleve { |
display: block; |
} |
.zoneFamille { |
display: none; |
margin-top: 1em; |
} |
.zoneReferentiel { |
margin-top: 1em; |
} |
.labelReferentiel { |
display: inline; |
} |
.zoneFamille div { |
display: inline; |
} |
.zoneLocalite { |
margin-top:5px; |
} |
.zoneLocalite div { |
} |
.zoneLieuDit { |
display: inline; |
} |
.zoneStation { |
display: inline; |
} |
.zoneMilieu { |
display: inline; |
} |
.zoneMilieu div { |
display: inline |
} |
.zoneCommentaire { |
margin-top:5px; |
} |
.zoneCommentaire div { |
} |
.commentaire { |
display: block; |
height: 94px; |
overflow: auto; |
text-overflow: ellipsis |
} |
.zoneDateReleve { |
} |
.zoneAuteur { |
} |
.zoneAuteur div { |
display: inline |
} |
.zoneDate { |
display: none |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/metadonneesEnLigne.css |
---|
New file |
0,0 → 1,59 |
.metadonnees { |
width:100%; |
} |
.metadonnees div { |
float:left; |
padding:0 3px 0 0; |
} |
.zoneReferentiel { |
margin-top:1em; |
} |
.famille { |
display:none; |
} |
.nomCommun { |
} |
.nomCommun:before { |
content:"("; |
} |
.nomCommun:after { |
content:")"; |
} |
.metaPart1 { |
line-height:20px; |
clear:both; |
font-size:15px; |
} |
.metaPart2 { |
line-height:20px; |
clear:both; |
color:#777; |
max-width:850px; |
} |
.metaPart3 { |
line-height:20px; |
display:none; |
max-width:850px; |
} |
.lieuDit { |
} |
.zoneLieu { |
} |
.zoneStation { |
padding-left: 5px; |
} |
.zoneMilieu { |
padding-left: 5px; |
} |
.labelGeo { |
font-weight:bold; |
} |
.espece { |
color:#454341; |
font-size:18px; |
margin-top:-2px; |
} |
.label { |
font-size:12px; |
margin-top:3px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/metadonnees/MetadonneesVue.ui.xml |
---|
New file |
0,0 → 1,93 |
<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="metadonnees.css" /> |
<g:HTMLPanel styleName="{style.metadonnees}"> |
<!-- Date du relevé --> |
<g:HTMLPanel ui:field="zoneDateReleve" styleName="{style.zoneDateReleve}"> |
<g:InlineLabel styleName="petit gris" text="{constants.observeLe}" /> |
<g:InlineLabel ui:field="dateReleve" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Nom retenu --> |
<g:HTMLPanel ui:field="zoneNomRetenu"> |
<g:Label styleName="petit gris {style.labelNomRetenu}" text="{constants.nomRetenu}" /> |
<g:Label ui:field="nomRetenu" styleName="{style.nomRetenu} gras" /> |
</g:HTMLPanel> |
<!-- Nom commun --> |
<g:HTMLPanel ui:field="zoneNomCommun"> |
<g:Label styleName="petit gris" text="{constants.nomCommun}" /> |
<g:Label ui:field="nomCommun" /> |
</g:HTMLPanel> |
<!-- Référentiel --> |
<g:HTMLPanel ui:field="zoneReferentiel" styleName="{style.zoneReferentiel}"> |
<g:Label styleName="petit gris {style.labelReferentiel}" text="{constants.referentiel}" /> |
<g:Label ui:field="referentiel" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Famille --> |
<g:HTMLPanel ui:field="zoneFamille" styleName="{style.zoneFamille}"> |
<g:Label styleName="petit gris" text="{constants.metadonneeFamille}" /> |
<g:Label ui:field="famille" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Lieu --> |
<g:HTMLPanel ui:field="zoneLocalite" styleName="{style.zoneLocalite}"> |
<g:Label styleName="petit gris {style.lieuDuReleve}" text="{constants.lieuDuReleve}" /> |
<g:Label ui:field="localite" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Lieu-dit --> |
<g:HTMLPanel ui:field="zoneLieuDit" styleName="{style.zoneLieuDit}"> |
<g:HTML ui:field="lieuDit"/> |
</g:HTMLPanel> |
<!-- Station --> |
<g:HTMLPanel ui:field="zoneStation" styleName="{style.zoneStation}"> |
<g:Label ui:field="station"/> |
</g:HTMLPanel> |
<!-- Milieu --> |
<g:HTMLPanel ui:field="zoneMilieu" styleName="{style.zoneMilieu}"> |
<g:Label ui:field="milieu"/> |
</g:HTMLPanel> |
<!-- Commentaire --> |
<g:HTMLPanel ui:field="zoneCommentaire" styleName="{style.zoneCommentaire}"> |
<g:Label styleName="petit gris" text="{constants.commentaire}" /> |
<g:Label ui:field="commentaire" styleName="{style.commentaire}"/> |
</g:HTMLPanel> |
<!-- Publié par --> |
<g:HTMLPanel ui:field="zoneAuteur" styleName="{style.zoneAuteur}"> |
<g:Label styleName="petit gris" text="{constants.par}" /> |
<g:Label ui:field="auteur" styleName="{style.donnee}" title="Voir le profil" /> |
<g:Anchor ui:field="courrielAuteur" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Date de transmission --> |
<g:HTMLPanel ui:field="zoneDate" styleName="{style.zoneDate}"> |
<g:InlineLabel styleName="petit gris" text="{constants.dateTransmission}" /> |
<g:InlineLabel ui:field="dateTransmission" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<!-- Mots-clés/Tag --> |
<g:HTMLPanel ui:field="zoneMotsClefs"> |
<g:Label styleName="petit gris" text="{constants.motsClefs}" /> |
<g:Label ui:field="motsClefs" styleName="{style.donnee}"/> |
</g:HTMLPanel> |
<g:Label ui:field="numNomenclatural" /> |
<g:Anchor ui:field="lienIdentiplante" text="{constants.signalerIdentification}" styleName="labelLien"/> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/images/detailImage.css |
---|
New file |
0,0 → 1,23 |
.detailImage { |
z-index:1500; |
padding: 5px 5px 50px; |
width:600px; |
background:white; |
margin:0 auto; |
margin-top:75px; |
} |
.detailImage > *{ |
width: inherit; |
height: inherit; |
} |
.superpositionImage { |
position: absolute; |
} |
.superpositionImage:hover { |
background-image: url("img/plein_ecran.png"); |
background-position: bottom 10px left 10px; |
background-repeat: no-repeat; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/images/DetailImageVue.ui.xml |
---|
New file |
0,0 → 1,13 |
<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="detailImage.css" /> |
<g:HTMLPanel styleName="{style.detailImage}"> |
<g:HTML ui:field="superpositionImage" styleName="{style.superpositionImage}"> |
</g:HTML> |
<g:Image ui:field="photoPrincipale" /> |
<g:HTML ui:field="texteAlternatif"/> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/images/DetailImagePresenteur.java |
---|
New file |
0,0 → 1,31 |
package org.tela_botanica.del.client.composants.images; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.modeles.Image; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class DetailImagePresenteur extends Presenteur { |
public abstract interface Vue extends IsWidget { |
public abstract void chargerImage(Image image); |
} |
public Vue vue; |
public DetailImagePresenteur(Image image, Vue vue) { |
this.vue = vue; |
this.vue.chargerImage(image); |
} |
@Override |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
} |
@Override |
protected void gererEvenements() { |
// TODO Auto-generated method stub |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/images/DetailImageVue.java |
---|
New file |
0,0 → 1,122 |
package org.tela_botanica.del.client.composants.images; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.dom.client.DivElement; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.LoadEvent; |
import com.google.gwt.event.dom.client.LoadHandler; |
import com.google.gwt.event.dom.client.MouseOutEvent; |
import com.google.gwt.event.dom.client.MouseOutHandler; |
import com.google.gwt.event.dom.client.MouseOverEvent; |
import com.google.gwt.event.dom.client.MouseOverHandler; |
import com.google.gwt.event.logical.shared.ResizeEvent; |
import com.google.gwt.event.logical.shared.ResizeHandler; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.Widget; |
public class DetailImageVue extends Composite implements DetailImagePresenteur.Vue { |
// Gestion d'UiBinder |
interface Binder extends UiBinder<Widget, DetailImageVue> { |
} |
private static Binder binder = GWT.create(Binder.class); |
@UiField |
protected Image photoPrincipale; |
@UiField |
protected HTML superpositionImage; |
@UiField |
protected HTML texteAlternatif; |
public DetailImageVue() { |
initWidget(binder.createAndBindUi(this)); |
photoPrincipale.addLoadHandler(new LoadHandler() { |
@Override |
public void onLoad(LoadEvent event) { |
setTailleOptimale(); |
} |
}); |
Window.addResizeHandler(new ResizeHandler() { |
Timer resizeTimer = new Timer() { |
@Override |
public void run() { |
setTailleOptimale(); |
} |
}; |
@Override |
public void onResize(ResizeEvent event) { |
resizeTimer.cancel(); |
resizeTimer.schedule(250); |
} |
}); |
} |
public void chargerImage(org.tela_botanica.del.client.modeles.Image imageCourante) { |
setUrlImage(imageCourante.getUrlFormat("L")); |
//setTitle(imageCourante.getUrlFormat("L")); |
setTitle("Cliquer pour ouvrir l'image originale dans un nouvel onglet"); |
setTexteAlternatif("<strong> "+I18n.getVocabulary().imageNumero()+""+ imageCourante.getIdImage() +" - "+ imageCourante.getObservation().getNomRetenuFormateReferentiel() + " " + I18n.getVocabulary().par() + " " + imageCourante.getObservation().getAuteur() + "</strong><br />" |
+ I18n.getVocabulary().publiee() + " "+ imageCourante.getObservation().getDateReleve() + " - " + imageCourante.getObservation().getLocaliteAvecIdFormatee()); |
final String urlImageOriginale = imageCourante.getUrlFormat("O"); |
// ouvre l'image originale dans un nouvel onglet, en attendant un futur outil de zoom |
superpositionImage.addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
Window.open(urlImageOriginale, "_blank", ""); |
} |
}); |
} |
public void setUrlImage(String urlImage) { |
photoPrincipale.setUrl(urlImage); |
} |
public void setTexteAlternatif(String texteAlternatif) { |
this.texteAlternatif.setHTML(texteAlternatif); |
} |
public void setTailleOptimale() { |
double fenetreH = Window.getClientHeight(); |
double fenetreW = Window.getClientWidth(); |
double photoH = photoPrincipale.getHeight(); |
double photoW = photoPrincipale.getWidth(); |
double rapport = 0; |
double reduction = 150; |
if(photoH > (fenetreH - reduction) || photoW > (fenetreW - reduction)) { |
if(photoH >= (fenetreH - reduction)) { |
rapport = photoW/photoH; |
photoH = fenetreH-reduction; |
photoW = photoH*rapport; |
} |
if(photoW >= (fenetreW - reduction)) { |
rapport = photoH/photoW; |
photoW = fenetreW-reduction; |
photoH = photoW*rapport; |
} |
} |
setWidth(photoW+"px"); |
setHeight(photoH+"px"); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/partageurl/partagerUrl.css |
---|
New file |
0,0 → 1,39 |
.zonePartageUrl { |
display:inline-block; |
} |
.zonePartage { |
background:none repeat scroll 0 0 white; |
border:2px solid #8EB533; |
padding:10px 50px 10px 10px; |
position:absolute; |
} |
.titre { |
margin-top:0; |
} |
.partage { |
background:none repeat scroll 0 0 #87A4F9; |
border:medium none; |
border-radius:10px 10px 10px 10px; |
color:white; |
cursor:pointer; |
font-size:14px; |
padding:4px 10px; |
text-decoration:none; |
width:130px; |
} |
.url { |
width:90%; |
margin-top:5px; |
} |
.fermer { |
background:url("./img/close.png") no-repeat scroll 39px -2px transparent; |
cursor:pointer; |
font-size:11px; |
margin-left:411px; |
margin-top:-99px; |
padding-bottom:8px; |
padding-right:53px; |
padding-top:5px; |
position:absolute; |
width:16px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlVue.ui.xml |
---|
New file |
0,0 → 1,22 |
<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="partagerUrl.css" /> |
<g:HTMLPanel> |
<g:HTMLPanel> |
<g:Label ui:field="partage" styleName="{style.partage}">Partager cette page</g:Label> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePartage} ombre-faible" ui:field="zonePartage"> |
<g:Label styleName="titre {style.titre}">Partager cette page</g:Label> |
<g:Label>Partager le résultat de votre recherche en copiant l'adresse ci-dessous :</g:Label> |
<g:TextBox styleName="{style.url}" ui:field="url"></g:TextBox> |
<g:Label ui:field="fermer" styleName="{style.fermer}">Fermer</g:Label> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlPresenteur.java |
---|
New file |
0,0 → 1,55 |
package org.tela_botanica.del.client.composants.partageurl; |
import org.tela_botanica.del.client.cache.CacheClient; |
import com.google.gwt.core.shared.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.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class PartageUrlPresenteur { |
public abstract interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public void masquerFormulaire(); |
public void afficherFormulaire(); |
public HasClickHandlers getBoutonPartage(); |
public HasClickHandlers getFermer(); |
public void setUrl(String url); |
} |
private Vue vue; |
public PartageUrlPresenteur(Vue vue) { |
this.vue = vue; |
vue.masquerFormulaire(); |
gererEvenements(); |
} |
public void gererEvenements() { |
vue.getFermer().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
vue.masquerFormulaire(); |
} |
}); |
vue.getBoutonPartage().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
String url = CacheClient.getInstance().genererUrlCourante(); |
GWT.log("URL partagée :"+url); |
vue.setUrl(url); |
vue.afficherFormulaire(); |
} |
}); |
} |
public void go(HasWidgets composite) { |
vue.ajouterVue(composite); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/partageurl/PartageUrlVue.java |
---|
New file |
0,0 → 1,55 |
package org.tela_botanica.del.client.composants.partageurl; |
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.HasWidgets; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class PartageUrlVue extends Composite implements PartageUrlPresenteur.Vue{ |
@UiField Panel zonePartage; |
@UiField Label fermer, partage; |
@UiField TextBox url; |
interface Binder extends UiBinder<Widget, PartageUrlVue> {} |
private static Binder uiBinder = GWT.create(Binder.class); |
public PartageUrlVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
@Override |
public void masquerFormulaire() { |
zonePartage.setVisible(false); |
} |
@Override |
public void afficherFormulaire() { |
zonePartage.setVisible(true); |
} |
public HasClickHandlers getFermer() { |
return fermer; |
} |
@Override |
public HasClickHandlers getBoutonPartage() { |
return partage; |
} |
public void setUrl(String url) { |
this.url.setText(url); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/rss/RssVue.ui.xml |
---|
New file |
0,0 → 1,11 |
<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="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<g:HTMLPanel> |
<g:HTML ui:field="lien" styleName="lienRss"> LIEN RSS ></g:HTML> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/rss/RssPresenteur.java |
---|
New file |
0,0 → 1,63 |
package org.tela_botanica.del.client.composants.rss; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.Observation; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class RssPresenteur extends Presenteur { |
// Définition de la vue |
public abstract interface Vue extends IsWidget { |
void setLien(String lien); |
void setLabelLien(String label); |
} |
// Variables |
private Vue vue; |
private String lien = ""; |
private Config config = new Config(); |
//Constructeur |
public RssPresenteur(Vue vue) { |
this.vue = vue; |
} |
public RssPresenteur(Vue vue, InformationsRecherche recherche, String label) { |
this.vue = vue; |
vue.setLabelLien(label); |
genererLien(recherche); |
} |
public RssPresenteur(Vue vue, Observation observation, String label) { |
this.vue = vue; |
vue.setLabelLien(label); |
genererLien(observation); |
} |
public void genererLien(InformationsRecherche recherche) { |
this.lien = config.getUrl("rss") + recherche.versChaineRequete(); |
gererEvenements(); |
} |
public void genererLien(Observation observation) { |
String idObs = observation.getId(); |
this.lien = config.getUrl("rss") + "&masque.observation=" + idObs; |
} |
@Override |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
@Override |
protected void gererEvenements() { |
vue.setLien(this.lien); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/rss/RssVue.java |
---|
New file |
0,0 → 1,41 |
package org.tela_botanica.del.client.composants.rss; |
import org.tela_botanica.del.client.composants.rss.RssPresenteur.Vue; |
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.Composite; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.Widget; |
public class RssVue extends Composite implements Vue { |
// Composants |
@UiField |
HTML lien; |
// Variables |
String label = ""; |
// Interface pour l'association au XML |
interface Binder extends UiBinder<Widget, RssVue> { |
} |
private static Binder uiBinder = GWT.create(Binder.class); |
// Constructeur de la vue |
public RssVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
public void setLien(String lien) { |
String lienHtml = "<a href=\"" + lien + "\" target=\"_blank\">" + label + "</a>"; |
this.lien.setHTML(lienHtml); |
} |
public void setLabelLien(String label) { |
this.label = label; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votefleur/voteFleur.css |
---|
New file |
0,0 → 1,23 |
.fleur { |
width:28px; |
height:27px; |
} |
.ZeroPetales { |
background:url(./img/fleurs/fleur0.png); |
} |
.UnPetale { |
background:url(./img/fleurs/fleur1.png); |
} |
.DeuxPetales { |
background:url(./img/fleurs/fleur2.png); |
} |
.TroisPetales { |
background:url(./img/fleurs/fleur3.png); |
} |
.QuatrePetales { |
background:url(./img/fleurs/fleur4.png); |
} |
.CinqPetales { |
background:url(./img/fleurs/fleur5.png); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurVue.ui.xml |
---|
New file |
0,0 → 1,16 |
<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="voteFleur.css" /> |
<g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur0" styleName="{style.fleur} {style.ZeroPetales}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur1" styleName="{style.fleur} {style.UnPetale}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur2" styleName="{style.fleur} {style.DeuxPetales}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur3" styleName="{style.fleur} {style.TroisPetales}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur4" styleName="{style.fleur} {style.QuatrePetales}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="fleur5" styleName="{style.fleur} {style.CinqPetales}"></g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurPresenteur.java |
---|
New file |
0,0 → 1,33 |
package org.tela_botanica.del.client.composants.votefleur; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class VoteFleurPresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public void setNote(int note); |
} |
private Vue vue; |
public VoteFleurPresenteur(Vue vue) { |
this.vue = vue; |
} |
public void go(HasWidgets composite) { |
composite.clear(); |
composite.add(vue.asWidget()); |
} |
public void setNote(int note) { |
vue.setNote(note); |
} |
@Override |
protected void gererEvenements() { |
// TODO Auto-generated method stub |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votefleur/VoteFleurVue.java |
---|
New file |
0,0 → 1,56 |
package org.tela_botanica.del.client.composants.votefleur; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur.Vue; |
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.Composite; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class VoteFleurVue extends Composite implements Vue { |
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("ObservationVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, VoteFleurVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
@UiField |
protected HTMLPanel fleur0, fleur1, fleur2, fleur3, fleur4, fleur5; |
public VoteFleurVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
initialiserVue(); |
} |
public void initialiserVue() { |
this.fleur0.setVisible(false); |
this.fleur1.setVisible(false); |
this.fleur2.setVisible(false); |
this.fleur3.setVisible(false); |
this.fleur4.setVisible(false); |
this.fleur5.setVisible(false); |
} |
public void setNote(int note) { |
switch (note) { |
case 0 : this.fleur0.setVisible(true); |
break; |
case 1 : this.fleur1.setVisible(true); |
break; |
case 2 : this.fleur2.setVisible(true); |
break; |
case 3 : this.fleur3.setVisible(true); |
break; |
case 4 : this.fleur4.setVisible(true); |
break; |
default : this.fleur5.setVisible(true); |
break; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEfloreVue.java |
---|
New file |
0,0 → 1,38 |
package org.tela_botanica.del.client.composants.formulairerechercheeflore; |
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.HasText; |
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 FormulaireRechercheEfloreVue extends Composite { |
@UiField(provided = true) |
public Button boutonValidationRechercheObservation = new Button(); |
@UiField |
public Panel propositionTaxon; |
interface FormulaireRechercheEfloreUIiBinder extends UiBinder<Widget, FormulaireRechercheEfloreVue> { |
}; |
FormulaireRechercheEfloreUIiBinder uiBinder = GWT.create(FormulaireRechercheEfloreUIiBinder.class); |
public FormulaireRechercheEfloreVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
public Button getBoutonValidationRechercheObservation() { |
return boutonValidationRechercheObservation; |
} |
public Panel getPropositionTaxon() { |
return propositionTaxon; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/formulaireRechercheEflore.css |
---|
New file |
0,0 → 1,4 |
.propositionTaxon { |
width: 150px; |
height: 30px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEfloreVue.ui.xml |
---|
New file |
0,0 → 1,18 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui'> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="formulaireRechercheEflore.css" /> |
<g:VerticalPanel> |
<g:Label text="{constants.comparer}" styleName="sousTitre"/> |
<g:Label text="{constants.infoComparer}" styleName="petit"/> |
<g:HTML><br /></g:HTML> |
<g:HorizontalPanel > |
<g:HTMLPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" /> |
<g:Button text="{constants.ok}" ui:field="boutonValidationRechercheObservation" /> |
</g:HorizontalPanel> |
</g:VerticalPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulairerechercheeflore/FormulaireRechercheEflorePresenteur.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.client.composants.formulairerechercheeflore; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.comparaisoneflore.EvenementComparaisonEflore; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.user.client.ui.HasWidgets; |
public class FormulaireRechercheEflorePresenteur { |
private FormulaireRechercheEfloreVue formulaireRechercheEfloreVue = new FormulaireRechercheEfloreVue(); |
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur; |
public FormulaireRechercheEflorePresenteur() { |
creerCompletionTaxons(); |
} |
public void go(HasWidgets composite) { |
autoCompletionNomTaxonsPresenteur.go(formulaireRechercheEfloreVue.getPropositionTaxon()); |
composite.add(formulaireRechercheEfloreVue); |
gererEvenements(); |
} |
private void gererEvenements() { |
formulaireRechercheEfloreVue.getBoutonValidationRechercheObservation().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
lancerRechercheEflore(); |
} |
}); |
autoCompletionNomTaxonsPresenteur.getAutoCompletionComboBoxVue().getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
@Override |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
lancerRechercheEflore(); |
} |
} |
}); |
} |
private void creerCompletionTaxons() { |
String url = new Config().getServiceBaseUrl() + "nomstaxons"; |
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) { |
protected String effectuerPreTraitementChaineRequete(String requete) { |
requete = "?masque.nom=" + requete; |
return UtilitairesAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceSlash(requete); |
} |
@Override |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
} |
private void lancerRechercheEflore() { |
CacheClient.getInstance().setTaxonPourRechercheEflore(autoCompletionNomTaxonsPresenteur.getValeur()); |
EvenementComparaisonEflore evenementComparaisonEflore = new EvenementComparaisonEflore(autoCompletionNomTaxonsPresenteur.getValeur()); |
BusEvenementiel.getInstance().fireEvent(evenementComparaisonEflore); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/observations/ObservationImagesVue.ui.xml |
---|
New file |
0,0 → 1,13 |
<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="observationimages.css" /> |
<g:HTMLPanel styleName="{style.zonePhotos}"> |
<g:Image ui:field="photoPrincipale" styleName="{style.photoPrincipale}"/> |
<g:HTMLPanel ui:field="photos" styleName="{style.photos}"></g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/observations/ObservationImagesPresenteur.java |
---|
New file |
0,0 → 1,151 |
package org.tela_botanica.del.client.composants.observations; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilanteVue; |
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.presenteur.Presenteur; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.Observation; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.EvenementChangementImageValidation; |
import org.tela_botanica.del.client.navigation.evenement.changementimagevalidation.GestionnaireEvenementChangementImageValidation; |
import org.tela_botanica.del.client.navigation.evenement.validationobservation.EvenementValidation; |
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.event.shared.HandlerRegistration; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class ObservationImagesPresenteur extends Presenteur { |
public abstract interface Vue extends IsWidget { |
public HasClickHandlers getPhotoPrincipale(); |
public HasWidgets getPhotos(); |
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image); |
public void ajouterPhoto(Image image, ClickHandler gestionnaireClic); |
public void afficherLienPlateformeValidation(); |
public HTML getLienPlateforme(); |
public HandlerRegistration setImgPrincipaleClicGestionnaire(ClickHandler gestionnaireClic); |
} |
private Vue vue; |
private Observation observation; |
private Image imagePrincipale; |
private List<Image> listeImages; |
public ObservationImagesPresenteur(Vue vue, Observation observation, Image imagePrincipale) { |
this.observation = observation; |
this.vue = vue; |
this.imagePrincipale = imagePrincipale; |
} |
public void chargerImagesObservation() { |
listeImages = observation.getImages(); |
if (imagePrincipale != null) { |
vue.chargerImagePrincipale(imagePrincipale); |
vue.setImgPrincipaleClicGestionnaire(creerGestionnaireClicGalerieImages(0, imagePrincipale)); |
} |
String urlCourante = Window.Location.getHref(); |
Config config = new Config(); |
String urlAppliObs = config.getUrl("identiplante"); |
int indexImage = 0; |
for (Image imageCourante : listeImages) { |
vue.ajouterPhoto(imageCourante, creerGestionnaireClicChangementImagePrincipale(indexImage, imageCourante)); |
indexImage++; |
if (urlCourante.contains(urlAppliObs) && indexImage >= 5) { |
vue.afficherLienPlateformeValidation(); |
break; |
} |
} |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
chargerImagesObservation(); |
gererEvenements(); |
} |
protected void gererEvenements() { |
vue.getLienPlateforme().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent arg0) { |
BusEvenementiel.getInstance().fireEvent(new EvenementValidation(observation)); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementImageValidation.TYPE, new GestionnaireEvenementChangementImageValidation() { |
@Override |
public void onChangementImage(EvenementChangementImageValidation event) { |
if (CacheClient.getInstance().getImageCourante().getObservation().getId().equals(observation.getId())) { |
GWT.log("Reception event Chgmt img index :"+event.indexImage); |
vue.chargerImagePrincipale(CacheClient.getInstance().getImageCourante()); |
vue.setImgPrincipaleClicGestionnaire(creerGestionnaireClicGalerieImages(event.indexImage, imagePrincipale)); |
} |
} |
}); |
} |
protected ClickHandler creerGestionnaireClicGalerieImages(final int indexImage, final Image imageCourante) { |
ClickHandler gestionnaireClic = new ClickHandler() { |
public void onClick(ClickEvent event) { |
FenetreOverlayDefilantePresenteur presenteurGalerie = new FenetreOverlayDefilantePresenteur(indexImage, new FenetreOverlayDefilanteVue()) { |
@Override |
public void surClicBoutonSuivant() { |
int index = getIndexElementAffiche() + 1; |
if (index >= listeImages.size()) { |
index = 0; |
} |
setContenuFenetreModale(index, new DetailImagePresenteur(listeImages.get(index), new DetailImageVue())); |
} |
@Override |
public void surClicBoutonPrecedent() { |
int index = getIndexElementAffiche() - 1; |
if (index < 0) { |
index = listeImages.size() - 1; |
} |
setContenuFenetreModale(index, new DetailImagePresenteur(listeImages.get(index), new DetailImageVue())); |
} |
}; |
presenteurGalerie.ouvrirFenetreModaleDefilante(indexImage, new DetailImagePresenteur(listeImages.get(indexImage), new DetailImageVue())); |
presenteurGalerie.afficherBoutonsSuivantsPrecedents((listeImages.size() > 1)); |
} |
}; |
return gestionnaireClic; |
} |
protected ClickHandler creerGestionnaireClicChangementImagePrincipale(final int indexImage, final Image imageCourante) { |
ClickHandler gestionnaireClic = new ClickHandler() { |
public void onClick(ClickEvent event) { |
CacheClient.getInstance().setImageCourante(imageCourante); |
EvenementChangementImageValidation chgmtImgEvent = new EvenementChangementImageValidation(); |
chgmtImgEvent.indexImage = indexImage; |
BusEvenementiel.getInstance().fireEvent(chgmtImgEvent); |
} |
}; |
return gestionnaireClic; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/observations/ObservationImagesVue.java |
---|
New file |
0,0 → 1,101 |
package org.tela_botanica.del.client.composants.observations; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.shared.HandlerRegistration; |
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.Image; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class ObservationImagesVue extends Composite implements ObservationImagesPresenteur.Vue { |
// Gestion d'UiBinder |
interface Binder extends UiBinder<Widget, ObservationImagesVue> { |
} |
private static Binder binder = GWT.create(Binder.class); |
@UiField |
protected Image photoPrincipale; |
@UiField |
protected Panel photos; |
protected HTML lienPlateforme = new HTML(">>>"); |
private HandlerRegistration imgPrincipaleClicGestionnaire; |
public ObservationImagesVue() { |
initWidget(binder.createAndBindUi(this)); |
} |
public void chargerImagePrincipale(org.tela_botanica.del.client.modeles.Image image) { |
setUrlImagePrincipale(image.getUrlFormat("CRS")); |
setTitreImagePrincipale(image.getUrlFormat("L")); |
setAltTextImagePrincipale(image.getObservation().getAuteur() + " - " + image.getObservation().getNomRetenuFormateReferentiel()); |
} |
@Override |
public void ajouterPhoto(org.tela_botanica.del.client.modeles.Image imageCourante, ClickHandler gestionnaireClic) { |
Image photo = new Image(); |
photo.setUrl(imageCourante.getUrlFormat("CRX2S")); |
photo.setTitle(imageCourante.getUrlFormat("L")); |
photo.setAltText(""); |
photo.addClickHandler(gestionnaireClic); |
getPhotos().add(photo); |
} |
public void afficherLienPlateformeValidation(){ |
getPhotos().add(lienPlateforme); |
lienPlateforme.setStyleName("suiteImages"); |
} |
public void setUrlImagePrincipale(String url) { |
photoPrincipale.setUrl(url); |
} |
public void setTitreImagePrincipale(String titre) { |
photoPrincipale.setTitle(titre); |
} |
public void setAltTextImagePrincipale(String altText) { |
photoPrincipale.setAltText(altText); |
} |
public String getUrlImagePrincipale() { |
return photoPrincipale.getUrl(); |
} |
public String getTitreImagePrincipale() { |
return photoPrincipale.getTitle(); |
} |
public String getAltTextImagePrincipale() { |
return photoPrincipale.getAltText(); |
} |
public Image getPhotoPrincipale() { |
return photoPrincipale; |
} |
public Panel getPhotos() { |
return photos; |
} |
public HTML getLienPlateforme() { |
return lienPlateforme; |
} |
public HandlerRegistration setImgPrincipaleClicGestionnaire(ClickHandler gestionnaireClic) { |
if (imgPrincipaleClicGestionnaire != null) { |
imgPrincipaleClicGestionnaire.removeHandler(); |
} |
imgPrincipaleClicGestionnaire = photoPrincipale.addClickHandler(gestionnaireClic); |
return imgPrincipaleClicGestionnaire; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/observations/observationimages.css |
---|
New file |
0,0 → 1,21 |
.zonePhotos { |
} |
.photoPrincipale { |
height: 250px; |
float: left; |
cursor: pointer |
} |
.photos { |
float: left |
} |
.photos img { |
display: block; |
height: 40px; |
width: 40px; |
padding: 0 5px 5px 5px; |
cursor: pointer |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImagePresenteur.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.EvenementAjoutMotCleImage; |
import org.tela_botanica.del.client.services.rest.MotsClesService; |
import org.tela_botanica.del.client.services.rest.async.AjoutMotsClesImageCallback; |
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.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireSaisieMotsClesImagePresenteur { |
private MotsClesService motsClesService; |
private String idImage; |
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonValider(); |
public HasText getSaisieMotsCles(); |
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers(); |
public void focuserChampSaisie(); |
} |
private Vue vue; |
public FormulaireSaisieMotsClesImagePresenteur(String idImage, MotsClesService motsClesService, Vue vue) { |
this.vue = vue; |
this.motsClesService = motsClesService; |
this.idImage = idImage; |
gererEvenements(); |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
} |
private void gererEvenements() { |
vue.getBoutonValider().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
validerSaisie(); |
} |
}); |
vue.getSaisieMotsClesHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
validerSaisie(); |
} |
} |
}); |
} |
private void validerSaisie() { |
String texte = vue.getSaisieMotsCles().getText(); |
if(texte != null && !texte.isEmpty()) { |
motsClesService.ajouterMotCleImage(idImage, vue.getSaisieMotsCles().getText(), new AjoutMotsClesImageCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
EvenementAjoutMotCleImage event = new EvenementAjoutMotCleImage(idImage); |
BusEvenementiel.getInstance().fireEvent(event); |
} |
}); |
} |
} |
public void viderChampSaisie() { |
vue.getSaisieMotsCles().setText(""); |
} |
public void focuserChampSaisie() { |
vue.focuserChampSaisie(); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.java |
---|
New file |
0,0 → 1,52 |
package org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
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.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireSaisieMotsClesImageVue extends Composite implements FormulaireSaisieMotsClesImagePresenteur.Vue { |
@UiField |
public TextBox saisieMotsCles; |
@UiField |
public Button valider; |
interface MyUiBinder extends UiBinder<Widget, FormulaireSaisieMotsClesImageVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public FormulaireSaisieMotsClesImageVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public HasClickHandlers getBoutonValider() { |
return valider; |
} |
@Override |
public HasText getSaisieMotsCles() { |
return saisieMotsCles; |
} |
@Override |
public HasKeyPressHandlers getSaisieMotsClesHasKeyPressHandlers() { |
return saisieMotsCles; |
} |
@Override |
public void focuserChampSaisie() { |
saisieMotsCles.setFocus(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireMotsClesImage.css |
---|
New file |
0,0 → 1,16 |
.espece { |
font-size: 12px; |
font-weight: bold; |
color: white; |
padding-left: 5px; |
padding-right: 1px; |
} |
.aideSaisie p { |
padding: 0px; |
margin: 0px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: pre; |
min-height: 13px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/formulairesaisiemotclesimages/FormulaireSaisieMotsClesImageVue.ui.xml |
---|
New file |
0,0 → 1,15 |
<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="FormulaireMotsClesImage.css" /> |
<g:HTMLPanel> |
<g:HTML styleName="petit {style.aideSaisie}" text="{constants.aideSaisieMotCle}"></g:HTML> |
<g:TextBox ui:field="saisieMotsCles"></g:TextBox> |
<g:Button text="{constants.ok}" ui:field="valider"></g:Button> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImage.css |
---|
New file |
0,0 → 1,43 |
.titrePanneau p { |
padding: 0px; |
margin: 0px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: pre; |
min-height: 13px; |
} |
.titrePanneau { |
font-size: 12px; |
font-weight: bold; |
color: white; |
padding-left: 5px; |
padding-right: 1px; |
} |
.panneauSaisieMotsCles { |
margin-bottom: 3px; |
padding-top:30px; |
} |
.fenetreMotsCles { |
z-index:1500; |
padding: 5px 10px 10px 30px; |
width:860px; |
background:white; |
margin:0 auto; |
margin-top:75px; |
} |
.colonneDroite { |
margin-left: 14px; |
} |
.zoneIconesMotsCles { |
padding:5px; |
width:535px; |
} |
.listeMotsClesExistants { |
max-width:350px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCle.css |
---|
New file |
0,0 → 1,31 |
.conteneurMotCle { |
display: inline-block; |
margin-right: 3px; |
} |
.motCle { |
border: 1px solid grey; |
background-color: #DDD; |
padding: 2px; |
line-height: 25px; |
border-radius:5px; |
} |
.suppressionMotCle { |
display: inline; |
border: 1px solid grey; |
border-left: none; |
background-color: #555; |
padding: 2px; |
padding-left: 4px; |
margin-left: -3px; |
line-height: 25px; |
cursor: pointer; |
color: red; |
border-top-right-radius: 5px; |
border-bottom-right-radius: 5px; |
} |
.suppressionMotCle:hover { |
background-color: #888; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.ui.xml |
---|
New file |
0,0 → 1,11 |
<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="MotCle.css" /> |
<g:FocusPanel styleName="{style.conteneurMotCle}" ui:field="conteneurMotCle"><g:HTMLPanel><g:InlineHTML styleName="{style.motCle}" ui:field="motCle" /><g:FocusPanel styleName="invisible {style.suppressionMotCle}" ui:field="suppressionMotCle" ><g:InlineHTML>X</g:InlineHTML></g:FocusPanel></g:HTMLPanel></g:FocusPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotClePresenteur.java |
---|
New file |
0,0 → 1,71 |
package org.tela_botanica.del.client.composants.motsclesimages.motcle; |
import com.google.gwt.event.dom.client.BlurEvent; |
import com.google.gwt.event.dom.client.BlurHandler; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.ClickHandler; |
import com.google.gwt.event.dom.client.FocusEvent; |
import com.google.gwt.event.dom.client.FocusHandler; |
import com.google.gwt.event.dom.client.HasBlurHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasFocusHandlers; |
import com.google.gwt.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
import com.google.gwt.event.dom.client.MouseOutEvent; |
import com.google.gwt.event.dom.client.MouseOutHandler; |
import com.google.gwt.event.dom.client.MouseOverEvent; |
import com.google.gwt.event.dom.client.MouseOverHandler; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public abstract class MotClePresenteur { |
String motCle; |
String idMotCle; |
public interface Vue extends IsWidget { |
HasClickHandlers getZoneSuppressionMotCle(); |
void afficherZoneSuppression(); |
void cacherZoneSuppression(); |
HasMouseOverHandlers getZoneMotCleMouseHover(); |
HasMouseOutHandlers getZoneMotCleMouseOut(); |
} |
private Vue vue; |
public MotClePresenteur(Vue vue, String motCleText, String motCleId) { |
this.vue = vue; |
this.idMotCle = motCleId; |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
public void gererEvenements() { |
vue.getZoneSuppressionMotCle().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surSuppression(idMotCle); |
} |
}); |
vue.getZoneMotCleMouseHover().addMouseOverHandler(new MouseOverHandler() { |
@Override |
public void onMouseOver(MouseOverEvent event) { |
vue.afficherZoneSuppression(); |
} |
}); |
vue.getZoneMotCleMouseOut().addMouseOutHandler(new MouseOutHandler() { |
@Override |
public void onMouseOut(MouseOutEvent event) { |
vue.cacherZoneSuppression(); |
} |
}); |
} |
public abstract void surSuppression(String idMotCle); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/motcle/MotCleVue.java |
---|
New file |
0,0 → 1,69 |
package org.tela_botanica.del.client.composants.motsclesimages.motcle; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasBlurHandlers; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasFocusHandlers; |
import com.google.gwt.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
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.FocusPanel; |
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.InlineHTML; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class MotCleVue extends Composite implements MotClePresenteur.Vue { |
@UiField |
public InlineHTML motCle; |
@UiField |
public FocusPanel suppressionMotCle; |
@UiField |
public FocusPanel conteneurMotCle; |
interface MyUiBinder extends UiBinder<Widget, MotCleVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public MotCleVue(String mot) { |
initWidget(uiBinder.createAndBindUi(this)); |
motCle.setText(mot); |
suppressionMotCle.setTitle(I18n.getVocabulary().indiceSupprimerMotCle()); |
} |
@Override |
public HasClickHandlers getZoneSuppressionMotCle() { |
return suppressionMotCle; |
} |
@Override |
public void afficherZoneSuppression() { |
suppressionMotCle.removeStyleName("invisible"); |
} |
@Override |
public void cacherZoneSuppression() { |
suppressionMotCle.addStyleName("invisible"); |
} |
@Override |
public HasMouseOverHandlers getZoneMotCleMouseHover() { |
return conteneurMotCle; |
} |
@Override |
public HasMouseOutHandlers getZoneMotCleMouseOut() { |
return conteneurMotCle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.ui.xml |
---|
New file |
0,0 → 1,31 |
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' xmlns:g='urn:import:com.google.gwt.user.client.ui'> |
<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="MotsClesImage.css" /> |
<g:HTMLPanel styleName="{style.fenetreMotsCles}"> |
<g:Label text="Saisir des mots clés" styleName="titre"/> |
<g:Image ui:field="image" styleName="gauche" /> |
<g:HTMLPanel styleName="gauche {style.colonneDroite}"> |
<g:HTML styleName="{style.titrePanneau}" text="{constants.motsCles}"></g:HTML> |
<g:HTMLPanel ui:field="zoneIconesMotsCles" styleName="{style.zoneIconesMotsCles}"> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="nettoyage"> |
<g:HTMLPanel styleName="{style.panneauSaisieMotsCles}" ui:field="saisieMotsCles"></g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.listeMotsClesExistants}"> |
<g:HTMLPanel> |
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsClesCel"></g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel> |
<g:HTMLPanel styleName="gwt-HTML" ui:field="motsCles"></g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:Button ui:field="validerMotsCles">Valider l'ajout des mots clés et fermer la fenetre</g:Button> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="nettoyage"></g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotCleProposition.css |
---|
New file |
0,0 → 1,21 |
.logoTag { |
width:30px; |
height:30px; |
margin:0 5px; |
float:right; |
} |
.motCle { |
width:80px; |
margin:5px; |
cursor:pointer; |
} |
.lienMotCle { |
background: none repeat scroll 0 0 #DDDDDD; |
border-radius: 9px 9px 9px 9px; |
height: 40px; |
margin: 2px; |
padding: 3px; |
width: 160px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.ui.xml |
---|
New file |
0,0 → 1,14 |
<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:generateLocales="default"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="MotCleProposition.css" /> |
<g:FocusPanel styleName="{style.lienMotCle} gauche motclesPicto" ui:field="lienMotCle" title="{constants.aideLiaisonMotCle}"> |
<g:HTMLPanel> |
<g:CheckBox ui:field="ajouterMotCle" text="motcle" styleName=" {style.motCle} texteMotClePicto"></g:CheckBox> |
<g:Image styleName="{style.logoTag}" ui:field="iconeTag"/> |
</g:HTMLPanel> |
</g:FocusPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionPresenteur.java |
---|
New file |
0,0 → 1,81 |
package org.tela_botanica.del.client.composants.motsclesimages.propositions; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
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.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class MotClePropositionPresenteur extends Presenteur{ |
public interface Vue extends IsWidget { |
public void setMotCle(String motcle); |
public HasClickHandlers getLienMotCle(); |
public void toggleCb(); |
public boolean estAAjouter(); |
public void setEstAAjouter(); |
public HasClickHandlers getAjouterMotCle(); |
} |
private Vue vue; |
private String motcle; |
public MotClePropositionPresenteur(Vue vue, String motCle) { |
this.vue = vue; |
this.motcle = motCle; |
vue.setMotCle(motCle); |
} |
@Override |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
@Override |
protected void gererEvenements() { |
/* Attention : dans la gestion des évènements, comme la case à cocher est contenu dans |
* le lien Mot Cle, lorsque je clique sur la case directement, l'application : |
* - change la valeur de la case suite à l'évènement sur la case |
* - rechange la valeur de la case suite à l'évènement sur le lien |
* Il est donc impossible de changer la valeur de la case ! |
* |
* La solution consiste à ajouter un changement de valeur lorsqu'on clique sur la case : |
*/ |
vue.getAjouterMotCle().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
vue.toggleCb(); |
event.stopPropagation(); |
} |
}); |
// Ajout du changement de valeur de la case lors du clic sur la case |
vue.getLienMotCle().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
vue.toggleCb(); |
event.stopPropagation(); |
} |
}); |
} |
public boolean estAAjouter() { |
return vue.estAAjouter(); |
} |
public void setEstAAjouter() { |
vue.setEstAAjouter(); |
} |
public String getTag() { |
return this.motcle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/propositions/MotClePropositionVue.java |
---|
New file |
0,0 → 1,68 |
package org.tela_botanica.del.client.composants.motsclesimages.propositions; |
import org.tela_botanica.del.client.config.Config; |
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.Window; |
import com.google.gwt.user.client.ui.CheckBox; |
import com.google.gwt.user.client.ui.Composite; |
import com.google.gwt.user.client.ui.FocusPanel; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class MotClePropositionVue extends Composite implements MotClePropositionPresenteur.Vue { |
@UiField |
CheckBox ajouterMotCle; |
@UiField |
Image iconeTag; |
@UiField |
FocusPanel lienMotCle; |
interface MyUiBinder extends UiBinder<Widget, MotClePropositionVue> {} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public MotClePropositionVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void setMotCle(String motcle) { |
ajouterMotCle.setText(motcle); |
iconeTag.setUrl((new Config()).getUrl("iconeBaseUrl") + motcle + ".png"); |
} |
public HasClickHandlers getLienMotCle() { |
return lienMotCle; |
} |
public void toggleCb() { |
boolean val = ajouterMotCle.getValue(); |
ajouterMotCle.setValue(!ajouterMotCle.getValue()); |
if(ajouterMotCle.getValue()) { |
addStyleName("motClePictoCoche"); |
} else { |
removeStyleName("motClePictoCoche"); |
} |
} |
public boolean estAAjouter() { |
return ajouterMotCle.getValue(); |
} |
public void setEstAAjouter() { |
ajouterMotCle.setValue(true); |
addStyleName("motClePictoCoche"); |
} |
public HasClickHandlers getAjouterMotCle() { |
return ajouterMotCle; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImagePresenteur.java |
---|
New file |
0,0 → 1,255 |
package org.tela_botanica.del.client.composants.motsclesimages; |
import java.util.ArrayList; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.motsclesimages.formulairesaisiemotclesimages.FormulaireSaisieMotsClesImagePresenteur; |
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotClePresenteur; |
import org.tela_botanica.del.client.composants.motsclesimages.motcle.MotCleVue; |
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionPresenteur; |
import org.tela_botanica.del.client.composants.motsclesimages.propositions.MotClePropositionVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Image; |
import org.tela_botanica.del.client.modeles.MotCle; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.EvenementAjoutMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.ajoutmotcleimage.GestionnaireEvenementAjoutMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.fermermotcleimage.EvenementFermerMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.EvenementSuppressionMotCleImage; |
import org.tela_botanica.del.client.navigation.evenement.supressionmotcleimage.GestionnaireEvenementSuppressionMotCleImage; |
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.async.AjoutMotsClesImageCallback; |
import org.tela_botanica.del.client.services.rest.async.ListeMotsClesImageCallBack; |
import org.tela_botanica.del.client.services.rest.async.SuppressionMotCleImageCallback; |
import org.tela_botanica.del.client.utils.StringUtils; |
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; |
public class MotsClesImagePresenteur extends Presenteur { |
Image image; |
List<MotCle> motsCles; |
List<String> motClesProtocoleAFiltrer = new ArrayList<String>(); |
FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur; |
final List<MotClePropositionPresenteur> presenteursMotsCles = new ArrayList<MotClePropositionPresenteur>(); |
MotsClesService motsClesService; |
int nbRetours = 0; |
int retourCourant = 0; |
int nb = 0; |
//Déclaration de la vue |
public interface Vue extends IsWidget { |
public HasWidgets getZoneMotsCles(); |
HasWidgets getZoneSaisieMotsCles(); |
void viderZoneMotsCles(); |
HasWidgets getZoneMotsClesCel(); |
public void afficherMotsClesProtocole(List<String> motsClesCelImages, List<String> motClesCelAFiltrer); |
public void setImage(String url); |
public HasWidgets getZoneIconesMotsCles(); |
public HasClickHandlers getValiderMotCles(); |
} |
private Vue vue; |
// Constructeur de l'application |
public MotsClesImagePresenteur(Image image, MotsClesService motsClesService, FormulaireSaisieMotsClesImagePresenteur formulaireSaisieMotsClesPresenteur, Vue vue) { |
this.formulaireSaisieMotsClesPresenteur = formulaireSaisieMotsClesPresenteur; |
this.vue = vue; |
this.motsClesService = motsClesService; |
this.image = image; |
vue.setImage(image.getUrl()); |
initialiserMotsClesProtocoleAFiltrer(); |
afficherMotsClesProtocole(); |
gererEvenements(); |
} |
//Afficher la vue |
public void go(HasWidgets composite) { |
formulaireSaisieMotsClesPresenteur.go(vue.getZoneSaisieMotsCles()); |
composite.add(vue.asWidget()); |
} |
protected boolean cocherMotClePropositionPresenteur(String motcle) { |
boolean motCleCoche = false; |
for (MotClePropositionPresenteur presenteurCourant : presenteursMotsCles) { |
String tagCourant = presenteurCourant.getTag(); |
if (tagCourant.equals(motcle)) { |
presenteurCourant.setEstAAjouter(); |
motCleCoche = true; |
} |
} |
return motCleCoche; |
} |
//Charger les mots clés à l'aide du service |
public void chargerMotsCles() { |
if (motsCles == null) { |
vue.viderZoneMotsCles(); |
MotsClesService motsClesService = new MotsClesServiceConcret(); |
motsClesService.getMotsClesImage(image.getIdImage(), |
new ListeMotsClesImageCallBack() { |
@Override |
public void surRetour(List<MotCle> objetRetour) { |
motsCles = objetRetour; |
afficherMotsCles(objetRetour); |
} |
}); |
} |
} |
protected void afficherMotsCles(List<MotCle> listeMotsCles) { |
this.motsCles = listeMotsCles; |
nbRetours = listeMotsCles.size(); |
Object[] tabMotsCles = motsCles.toArray(); |
for (int i = 0; i < motsCles.toArray().length; i++) { |
MotCle motCleEnCours = (MotCle) tabMotsCles[i]; |
if (!cocherMotClePropositionPresenteur(motCleEnCours.getMotCle())) { |
MotClePresenteur mcP = new MotClePresenteur(new MotCleVue(motCleEnCours.getMotCle()), motCleEnCours.getMotCle(), motCleEnCours.getIdMotCle()) { |
public void surSuppression(String idMotCle) { |
if (Window.confirm(I18n.getVocabulary().indiceSupprimerMotCle() + " ?")) { |
motsClesService.supprimerMotCleImage(idMotCle, new SuppressionMotCleImageCallback() { |
@Override |
public void surRetour(String objetRetour) { |
motsCles = null; |
chargerMotsCles(); |
} |
}); |
} |
}; |
}; |
mcP.go(vue.getZoneMotsCles()); |
} |
} |
} |
protected void afficherMotsClesProtocole() { |
List<String> motsClesCelImages = image.getMotsClefs(); |
vue.afficherMotsClesProtocole(motsClesCelImages, motClesProtocoleAFiltrer); |
} |
// Mettre le focus sur le champ de saisie, appelé par le module pictoflora |
public void focuserChampsSaisie() { |
formulaireSaisieMotsClesPresenteur.focuserChampSaisie(); |
} |
protected void initialiserMotsClesProtocoleAFiltrer() { |
//TODO voir si le cache client est bien approprié plutot que passer les infos |
// de protocole dans le constructeur |
String chaineMotsClesCelAFiltrer = CacheClient.getInstance().getProtocoleCourant().getMotsClesProtocole(); |
this.motClesProtocoleAFiltrer = new ArrayList<String>(); |
String[] tabMotsClesCelAFiltrer = chaineMotsClesCelAFiltrer.split(","); |
if(tabMotsClesCelAFiltrer.length > 0 && !tabMotsClesCelAFiltrer[0].trim().isEmpty()) { |
for (int i = 0; i < tabMotsClesCelAFiltrer.length; i++) { |
String motCle = StringUtils.normaliser(tabMotsClesCelAFiltrer[i]); |
this.motClesProtocoleAFiltrer.add(motCle); |
// ajouter à la vue |
MotClePropositionPresenteur presenteurMotCle = new MotClePropositionPresenteur(new MotClePropositionVue(), motCle); |
presenteurMotCle.go(vue.getZoneIconesMotsCles()); |
presenteursMotsCles.add(presenteurMotCle); |
} |
} |
} |
/*** |
* trouver le mot cle dans les mots clés d'origine |
* @param String motcle le mot à chercher |
* @return MotCle l'objet trouvé |
**/ |
protected MotCle trouverMotCleDorigine(String motCle) { |
MotCle motCleRetour = null; |
for (MotCle motCleCourant : motsCles) { |
String tagCourant = motCleCourant.getMotCle(); |
if (tagCourant.equals(motCle)) { |
motCleRetour = motCleCourant; |
} |
} |
return motCleRetour; |
} |
//Gérer les évènements |
protected void gererEvenements() { |
BusEvenementiel.getInstance().addHandler(EvenementAjoutMotCleImage.TYPE, new GestionnaireEvenementAjoutMotCleImage() { |
@Override |
public void onAjoutMotCleImage(EvenementAjoutMotCleImage event) { |
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) { |
motsCles = null; |
chargerMotsCles(); |
formulaireSaisieMotsClesPresenteur.viderChampSaisie(); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementSuppressionMotCleImage.TYPE, new GestionnaireEvenementSuppressionMotCleImage() { |
@Override |
public void onSuppressionMotCleImage( |
EvenementSuppressionMotCleImage event) { |
if (image != null && image.getIdImage() != null && image.getIdImage().equals(event.getIdImage())) { |
motsCles = null; |
chargerMotsCles(); |
} |
} |
}); |
vue.getValiderMotCles().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
MotsClesService motsClesService = new MotsClesServiceConcret(); |
// récupérer les valeur de toutes les cases à cocher |
for (MotClePropositionPresenteur presenteur : presenteursMotsCles) { |
if (presenteur.estAAjouter()) { |
String tag = presenteur.getTag(); |
MotCle motcle = trouverMotCleDorigine(tag); |
if (motcle == null) { |
motsClesService.ajouterMotCleImage(image.getIdImage(), tag, new AjoutMotsClesImageCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
} |
}); |
} |
} else { |
// il faut vérifier que le mot clé est à supprimer |
String tag = presenteur.getTag(); |
MotCle motcle = trouverMotCleDorigine(tag); |
if (motcle != null) { |
motsClesService.supprimerMotCleImage(motcle.getIdMotCle(), new SuppressionMotCleImageCallback() { |
@Override |
public void surRetour(String objetRetour) { |
} |
}); |
} |
} |
} |
if (nb == 0) { |
BusEvenementiel.getInstance().fireEvent(new EvenementFermerMotCleImage(image.getIdImage())); |
nb++; |
} |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/motsclesimages/MotsClesImageVue.java |
---|
New file |
0,0 → 1,91 |
package org.tela_botanica.del.client.composants.motsclesimages; |
import java.util.Iterator; |
import java.util.List; |
import org.tela_botanica.del.client.utils.StringUtils; |
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.HTML; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.InlineHTML; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class MotsClesImageVue extends Composite implements MotsClesImagePresenteur.Vue { |
@UiField |
Panel motsCles, motsClesCel, saisieMotsCles, zoneIconesMotsCles; |
@UiField |
Image image; |
@UiField |
Button validerMotsCles; |
interface MyUiBinder extends UiBinder<Widget, MotsClesImageVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public MotsClesImageVue() { |
// sets listBox |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void viderZoneMotsCles() { |
motsCles.clear(); |
} |
@Override |
public HasWidgets getZoneMotsCles() { |
return motsCles; |
} |
@Override |
public HasWidgets getZoneMotsClesCel() { |
return motsClesCel; |
} |
@Override |
public HasWidgets getZoneSaisieMotsCles() { |
return saisieMotsCles; |
} |
@Override |
public void afficherMotsClesProtocole(List<String> motsClesCelImages, List<String> motsClesCelAFiltrer) { |
for (Iterator<String> iterator = motsClesCelImages.iterator(); iterator |
.hasNext();) { |
String mot = (String) iterator.next(); |
String motNormalise = StringUtils.normaliser(mot); |
if(!mot.trim().isEmpty() && motsClesCelAFiltrer.contains(StringUtils.normaliser(motNormalise))) { |
HTML motCle = new InlineHTML(mot); |
motCle.setStyleName("motCleCel"); |
motsClesCel.add(motCle); |
} |
} |
} |
@Override |
public void setImage(String url) { |
image.setUrl(url); |
} |
@Override |
public HasWidgets getZoneIconesMotsCles() { |
return zoneIconesMotsCles; |
} |
public HasClickHandlers getValiderMotCles() { |
return validerMotsCles; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherche.css |
---|
New file |
0,0 → 1,86 |
.recherchePrincipale { |
width:550px; |
font-size: 18px; |
padding: 5px; |
border: solid 1px #AAA; |
float: left; |
} |
.boutonRecherche { |
border: solid 1px #AAA; |
padding: 5px; |
cursor: pointer; |
float: left; |
margin: 0 10px 0 10px |
} |
.lienRechercheAvancee { |
cursor: pointer; |
text-decoration: underline; |
color: blue; |
float: left; |
margin-right: 240px; |
margin: 5px |
} |
.rechercheAvancee { |
border: solid 1px #333; |
padding: 15px; |
position: absolute; |
width: 750px; |
margin-top: 0px; |
background: white; |
z-index: 2000 |
} |
.champRecherche { |
float: left; |
width: 40%; |
padding-bottom: 5px |
} |
.champRecherche input { |
width: 90% |
} |
.recherchePrecedente { |
color: #555; |
padding: 5px 5px 10px; |
font-style: italic; |
clear: left |
} |
.boutonFermer { |
float: right; |
background: url("./img/cross.png") no-repeat 0 2px; |
border: none; |
padding: 0 0 0 16px; |
color: blue; |
text-decoration: underline; |
cursor: pointer |
} |
.boutonVider { |
float: right; |
background: url("./img/cancel.png") no-repeat 0 2px; |
border: none; |
padding: 0 0 0 16px; |
color: blue; |
text-decoration: underline; |
cursor: pointer |
} |
.rechercherAvance { |
margin-top:10px; |
margin-left:0px; |
} |
.zoneRecherche { |
} |
.zoneRss { |
float:right; |
margin-top:5px; |
} |
.zoneRss a { |
border:none; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.ui.xml |
---|
New file |
0,0 → 1,90 |
<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="MoteurRecherche.css" /> |
<g:HTMLPanel styleName="limiteMin {style.zoneRecherche}"> |
<g:TextBox styleName="{style.recherchePrincipale} arrondi" ui:field="recherchePrincipale" text="{constants.rechercherObservation}"></g:TextBox> |
<g:Button styleName="{style.boutonRecherche} arrondi" ui:field="boutonRecherche" text="{constants.rechercher}"> |
</g:Button> |
<g:Label styleName="{style.lienRechercheAvancee}" ui:field="lienRechercheAvancee" text="{constants.rechercheAvancee}"></g:Label> |
<g:HTMLPanel styleName="{style.rechercheAvancee} ombre-forte" ui:field="rechercheAvancee"> |
<g:Button ui:field="boutonFermer" styleName="{style.boutonFermer}" text="Fermer"></g:Button> |
<g:Button ui:field="boutonVider" styleName="{style.boutonVider}" text="Vider"></g:Button> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.contientMots}" styleName="petit"/> |
<g:TextBox ui:field="contientMots" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.famille}" styleName="petit"/> |
<g:TextBox ui:field="famille" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.referentiel}" styleName="petit"/> |
<g:ListBox ui:field="referentiel" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.taxon}" styleName="petit"/> |
<g:HTMLPanel ui:field="taxon" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.genre}" styleName="petit"/> |
<g:TextBox ui:field="genre" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.commune}" styleName="petit"/> |
<g:HTMLPanel ui:field="commune" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.departement}" styleName="petit"/> |
<g:TextBox ui:field="departement" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.auteur}" styleName="petit"/> |
<g:TextBox ui:field="auteur" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.champRecherche}"> |
<g:Label text="{constants.date} {constants.formatDate}" styleName="petit"/> |
<g:TextBox ui:field="date" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="conteneurMotCle" styleName="{style.champRecherche}"> |
<g:Label text="{constants.tag}" styleName="petit"/> |
<g:TextBox ui:field="motCle" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="conteneurMotCleCel" styleName="{style.champRecherche}"> |
<g:Label text="{constants.tagCel}" styleName="petit"/> |
<g:TextBox ui:field="motCleCel" /> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="conteneurMotCleDel" styleName="{style.champRecherche}"> |
<g:Label text="{constants.tagDel}" styleName="petit"/> |
<g:TextBox ui:field="motCleDel" /> |
</g:HTMLPanel> |
<g:Button styleName="{style.boutonRecherche} {style.rechercherAvance}" ui:field="boutonRechercheAvancee" text="{constants.rechercher}"></g:Button> |
<g:HTMLPanel styleName="nettoyage" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="droite"> |
<g:HTMLPanel ui:field="zoneRss" styleName="{style.zoneRss}"></g:HTMLPanel> |
</g:HTMLPanel> |
<g:Label ui:field="recherchePrecedente" styleName="{style.recherchePrecedente}" /> |
<g:HTMLPanel ui:field="zonePagination" /> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRecherchePresenteur.java |
---|
New file |
0,0 → 1,417 |
package org.tela_botanica.del.client.composants.moteurrecherche; |
import java.util.Map; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.rss.RssPresenteur; |
import org.tela_botanica.del.client.composants.rss.RssVue; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import org.tela_botanica.del.client.modeles.ModeRecherche; |
import org.tela_botanica.del.client.services.ReferentielService; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
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.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public abstract class MoteurRecherchePresenteur extends Presenteur { |
public abstract interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasClickHandlers getLienRechercheAvancee(); |
public void basculerAffichageZoneCache(); |
public HasClickHandlers getBoutonRechercheSimple(); |
public HasClickHandlers getBoutonFermer(); |
public HasClickHandlers getBoutonVider(); |
public HasClickHandlers getBoutonRechercheAvancee(); |
public HasKeyPressHandlers getChampSaisie(); |
public HasClickHandlers getChampSaisieCliquable(); |
public String getValeurRechercheSimple(); |
public String getLabelRecherche(); |
public String getContientMots(); |
public String getDepartement(); |
public HasWidgets getCommune(); |
public HasWidgets getTaxon(); |
public String getFamille(); |
public String getGenre(); |
public String getMotCle(); |
public String getAuteur(); |
public String getDate(); |
public void setValeurRechercheSimple(String valeurRecherche); |
public void setContientMots(String mots); |
public void setValeurDepartement(String dpt); |
public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche); |
public void focusSaisie(); |
public void nettoyer(); |
public HasKeyPressHandlers getChampsFamille(); |
public HasKeyPressHandlers getChampsGenre(); |
public HasKeyPressHandlers getChampsMotCle(); |
public HasKeyPressHandlers getChampsMotCleDel(); |
public HasKeyPressHandlers getChampsMotCleCel(); |
public HasKeyPressHandlers getChampsAuteur(); |
public HasKeyPressHandlers getChampsDate(); |
public HasKeyPressHandlers getChampsDepartement(); |
public HasKeyPressHandlers getChampsContientMots(); |
public HasWidgets getZoneRss(); |
public String getReferentiel(); |
public void setReferentielLectureSeule(boolean lectureSeule); |
void remplirListeReferentiels(Map<String, String> listeReferentiels); |
public String getMotCleDel(); |
public String getMotCleCel(); |
public void cacherChampsTagsImage(); |
public void cacherChampsTagsObs(); |
} |
private Vue vue; |
private Config config; |
private ModeRecherche modeRecherche; |
private RssPresenteur presenteurRss; |
public enum TypeMoteur { |
SIMPLE, AVANCEE |
}; |
private TypeMoteur typeMoteur = TypeMoteur.SIMPLE; |
private AutoCompletionComboBoxPresenteur completionTaxonsPresenteur = null; |
private AutoCompletionComboBoxPresenteur completionCommunesPresenteur = null; |
public MoteurRecherchePresenteur(Vue vue, ModeRecherche mode) { |
initialiser(vue, mode, new Config()); |
} |
public MoteurRecherchePresenteur(AutoCompletionComboBoxPresenteur presenteurAutoCompletionTaxon, AutoCompletionComboBoxPresenteur presenteurAutoCompletionCommunes, Vue vue, ModeRecherche mode, Config configuration) { |
completionTaxonsPresenteur = presenteurAutoCompletionTaxon; |
completionCommunesPresenteur = presenteurAutoCompletionCommunes; |
initialiser(vue, mode, configuration); |
} |
private void initialiser(Vue vue, ModeRecherche mode, Config configuration) { |
//TODO : fixer le flux avant de le mettre en place |
//this.presenteurRss = new RssPresenteur(new RssVue(), CacheClient.getInstance().getInformationsRechercheObservation(), "S'abonner au flux rss des résultats de cette recherche"); |
//presenteurRss.go(vue.getZoneRss()); |
this.vue = vue; |
setMode(mode); |
this.config = configuration; |
if (completionTaxonsPresenteur == null) |
this.creerCompletionTaxons(); |
if (completionCommunesPresenteur == null) |
this.creerCompletionCommunes(); |
gererEvenements(); |
vue.remplirListeReferentiels(ReferentielService.getReferentiels()); |
if(CacheClient.getInstance().getReferentielNonModifiable()) { |
vue.setReferentielLectureSeule(true); |
} |
if(estPourRechercheImages()) { |
vue.cacherChampsTagsObs(); |
} else { |
vue.cacherChampsTagsImage(); |
} |
} |
public ModeRecherche getMode() { |
return modeRecherche; |
} |
private void setMode(ModeRecherche mode) { |
modeRecherche = mode; |
} |
public TypeMoteur getTypeMoteur() { |
return this.typeMoteur; |
} |
public void setTypeMoteur(TypeMoteur typeMoteur) { |
this.typeMoteur = typeMoteur; |
} |
public boolean estPourRechercheImages() { |
return (modeRecherche == ModeRecherche.MODE_IMAGE); |
} |
public boolean estPourRechercheObservations() { |
return (modeRecherche == ModeRecherche.MODE_OBSERVATION); |
} |
private void creerCompletionTaxons() { |
String url = this.config.getServiceBaseUrl() + "nomstaxons"; |
completionTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) { |
protected String effectuerPreTraitementChaineRequete(String requete) { |
// si aucun référentiel selectionné, pas de requete |
if(vue.getReferentiel() != null && !vue.getReferentiel().equals("")) { |
requete = "?masque.nom=" + requete + "&masque.referentiel=" + vue.getReferentiel(); |
return requete; |
} else { |
return null; |
} |
// A décommenter lors de l'utilisation des web services eflore |
// return |
// RetourAutoCompletionService.effectuerPreTraitementChaineRequeteGenreEspeceEflore(requete); |
} |
@Override |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
// A décommenter lors de l'utilisation des web services eflore |
// return RetourAutoCompletionService.parserRetourOss(response); |
} |
}; |
} |
private void creerCompletionCommunes() { |
String url = this.config.getServiceBaseUrl() + "communes"; |
completionCommunesPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) { |
protected String effectuerPreTraitementChaineRequete(String requete) { |
requete = "?masque.nom=" + requete; |
return requete; |
} |
@Override |
protected void surSelectionSuggestion(String suggestion) { |
setValeur(suggestion); |
collecterInfosRecherche(); |
setValeur(getInformationsRechercheEnCache().getCommune()); |
vue.setValeurDepartement(getInformationsRechercheEnCache().getDepartement()); |
} |
@Override |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
} |
@Override |
public void go(HasWidgets composite) { |
afficherRequeteEtLancerRecherche(); |
completionTaxonsPresenteur.go(vue.getTaxon()); |
completionCommunesPresenteur.go(vue.getCommune()); |
vue.ajouterVue(composite); |
vue.focusSaisie(); |
} |
@Override |
protected void gererEvenements() { |
vue.getLienRechercheAvancee().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
setTypeMoteur(TypeMoteur.AVANCEE); |
vue.setContientMots(vue.getValeurRechercheSimple()); |
vue.basculerAffichageZoneCache(); |
} |
}); |
vue.getBoutonRechercheSimple().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
setTypeMoteur(TypeMoteur.SIMPLE); |
collecterInfosRecherche(); |
afficherRequeteEtLancerRecherche(); |
} |
}); |
vue.getBoutonFermer().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
vue.setValeurRechercheSimple(vue.getContientMots()); |
vue.basculerAffichageZoneCache(); |
} |
}); |
vue.getBoutonVider().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
nettoyerChamps(); |
InformationsRecherche infosRecherche = new InformationsRecherche(); |
if (estPourRechercheImages()) { |
CacheClient.getInstance().setInformationsRechercheImage(infosRecherche); |
} else if (estPourRechercheObservations()) { |
CacheClient.getInstance().setInformationsRechercheObservation(infosRecherche); |
} |
} |
}); |
vue.getBoutonRechercheAvancee().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
setTypeMoteur(TypeMoteur.AVANCEE); |
collecterInfosRecherche(); |
vue.basculerAffichageZoneCache(); |
afficherRequeteEtLancerRecherche(); |
} |
}); |
vue.getChampSaisie().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
setTypeMoteur(TypeMoteur.SIMPLE); |
collecterInfosRecherche(); |
afficherRequeteEtLancerRecherche(); |
} |
} |
}); |
vue.getChampSaisieCliquable().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
if (vue.getValeurRechercheSimple().equals(vue.getLabelRecherche())) { |
vue.setValeurRechercheSimple(""); |
} |
} |
}); |
vue.getChampsAuteur().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsDate().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsFamille().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsGenre().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsMotCle().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsMotCleCel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsMotCleDel().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsDepartement().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getChampsContientMots().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
} |
public KeyPressHandler creerGestionnaireEvenementToucheEntree() { |
return new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
vue.basculerAffichageZoneCache(); |
collecterInfosRecherche(); |
afficherRequeteEtLancerRecherche(); |
} |
} |
}; |
} |
private void nettoyerChamps() { |
completionCommunesPresenteur.nettoyer(); |
completionTaxonsPresenteur.nettoyer(); |
vue.nettoyer(); |
} |
public void collecterInfosRecherche() { |
InformationsRecherche informationRecherche = new InformationsRecherche(); |
informationRecherche.setRechercheLibre(this.getRechercheLibre()); |
if (this.typeMoteur == TypeMoteur.AVANCEE) { |
informationRecherche.setTaxon(completionTaxonsPresenteur.getValeur()); |
informationRecherche.setDepartement(vue.getDepartement()); |
informationRecherche.setCommune(completionCommunesPresenteur.getValeur()); |
informationRecherche.setFamille(vue.getFamille()); |
informationRecherche.setGenre(vue.getGenre()); |
if(estPourRechercheObservations()) { |
informationRecherche.setMotClef(vue.getMotCle()); |
} else { |
informationRecherche.setMotClefDel(vue.getMotCleDel()); |
informationRecherche.setMotClefCel(vue.getMotCleCel()); |
} |
informationRecherche.setTag(vue.getMotCle()); |
informationRecherche.setAuteur(vue.getAuteur()); |
informationRecherche.setDate(vue.getDate()); |
informationRecherche.setReferentiel(vue.getReferentiel()); |
} |
if(CacheClient.getInstance().getReferentielNonModifiable()) { |
informationRecherche.setReferentiel(CacheClient.getInstance().getReferentielCourant()); |
} |
if (estPourRechercheImages()) { |
CacheClient.getInstance().setPageCouranteRechercheImages(1); |
CacheClient.getInstance().setInformationsRechercheImage(informationRecherche); |
} else if (estPourRechercheObservations()) { |
CacheClient.getInstance().setPageCouranteRechercheObservations(1); |
CacheClient.getInstance().setInformationsRechercheObservation(informationRecherche); |
} |
} |
private String getRechercheLibre() { |
String rechercheLibre = ""; |
switch (this.typeMoteur) { |
case SIMPLE: |
rechercheLibre = vue.getValeurRechercheSimple(); |
break; |
case AVANCEE: |
rechercheLibre = vue.getContientMots(); |
break; |
default: |
// TODO : voir comment gérer les exceptions proprement |
// throw new |
// Exception("Le type de moteur de recherche indiqué n'est pas disponible"); |
} |
return rechercheLibre; |
} |
private InformationsRecherche getInformationsRechercheEnCache() { |
if (estPourRechercheImages()) { |
return CacheClient.getInstance().getInformationsRechercheImage(); |
} else if (estPourRechercheObservations()) { |
return CacheClient.getInstance().getInformationsRechercheObservation(); |
} |
return null; |
} |
public void afficherRequeteEtLancerRecherche() { |
InformationsRecherche informationsRecherche = getInformationsRechercheEnCache(); |
if (informationsRecherche != null) { |
completionTaxonsPresenteur.setValeur(informationsRecherche.getTaxon()); |
completionCommunesPresenteur.setValeur(informationsRecherche.getCommune()); |
vue.chargerValeursRecherchePrecedente(informationsRecherche); |
} |
lancerRecherche(); |
//presenteurRss.genererLien(informationsRecherche); |
} |
public abstract void lancerRecherche(); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/moteurrecherche/MoteurRechercheVue.java |
---|
New file |
0,0 → 1,314 |
package org.tela_botanica.del.client.composants.moteurrecherche; |
import java.util.Iterator; |
import java.util.Map; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.InformationsRecherche; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.DOM; |
import com.google.gwt.user.client.ui.Button; |
import com.google.gwt.user.client.ui.Composite; |
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.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class MoteurRechercheVue extends Composite implements MoteurRecherchePresenteur.Vue { |
interface Binder extends UiBinder<Widget, MoteurRechercheVue> { |
} |
private static Binder uiBinder = GWT.create(Binder.class); |
private String labelRecherche = ""; |
@UiField |
Panel rechercheAvancee, taxon, commune, zoneRss, conteneurMotCle, conteneurMotCleCel, conteneurMotCleDel ; |
@UiField |
Label lienRechercheAvancee, recherchePrecedente; |
@UiField |
Button boutonRecherche, boutonRechercheAvancee, boutonFermer, boutonVider; |
@UiField |
TextBox recherchePrincipale, contientMots, departement, famille, genre, motCle, motCleCel, motCleDel, auteur, date; |
@UiField |
ListBox referentiel; |
public MoteurRechercheVue(String labelRecherche) { |
initWidget(uiBinder.createAndBindUi(this)); |
this.labelRecherche = labelRecherche; |
recherchePrincipale.setText(labelRecherche); |
rechercheAvancee.setVisible(false); |
} |
@Override |
public void remplirListeReferentiels(Map<String, String> listeReferentiels) { |
for (Iterator<String> iterator = listeReferentiels.keySet().iterator(); iterator.hasNext();) { |
String codeRef = iterator.next(); |
referentiel.addItem(listeReferentiels.get(codeRef), codeRef); |
} |
referentiel.setItemSelected(1, true); |
} |
public String getLabelRecherche() { |
return labelRecherche; |
} |
public HasClickHandlers getLienRechercheAvancee() { |
return lienRechercheAvancee; |
} |
public HasClickHandlers getBoutonRechercheSimple() { |
return boutonRecherche; |
} |
public HasClickHandlers getBoutonFermer() { |
return boutonFermer; |
} |
public HasClickHandlers getBoutonVider() { |
return boutonVider; |
} |
public HasClickHandlers getBoutonRechercheAvancee() { |
return boutonRechercheAvancee; |
} |
public HasKeyPressHandlers getChampSaisie() { |
return recherchePrincipale; |
} |
public String getValeurRechercheSimple() { |
return recherchePrincipale.getText(); |
} |
public void setValeurRechercheSimple(String valeurRecherche) { |
recherchePrincipale.setText(valeurRecherche); |
} |
public HasClickHandlers getChampSaisieCliquable() { |
return recherchePrincipale; |
} |
public String getContientMots() { |
return contientMots.getText(); |
} |
public void setContientMots(String mots) { |
contientMots.setText(mots); |
} |
public String getDepartement() { |
return departement.getText(); |
} |
public void setValeurDepartement(String dpt) { |
departement.setValue(dpt); |
} |
public HasWidgets getCommune() { |
return commune; |
} |
public HasWidgets getTaxon() { |
return taxon; |
} |
public String getFamille() { |
return famille.getText(); |
} |
public String getGenre() { |
return genre.getText(); |
} |
public String getMotCle() { |
return motCle.getText(); |
} |
public String getAuteur() { |
return auteur.getText(); |
} |
public String getDate() { |
return date.getText(); |
} |
public String getReferentiel() { |
return referentiel.getValue(referentiel.getSelectedIndex()); |
} |
public void focusSaisie() { |
this.recherchePrincipale.setFocus(true); |
} |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
public void basculerAffichageZoneCache() { |
rechercheAvancee.setVisible(!rechercheAvancee.isVisible()); |
recherchePrincipale.setVisible(!recherchePrincipale.isVisible()); |
boutonRecherche.setVisible(!boutonRecherche.isVisible()); |
} |
public void nettoyer() { |
chargerValeursRecherchePrecedente(new InformationsRecherche()); |
} |
public void chargerValeursRecherchePrecedente(InformationsRecherche informationsRecherche) { |
recherchePrincipale.setText(informationsRecherche.getRechercheLibre()); |
contientMots.setText(informationsRecherche.getRechercheLibre()); |
departement.setText(informationsRecherche.getDepartement()); |
famille.setText(informationsRecherche.getFamille()); |
genre.setText(informationsRecherche.getGenre()); |
motCle.setText(informationsRecherche.getMotClef()); |
motCleCel.setText(informationsRecherche.getMotClefCel()); |
motCleDel.setText(informationsRecherche.getMotClefDel()); |
auteur.setText(informationsRecherche.getAuteur()); |
date.setText(informationsRecherche.getDate()); |
for(int i = 0; i < referentiel.getItemCount(); i++) { |
if(referentiel.getValue(i).equals(informationsRecherche.getReferentiel())) { |
referentiel.setSelectedIndex(i); |
} |
} |
afficherLigneInfoRecherche(informationsRecherche); |
} |
/** |
* Affiche la ligne d'en tête montrant les elements de la requête à |
* l'utilisateur |
* |
* @param informationRecherche |
*/ |
private void afficherLigneInfoRecherche(InformationsRecherche informationRecherche) { |
// tax dep com fam gen ta mo au date |
StringBuffer texteRecherchePrecedente = new StringBuffer(); |
if (informationRecherche.getRechercheLibre() != null && !informationRecherche.getRechercheLibre().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().rechercheLibre() + ":" + informationRecherche.getRechercheLibre() + " "); |
} |
if (informationRecherche.getTaxon() != null && !informationRecherche.getTaxon().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().taxon() + ":" + informationRecherche.getTaxon() + " "); |
} |
if (informationRecherche.getDepartement() != null && !informationRecherche.getDepartement().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().departement() + ":" + informationRecherche.getDepartement() + " "); |
} |
if (informationRecherche.getCommune() != null && !informationRecherche.getCommune().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().commune() + ":" + informationRecherche.getCommune() + " "); |
} |
if (informationRecherche.getFamille() != null && !informationRecherche.getFamille().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().famille() + ":" + informationRecherche.getFamille() + " "); |
} |
if (informationRecherche.getGenre() != null && !informationRecherche.getGenre().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().genre() + ":" + informationRecherche.getGenre() + " "); |
} |
if (informationRecherche.getTag() != null && !informationRecherche.getTag().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().tag() + ":" + informationRecherche.getTag() + " "); |
} |
if (informationRecherche.getMotClef() != null && !informationRecherche.getMotClef().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().mot_clef() + ":" + informationRecherche.getMotClef() + " "); |
} |
if (informationRecherche.getMotClefCel() != null && !informationRecherche.getMotClefCel().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().tagCel() + ":" + informationRecherche.getMotClefCel() + " "); |
} |
if (informationRecherche.getMotClefDel() != null && !informationRecherche.getMotClefDel().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().tagDel() + ":" + informationRecherche.getMotClefDel() + " "); |
} |
if (informationRecherche.getAuteur() != null && !informationRecherche.getAuteur().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().auteur() + ":" + informationRecherche.getAuteur() + " "); |
} |
if (informationRecherche.getDate() != null && !informationRecherche.getDate().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().date() + ":" + informationRecherche.getDate() + " "); |
} |
if (informationRecherche.getReferentiel() != null && !informationRecherche.getReferentiel().equals("")) { |
texteRecherchePrecedente.append(I18n.getVocabulary().referentiel() + ":" + informationRecherche.getReferentiel() + " "); |
} |
recherchePrecedente.setText(texteRecherchePrecedente.toString()); |
} |
@Override |
public HasKeyPressHandlers getChampsFamille() { |
return famille; |
} |
@Override |
public HasKeyPressHandlers getChampsGenre() { |
return genre; |
} |
@Override |
public HasKeyPressHandlers getChampsMotCle() { |
return motCle; |
} |
@Override |
public HasKeyPressHandlers getChampsAuteur() { |
return auteur; |
} |
@Override |
public HasKeyPressHandlers getChampsDate() { |
return date; |
} |
@Override |
public HasKeyPressHandlers getChampsDepartement() { |
return departement; |
} |
@Override |
public HasKeyPressHandlers getChampsContientMots() { |
return contientMots; |
} |
public HasWidgets getZoneRss() { |
return zoneRss; |
} |
@Override |
public void setReferentielLectureSeule(boolean lectureSeule) { |
// la listbox ne possède aucun méthode directe pour être désactivée |
DOM.setElementProperty(referentiel.getElement(), "disabled", "disabled"); |
} |
@Override |
public HasKeyPressHandlers getChampsMotCleDel() { |
return motCleDel; |
} |
@Override |
public HasKeyPressHandlers getChampsMotCleCel() { |
return motCleCel; |
} |
@Override |
public String getMotCleDel() { |
return motCleDel.getText(); |
} |
@Override |
public String getMotCleCel() { |
return motCleCel.getText(); |
} |
@Override |
public void cacherChampsTagsImage() { |
conteneurMotCleCel.setVisible(false); |
conteneurMotCleDel.setVisible(false); |
} |
@Override |
public void cacherChampsTagsObs() { |
conteneurMotCle.setVisible(false); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/ligneCommentaire.css |
---|
New file |
0,0 → 1,25 |
.commentaire { |
font-size: 11px; |
background: #DDD; |
padding: 3px; |
margin-bottom:5px; |
} |
.auteur { |
padding-left:3px; |
float: left; |
font-size:11px; |
color:#AAA; |
font-style:italic; |
} |
.date { |
float: left; |
font-size:11px; |
color:#DDD; |
font-style:italic; |
} |
.date:before { |
content:", "; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentaireVue.ui.xml |
---|
New file |
0,0 → 1,17 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="ligneCommentaire.css" /> |
<g:HTMLPanel> |
<g:HorizontalPanel ui:field="zoneAuteur"> |
<g:Label ui:field="auteur" styleName="{style.auteur}"/> |
<g:Label ui:field="date" styleName="{style.date}"/> |
</g:HorizontalPanel> |
<g:HTMLPanel> |
<g:Label ui:field="commentaire" styleName="commentaire {style.commentaire}"/> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/detailCommentaireVue.css |
---|
New file |
0,0 → 1,41 |
.conteneurTableauVotes { |
z-index: 1500; |
padding: 30px; |
padding-right: 21px; |
padding-top: 20px; |
background: white; |
width: 370px; |
margin: 0 auto; |
margin-top: 75px; |
padding-bottom:50px; |
} |
.table { |
border:solid 1px #DDD; |
width: 100%; |
} |
.chargement { |
padding-left: 165px; |
} |
.auteur { |
color: #6C6865; |
font-family: arial; |
font-size: 13px; |
font-style: italic; |
font-weight: bold; |
letter-spacing: 0; |
line-height: 18px; |
text-transform: none; |
margin-top: -10px; |
} |
.boutonAjouterCommentaire { |
margin:30px 0; |
} |
.zoneCommentaires { |
max-height: 400px; |
overflow:auto; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentairePresenteur.java |
---|
New file |
0,0 → 1,70 |
package org.tela_botanica.del.client.composants.commentaires; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import com.google.gwt.i18n.client.DateTimeFormat; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class LigneCommentairePresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public void setCommentaire(String commentaire); |
public void setAuteur(String auteur); |
public void setDate(String date); |
} |
private Vue vue; |
private PropositionDetermination proposition; |
private Commentaire commentaire; |
public LigneCommentairePresenteur(Vue vue, PropositionDetermination proposition) { |
this.vue = vue; |
this.proposition = proposition; |
afficherCommentaire(); |
} |
public LigneCommentairePresenteur(Vue vue, Commentaire commentaire) { |
this.vue = vue; |
this.commentaire = commentaire; |
afficherCommentaire(); |
} |
public void afficherCommentaire() { |
if (proposition != null) { |
String commentaire = proposition.getCommentaire(); |
vue.setCommentaire(commentaire); |
String date = DateTimeFormat.getFormat("dd/MM/yyyy").format(proposition.getDate()); |
vue.setDate(date); |
String auteur = proposition.getAuteur(); |
vue.setAuteur(auteur); |
} else if (commentaire != null) { |
String commentaire = this.commentaire.getCommentaire(); |
vue.setCommentaire(commentaire); |
String date = DateTimeFormat.getFormat("dd/MM/yyyy").format(this.commentaire.getDate()); |
vue.setDate(date); |
String auteur = this.commentaire.getAuteur(); |
vue.setAuteur(auteur); |
} |
} |
/** |
* Declenchement du présenteur |
*/ |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
gererEvenements(); |
} |
protected void gererEvenements() { |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentaireVue.ui.xml |
---|
New file |
0,0 → 1,19 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="detailCommentaireVue.css" /> |
<g:HTMLPanel styleName="{style.conteneurTableauVotes}"> |
<g:HTMLPanel ui:field='titre' styleName="titre" /> |
<g:HTMLPanel ui:field='auteur' styleName="{style.auteur}" /> |
<g:HTMLPanel ui:field="ligneCommentaire" styleName="{style.zoneCommentaires}"></g:HTMLPanel> |
<g:HTMLPanel ui:field="panneauChargement" styleName="{style.chargement}"> |
<g:Image url="./img/wait.gif"></g:Image> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="aucuneDonnees" visible="false"><g:Label text="{constants.aucunCommentaireEffectue}"></g:Label></g:HTMLPanel> |
<g:Button ui:field="boutonAjoutCommentaire" styleName="bouton {style.boutonAjouterCommentaire}" |
text="{constants.ajouterCommentaire}" /> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/LigneCommentaireVue.java |
---|
New file |
0,0 → 1,38 |
package org.tela_botanica.del.client.composants.commentaires; |
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.Composite; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Widget; |
public class LigneCommentaireVue extends Composite implements LigneCommentairePresenteur.Vue { |
interface LigneCommentaireVueUiBinder extends UiBinder<Widget, LigneCommentaireVue> {}; |
private static LigneCommentaireVueUiBinder uiBinder = GWT.create(LigneCommentaireVueUiBinder.class); |
//Composants |
@UiField |
Label commentaire, auteur, date; |
public LigneCommentaireVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void setCommentaire(String commentaire) { |
this.commentaire.setText(commentaire); |
} |
@Override |
public void setAuteur(String auteur) { |
this.auteur.setText(auteur); |
} |
@Override |
public void setDate(String date) { |
this.date.setText(date); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentairePresenteur.java |
---|
New file |
0,0 → 1,170 |
package org.tela_botanica.del.client.composants.commentaires; |
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.formulaires.formulairecommentaire.FormulaireCommentairePresenteur; |
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire; |
import org.tela_botanica.del.client.services.rest.CommentaireService; |
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret; |
import org.tela_botanica.del.client.services.rest.async.ListeCommentairesCallback; |
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; |
/** |
* Cette classe permet d'afficher une popup avec la liste des commentaires |
* associées à une proposition de determination |
* |
* @author LIENS |
* |
*/ |
public class DetailCommentairePresenteur extends Presenteur { |
/** |
* Interface de la vue correspondante |
* |
* @author LIENS |
* |
*/ |
public interface Vue extends IsWidget { |
public void afficherCommentairesProposition(PropositionDetermination propositionDetermination); |
public void afficherAucuneDonnees(); |
public void stopChargement(); |
public void startChargement(); |
public HasClickHandlers getBoutonAjoutCommentaire(); |
} |
// La vue correspondante |
private Vue vue; |
// La proposition de determination |
private PropositionDetermination propositionDetermination; |
//le servcie de recuperation des commentaires |
private CommentaireService commentaireService; |
/** |
* Constructeur |
* |
* @param vue |
* @param propositionDetermination |
*/ |
public DetailCommentairePresenteur(Vue vue, CommentaireService commentaireService, PropositionDetermination propositionDetermination) { |
this.vue = vue; |
this.propositionDetermination = propositionDetermination; |
this.commentaireService = commentaireService; |
} |
/** |
* Declenchement du présenteur |
*/ |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
gererEvenements(); |
} |
/** |
* Affichage des commentaires |
*/ |
public void afficherCommentaires() { |
// affichage de l'icone de chargement |
vue.startChargement(); |
// si l'id de la propostion est égal est nulle alors celle ci est une proposition |
// crée par l'interface à partir de l'obs et n'a donc pas de commentaires |
if(propositionDetermination.getId() != null) { |
// Appel du service |
commentaireService.chargerCommentaires(propositionDetermination, new ListeCommentairesCallback() { |
@Override |
public void surRetour(List<Commentaire> commentaires) { |
propositionDetermination.setListeCommentaires(commentaires); |
// s'il existe des commentaires ils sont affichés |
if (propositionDetermination.getTotalCommentaires() > 0) { |
// affichage des commentaires associés à la proposition dans |
// la vue |
vue.afficherCommentairesProposition(propositionDetermination); |
// supression de l'icone de chargement |
vue.stopChargement(); |
} else { |
// affichage d'un message precisant qu'il n'y a pas de |
// commentaires |
vue.afficherAucuneDonnees(); |
// supression de l'icone de chargement |
vue.stopChargement(); |
} |
} |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
vue.stopChargement(); |
} |
}); |
} else { |
// affichage d'un message precisant qu'il n'y a pas de |
// commentaires |
vue.afficherAucuneDonnees(); |
// supression de l'icone de chargement |
vue.stopChargement(); |
} |
} |
/** |
* Gestion des evenements du presenteur |
*/ |
@Override |
protected void gererEvenements() { |
final FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue()); |
vue.getBoutonAjoutCommentaire().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
// TODO : > mettre proprement l'intervention |
// TODO : >actualiser les affichages |
CacheClient.getInstance().setObservationCourante(propositionDetermination.getObservation()); |
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(propositionDetermination.getObservation().getInterventionsForum().get(propositionDetermination.getObservation().getInterventionsForum().size()-1), new CommentaireServiceConcret(), new FormulaireCommentaireVue()); |
fenetreOverlaySimplePresenteur.ouvrirFenetreModale(commentairePresenteur); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() { |
@Override |
public void onAjoutCommentaire(EvenementAjoutCommentaire event) { |
if (fenetreOverlaySimplePresenteur != null && fenetreOverlaySimplePresenteur.fenetreModaleEstOuverte()) { |
fenetreOverlaySimplePresenteur.fermerFenetreModale(); |
} |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/commentaires/DetailCommentaireVue.java |
---|
New file |
0,0 → 1,118 |
package org.tela_botanica.del.client.composants.commentaires; |
import java.util.List; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
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.HTML; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
/** |
* Cette classe permet d'afficher une popup avec la liste des commentaires |
* associées à une proposition de determination |
* |
* @author LIENS |
* |
*/ |
public class DetailCommentaireVue extends Composite implements DetailCommentairePresenteur.Vue { |
private static DetailListeVotesDeterminationVueUIiBinder uiBinder = GWT.create(DetailListeVotesDeterminationVueUIiBinder.class); |
interface DetailListeVotesDeterminationVueUIiBinder extends UiBinder<Widget, DetailCommentaireVue> { |
}; |
@UiField |
HTMLPanel titre, auteur, aucuneDonnees; |
@UiField |
Panel panneauChargement, ligneCommentaire; |
@UiField |
Button boutonAjoutCommentaire; |
@Override |
public Button getBoutonAjoutCommentaire() { |
return boutonAjoutCommentaire; |
} |
public DetailCommentaireVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
/** |
* Affiche les commentaires associées à une proposition de determination |
*/ |
@Override |
public void afficherCommentairesProposition(PropositionDetermination propositionDetermination) { |
HTML htmlTitre = new HTML(propositionDetermination.getEspece()); |
titre.add(htmlTitre); |
HTML htmlAuteur = new HTML(I18n.getVocabulary().proposePar()+propositionDetermination.getAuteur()); |
auteur.add(htmlAuteur); |
LigneCommentairePresenteur presenteurCommentaire = new LigneCommentairePresenteur(new LigneCommentaireVue(), propositionDetermination); |
presenteurCommentaire.go(ligneCommentaire); |
creerListeCommentaireRecursive(propositionDetermination.getListeCommentaires()); |
} |
/** |
* Affiche une liste de commentaires recursivement |
* @param commentaires |
*/ |
private void creerListeCommentaireRecursive(List<Commentaire> commentaires) { |
for (Commentaire commentaire : commentaires) { |
chargerCommentaire(commentaire); |
if (commentaire.getListeCommentaires().size() > 0) { |
creerListeCommentaireRecursive(commentaire.getListeCommentaires()); |
} |
} |
} |
/** |
* Affiche un commentaire |
* @param commentaire |
*/ |
private void chargerCommentaire(Commentaire commentaire) { |
LigneCommentairePresenteur presenteurCommentaire = new LigneCommentairePresenteur(new LigneCommentaireVue(), commentaire); |
presenteurCommentaire.go(ligneCommentaire); |
} |
/** |
* Affiche un icone de début de chargement |
*/ |
@Override |
public void startChargement() { |
panneauChargement.setHeight((this.getOffsetHeight() / 2) + "px"); |
panneauChargement.setWidth((this.getOffsetWidth() / 2) + "px"); |
panneauChargement.setVisible(true); |
} |
/** |
* Cache l'icone de début de chargement |
*/ |
@Override |
public void stopChargement() { |
panneauChargement.setVisible(false); |
} |
/** |
* Affiche un message indiquant qu'il n'y a aucun commentaire à présenter |
*/ |
@Override |
public void afficherAucuneDonnees() { |
aucuneDonnees.setVisible(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.ui.xml |
---|
New file |
0,0 → 1,36 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui'> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="formulaireCommentaire.css" /> |
<g:VerticalPanel styleName="{style.formulaireProposition}"> |
<g:Label text="{constants.ajouterCommentaire}" styleName="titre"/> |
<g:Label text="{constants.infoProposerCommentaire}" styleName="petit"/> |
<g:HTML><br /></g:HTML> |
<g:HTMLPanel> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label text="{constants.vous}" styleName="sousTitre"/> |
<g:Label text="{constants.infoVous}" styleName="petit" /> |
<g:HTMLPanel styleName="{style.zoneNom}"> |
<g:Label text="{constants.nom}" styleName="petit" /> |
<g:TextBox ui:field="nom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePrenom}"> |
<g:Label text="{constants.prenom}" styleName="petit" /> |
<g:TextBox ui:field="prenom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneEmail}"> |
<g:Label text="Votre adresse email : " styleName="petit" /> |
<g:TextBox ui:field="courriel" /> |
</g:HTMLPanel> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.commentaire}" styleName="sousTitre"/> |
<g:TextArea ui:field="commentaire" styleName="{style.commentaire}" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationCommentaire" styleName="{style.boutonProposer} arrondi"/> |
</g:VerticalPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentairePresenteur.java |
---|
New file |
0,0 → 1,210 |
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire; |
import java.util.Date; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.Contributeur; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.Observation; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire; |
import org.tela_botanica.del.client.services.rest.CommentaireService; |
import org.tela_botanica.del.client.services.rest.async.AjoutCommentaireCallback; |
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.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireCommentairePresenteur extends Presenteur { |
// le meme presenteur gere les commentaires pour les observations et pour |
// les possesseurs de commentaires, mais la logique est differente, d'ou la |
// necessité de separer les deux objets metiers |
private Observation observation; |
private InterventionForum possesseurDeCommentaires; |
public interface Vue extends IsWidget { |
public HasText getNomObjet(); |
public HasText getPrenomObjet(); |
public String getNom(); |
public String getPrenom(); |
public String getCourriel(); |
public abstract HasText getCommentaire(); |
public abstract HasClickHandlers getBoutonValidationCommentaire(); |
public void afficherStyleErreurNom(String styleErreur); |
public void supprimerStyleErreurNom(String styleErreur); |
public void afficherStyleErreurPrenom(String styleErreur); |
public void supprimerStyleErreurPrenom(String styleErreur); |
public void afficherStyleErreurCourriel(String styleErreur); |
public void supprimerStyleErreurCourriel(String styleErreur); |
public void afficherStyleErreurCommentaire(String styleErreur); |
public void supprimerStyleErreurCommentaire(String styleErreur); |
void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel); |
public HasText getCourrielObjet(); |
} |
private Vue vue; |
private CommentaireService commentaireService; |
public FormulaireCommentairePresenteur(Observation observation, CommentaireService commentaireService, Vue vue) { |
this.observation = observation; |
this.vue = vue; |
this.commentaireService = commentaireService; |
} |
public FormulaireCommentairePresenteur(InterventionForum possesseurDeCommentaires, CommentaireService commentaireService, Vue vue) { |
this.possesseurDeCommentaires = possesseurDeCommentaires; |
this.commentaireService = commentaireService; |
this.vue = vue; |
} |
public void go(HasWidgets composite) { |
remplirAvecInfosUtilisateur(); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
private void remplirAvecInfosUtilisateur() { |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
if (utilisateur.estIdentifie()) { |
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom(), utilisateur.getCourriel()); |
} |
} |
protected void gererEvenements() { |
vue.getBoutonValidationCommentaire().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (!validerSaisie()) { |
return; |
} |
surValidationCommentaire(); |
} |
}); |
} |
public void surValidationCommentaire() { |
String texteCommentaire = vue.getCommentaire().getText(); |
String idUtilisateur = null; |
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) { |
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
} |
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel()); |
final Commentaire commentaire = new Commentaire(contributeur, new Date(), texteCommentaire); |
if (observation != null) { |
commentaire.setObservation(observation); |
commentaire.setParent(null); |
} else if (possesseurDeCommentaires != null) { |
commentaire.setObservation(CacheClient.getInstance().getObservationCourante()); |
commentaire.setParent(possesseurDeCommentaires); |
} |
commentaireService.ajouterCommentaire(commentaire, new AjoutCommentaireCallback() { |
@Override |
public void surRetour(String idNouveauCommentaire) { |
commentaire.setId(idNouveauCommentaire); |
if (observation != null) { |
observation.getInterventionsForum().add(commentaire); |
} else if (possesseurDeCommentaires != null) { |
possesseurDeCommentaires.getListeCommentaires().add(commentaire); |
} |
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutCommentaire(commentaire)); |
} |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
} |
}); |
} |
private boolean validerSaisie() { |
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getNomObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurNom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurNom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getPrenomObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurPrenom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurPrenom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getCourrielObjet()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCourriel(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCourriel(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCommentaire = new ValidateurChampTexteNonNul(vue.getCommentaire()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCommentaire(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCommentaire(styleErreur); |
} |
}; |
boolean nomSaisi = validateurNom.valider(); |
boolean prenomSaisi = validateurPrenom.valider(); |
boolean courrielSaisi = validateurCourriel.valider(); |
boolean commentaireSaisi = validateurCommentaire.valider(); |
return nomSaisi && prenomSaisi && courrielSaisi && commentaireSaisi; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/FormulaireCommentaireVue.java |
---|
New file |
0,0 → 1,126 |
package org.tela_botanica.del.client.composants.formulaires.formulairecommentaire; |
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.HasText; |
import com.google.gwt.user.client.ui.TextArea; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireCommentaireVue extends Composite implements FormulaireCommentairePresenteur.Vue { |
@UiField |
public TextBox nom, prenom, courriel; |
@UiField |
public TextArea commentaire; |
@UiField |
public Button boutonValidationCommentaire; |
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulaireCommentaireVue> { |
}; |
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class); |
public FormulaireCommentaireVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public String getNom() { |
return nom.getText(); |
} |
@Override |
public String getPrenom() { |
return prenom.getText(); |
} |
@Override |
public TextArea getCommentaire() { |
return commentaire; |
} |
@Override |
public Button getBoutonValidationCommentaire() { |
return boutonValidationCommentaire; |
} |
@Override |
public void afficherStyleErreurCommentaire(String styleErreur) { |
commentaire.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCommentaire(String styleErreur) { |
commentaire.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurNom(String styleErreur) { |
nom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurNom(String styleErreur) { |
nom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurPrenom(String styleErreur) { |
prenom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurPrenom(String styleErreur) { |
prenom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherNomPrenomEtDesactiver(String nom, String prenom, String courriel) { |
this.nom.setText(nom); |
this.nom.setEnabled(false); |
this.prenom.setText(prenom); |
this.prenom.setEnabled(false); |
this.courriel.setText(courriel); |
this.courriel.setEnabled(false); |
} |
@Override |
public HasText getNomObjet() { |
return nom; |
} |
@Override |
public HasText getPrenomObjet() { |
return prenom; |
} |
@Override |
public String getCourriel() { |
return courriel.getText(); |
} |
@Override |
public void afficherStyleErreurCourriel(String styleErreur) { |
courriel.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCourriel(String styleErreur) { |
courriel.removeStyleName(styleErreur); |
} |
@Override |
public HasText getCourrielObjet() { |
return courriel; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulairecommentaire/formulaireCommentaire.css |
---|
New file |
0,0 → 1,69 |
.formulaireProposition { |
z-index: 1500; |
padding: 50px; |
background: white; |
width: 300px; |
margin: 0 auto; |
margin-top: 75px; |
} |
.boutonProposer:hover { |
background-color: #AAA |
} |
.colonneGauche,.colonneDroite { |
width: 250px; |
} |
.colonneGauche { |
padding-right: 30px |
} |
.colonneGauche select { |
width: 100% |
} |
.colonneGauche input { |
width: 95% |
} |
.commentaire { |
width: 250px; |
height: 100px |
} |
.propositionTaxon { |
width: 100%; |
height: 30px; |
} |
.boutonProposer { |
border: solid 1px #AAA; |
cursor: pointer; |
float: left; |
margin-top: 10px; |
margin-bottom: 5px; |
margin-right: 30px; |
float: right; |
background: url(./img/add.png) no-repeat 5px 7px #DDD; |
padding: 5px; |
padding-left: 25px; |
cursor: pointer |
} |
.zoneNom { |
width:30%; |
float:left; |
margin-right:5px; |
} |
.zonePrenom { |
width:30%; |
float:left; |
} |
.zoneEmail { |
clear:left; |
padding-top:5px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.ui.xml |
---|
New file |
0,0 → 1,34 |
<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: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="identification.css" /> |
<g:HTMLPanel styleName="{style.zoneIdentification} {style.zoneFormulaire}"> |
<g:Label ui:field="titreSeConnecter" styleName="{style.connecter}" text="{constants.titreSeConnecter}" /> |
<g:Label ui:field="titreEstIdentifie" styleName="{style.connecter}" text="{constants.titreEstIdentifie}" /> |
<g:HTMLPanel ui:field="zoneUtilisateur"> |
<g:HTMLPanel styleName="{style.infoConnexion}"> |
<g:Label ui:field="email" styleName="{style.email}">Email</g:Label> |
<g:Label ui:field="preferences" styleName="{style.preferences}" text="{constants.preferences}"></g:Label> |
<g:Label ui:field="deconnecter" styleName="{style.deconnecter}" text="{constants.seDeconnecter}" /> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="zoneFormulaire"> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label text="{constants.login}" /> |
<g:TextBox ui:field="login" styleName="{style.login}" /> |
<g:Label text="{constants.motdepasse}" /> |
<g:PasswordTextBox ui:field="motdepasse" styleName="{style.motdepasse}"></g:PasswordTextBox> |
<g:Button ui:field="boutonOK" styleName="{style.boutonOK}">OK</g:Button> |
<g:Label ui:field="erreurIdentification" styleName="{style.erreur}"></g:Label> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.colonneDroite}"> |
<ui:msg key="texteConnexion">Texte de connexion</ui:msg> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationPresenteur.java |
---|
New file |
0,0 → 1,198 |
package org.tela_botanica.del.client.composants.formulaires.identification; |
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.preferences.PreferencesPresenteur; |
import org.tela_botanica.del.client.composants.preferences.PreferencesVue; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.EvenementChangementPreferences; |
import org.tela_botanica.del.client.navigation.evenement.changementPreferences.GestionnaireEvenementChangementPreferences; |
import org.tela_botanica.del.client.services.rest.PreferencesServiceConcret; |
import org.tela_botanica.del.client.services.rest.UtilisateurService; |
import org.tela_botanica.del.client.services.rest.async.UtilisateurCallback; |
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.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulaireIdentificationPresenteur { |
FenetreOverlaySimplePresenteur fenetreModalePresenteur = null; |
public abstract interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasClickHandlers getSeConnecter(); |
public HasClickHandlers getSeDeconnecter(); |
public void basculerAffichageFormulaire(boolean estConnecte); |
public void basculerModeConnecte(Utilisateur utilisateur); |
public HasClickHandlers getBoutonOK(); |
public HasText getLogin(); |
public HasText getMotdepasse(); |
public void afficherErreur(); |
public void masquerErreur(); |
public void viderFormulaire(); |
public void setErreur(String idTexte); |
public String getErreur(); |
public HasKeyPressHandlers getLoginHasKeyPressHandler(); |
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler(); |
HasClickHandlers getZonePreferencesClickHandler(); |
} |
private Vue vue; |
private Utilisateur utilisateur; |
private UtilisateurService utilisateurService; |
public FormulaireIdentificationPresenteur(Vue vue, UtilisateurService utilisateurService) { |
this.vue = vue; |
this.utilisateurService = utilisateurService; |
utilisateurService.obtenirUtilisateur(new UtilisateurCallback() { |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
rafraichir(); |
} |
}); |
gererEvenements(); |
} |
public void rafraichir() { |
utilisateur = CacheClient.getInstance().getUtilisateur(); |
vue.basculerModeConnecte(this.utilisateur); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementEtatUtilisateur(utilisateur)); |
} |
public void gererEvenements() { |
vue.getBoutonOK().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
surTentativeLogin(); |
} |
}); |
vue.getSeDeconnecter().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
deconnecterUtilisateur(); |
} |
}); |
vue.getLoginHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getMotdepasseHasKeyPressHandler().addKeyPressHandler(creerGestionnaireEvenementToucheEntree()); |
vue.getZonePreferencesClickHandler().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if(utilisateur.estIdentifie()) { |
PreferencesPresenteur preferencesPresenteur = new PreferencesPresenteur(new PreferencesVue(), new PreferencesServiceConcret()); |
fenetreModalePresenteur = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue()); |
fenetreModalePresenteur.ouvrirFenetreModale(preferencesPresenteur); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementPreferences.TYPE, new GestionnaireEvenementChangementPreferences() { |
@Override |
public void onChangementPreferences(EvenementChangementPreferences event) { |
if(fenetreModalePresenteur != null && fenetreModalePresenteur.fenetreModaleEstOuverte()) { |
fenetreModalePresenteur.fermerFenetreModale(); |
} |
} |
}); |
} |
private void surTentativeLogin() { |
String login = vue.getLogin().getText(); |
String motdepasse = vue.getMotdepasse().getText(); |
if (login.equals("") || motdepasse.equals("")) { |
gererErreur("saisirLogin"); |
} else { |
connecterUtilisateur(login, motdepasse); |
} |
} |
public KeyPressHandler creerGestionnaireEvenementToucheEntree() { |
return new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if (event.getNativeEvent().getKeyCode() == KeyCodes.KEY_ENTER) { |
surTentativeLogin(); |
} |
} |
}; |
} |
public void gererErreur(String erreur) { |
vue.setErreur(erreur); |
vue.afficherErreur(); |
} |
public void connecterUtilisateur(String login, final String motdepasse) { |
utilisateurService.connecterUtilisateur(login, motdepasse, new UtilisateurCallback() { |
public void surErreur(String message) { |
vue.setErreur("identificationRefus"); |
vue.afficherErreur(); |
} |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
if (utilisateur.estIdentifie()) { |
vue.masquerErreur(); |
rafraichir(); |
vue.viderFormulaire(); |
} |
} |
}); |
} |
public void deconnecterUtilisateur() { |
utilisateurService.deconnecterUtilisateur(new UtilisateurCallback() { |
public void surErreur(String message) { |
vue.setErreur("identificationRefus"); |
vue.afficherErreur(); |
} |
@Override |
public void surRetour(Utilisateur objetRetour) { |
utilisateur = objetRetour; |
CacheClient.getInstance().setUtilisateur(utilisateur); |
rafraichir(); |
} |
}); |
} |
public void go(HasWidgets composite) { |
vue.ajouterVue(composite); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVue.java |
---|
New file |
0,0 → 1,147 |
package org.tela_botanica.del.client.composants.formulaires.identification; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
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.HasWidgets; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulaireIdentificationVue extends Composite implements FormulaireIdentificationPresenteur.Vue { |
interface Binder extends UiBinder<Widget, FormulaireIdentificationVue> { |
} |
private static Binder uiBinder = GWT.create(Binder.class); |
@UiField |
Label titreSeConnecter, titreEstIdentifie, deconnecter, email, erreurIdentification, preferences; |
@UiField Panel zoneFormulaire; |
@UiField Button boutonOK; |
@UiField TextBox login, motdepasse; |
public FormulaireIdentificationVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
titreSeConnecter.setVisible(false); |
erreurIdentification.setVisible(false); |
} |
@Override |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
@Override |
public HasClickHandlers getSeConnecter() { |
return titreSeConnecter; |
} |
@Override |
public void basculerAffichageFormulaire(boolean estConnecte) { |
zoneFormulaire.setVisible(!estConnecte); |
} |
@Override |
public void basculerModeConnecte(Utilisateur utilisateur) { |
//Dans le mode non-connecté, on veut : |
// - un bandeau vert avec ecrit Identifiez-vous |
// - le formulaire courriel/password/texte et btn ok |
// dans le mode connecté on veut : |
// - un bandeau vert avec écrit Bienvenue |
// - l'email de l'utilisateur |
// - un btn déconnecter |
// - un btn préférences |
boolean estConnecte = utilisateur.estIdentifie(); |
// mode non-connecté |
titreSeConnecter.setVisible(!estConnecte); |
titreEstIdentifie.setVisible(estConnecte); |
deconnecter.setVisible(estConnecte); |
preferences.setVisible(estConnecte); |
email.setText(utilisateur.getNomPrenomFormate()); |
email.setVisible(estConnecte); |
basculerAffichageFormulaire(estConnecte); |
} |
@Override |
public HasClickHandlers getBoutonOK() { |
return boutonOK; |
} |
@Override |
public TextBox getLogin() { |
return login; |
} |
@Override |
public TextBox getMotdepasse() { |
return motdepasse; |
} |
@Override |
public HasClickHandlers getSeDeconnecter() { |
return deconnecter; |
} |
@Override |
public void afficherErreur() { |
erreurIdentification.setVisible(true); |
} |
@Override |
public void masquerErreur() { |
erreurIdentification.setVisible(false); |
} |
@Override |
public void viderFormulaire() { |
login.setText(""); |
motdepasse.setText(""); |
} |
@Override |
public void setErreur(String idTexte) { |
String texte = ""; |
if (idTexte.equals("saisirLogin")) { |
texte = I18n.getMessages().saisirLogin(); |
} else { |
texte = I18n.getMessages().identificationRefus(); |
} |
erreurIdentification.setText(texte); |
} |
public String getErreur() { |
return erreurIdentification.getText(); |
} |
@Override |
public HasKeyPressHandlers getLoginHasKeyPressHandler() { |
return login; |
} |
@Override |
public HasKeyPressHandlers getMotdepasseHasKeyPressHandler() { |
return motdepasse; |
} |
@Override |
public HasClickHandlers getZonePreferencesClickHandler() { |
return preferences; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/identification/identification.css |
---|
New file |
0,0 → 1,86 |
.zoneIdentification { |
font-size:11px; |
padding:30px 15px 22px 15px; |
height:70px; |
background: none repeat scroll 0 0 white; |
border: 1px solid #99C242; |
border-radius: 0 10px 10px 10px; |
text-align: left; |
text-decoration: none; |
width: 350px; |
} |
.connecter { |
background-color: #99C242; |
border-radius: 0 10px 0 0; |
color: white; |
font-size: 12px; |
padding: 5px 5px 5px 9px; |
text-align: left; |
text-transform: uppercase; |
width: 347px; |
position:absolute; |
margin-left:-15px; |
margin-top:-30px; |
padding-right:25px |
} |
.deconnecter, .preferences { |
text-decoration: underline; |
color: blue; |
cursor: pointer |
} |
.email, .preferences { |
padding-right: 10px |
} |
.zoneFormulaire { |
} |
.login { |
width:150px; |
font-size:11px; |
} |
.motdepasse { |
width:150px; |
font-size:11px; |
} |
.erreur { |
color: red; |
position:absolute; |
margin-top:13px; |
} |
.boutonOK { |
font-size:11px; |
} |
.colonneGauche { |
float:left; |
padding-bottom:15px; |
margin-right:5px; |
width:210px; |
} |
.colonneDroite { |
float:left; |
margin-right:5px; |
padding-bottom:15px; |
} |
.zoneUtilisateur { |
text-align:center; |
} |
.infoConnexion { |
text-align:center; |
font-size:15px; |
} |
.infoConnexion>div:first-child { |
margin-top:10px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/identification/FormulaireIdentificationVueBinderImplGenMessages.properties |
---|
New file |
0,0 → 1,10 |
texteConnexion=<a href="http://www.tela-botanica.org/page:inscription">S''inscrire... </a> \ |
<p class="connect gris">Devenez telabotaniste et partagez votre passion pour le végétal !</p> \ |
<p> <a href="http://www.tela-botanica.org/page:inscription?m=f_oubli_mdp" id="lien_inscription">Mot de passe perdu ? </a></p> |
#<a href="/page:inscription">S'inscrire... </a> |
# <p class="connectgris">Devenez telabotaniste et partagez votre passion pour le végétal !</p> |
# <p> <a href="http://www.tela-botanica.org/page:inscription?m=f_oubli_mdp" id="lien_inscription">Mot de passe perdu ? </a></p> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/formulaireProposition.css |
---|
New file |
0,0 → 1,71 |
.formulaireProposition { |
z-index: 1500; |
padding: 30px; |
padding-right: 21px; |
padding-top: 20px; |
background: white; |
width: 370px; |
margin: 0 auto; |
margin-top: 75px; |
padding-bottom:50px; |
} |
.boutonProposer:hover { |
background-color: #AAA |
} |
.colonneGauche,.colonneDroite { |
width: 300px; |
} |
.colonneGauche { |
padding-right: 30px |
} |
.colonneGauche select { |
width: 100% |
} |
.colonneGauche input { |
width: 95% |
} |
.commentaire { |
width: 260px; |
height: 100px; |
} |
.propositionTaxon { |
width: 100%; |
height: 30px; |
} |
.boutonProposer { |
border: solid 1px #AAA; |
cursor: pointer; |
float: left; |
margin-top: 10px; |
margin-bottom: 5px; |
margin-right: 5px; |
float: right; |
background: url(./img/add.png) no-repeat 5px 7px #DDD; |
padding: 5px; |
padding-left: 25px; |
cursor: pointer |
} |
.zoneNom { |
width:30%; |
float:left; |
margin-right:5px; |
} |
.zonePrenom { |
width:30%; |
float:left; |
} |
.zoneEmail { |
clear:left; |
padding-top:5px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.ui.xml |
---|
New file |
0,0 → 1,42 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="formulaireProposition.css" /> |
<g:HTMLPanel styleName="{style.formulaireProposition}"> |
<g:Label text="{constants.proposerSaDetermination}" styleName="titre"/> |
<g:HTML><br /></g:HTML> |
<g:HTMLPanel styleName="{style.colonneGauche}"> |
<g:Label ui:field="labelnomPrenom" text="{constants.vous}" styleName="sousTitre"/> |
<g:HTMLPanel styleName="{style.zoneNom}"> |
<g:Label text="{constants.nom}" styleName="petit" /> |
<g:TextBox ui:field="nom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zonePrenom}"> |
<g:Label text="{constants.prenom}" styleName="petit" /> |
<g:TextBox ui:field="prenom"/> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneEmail}"> |
<g:Label text="Votre adresse email : " styleName="petit" /> |
<g:TextBox ui:field="courriel" /> |
</g:HTMLPanel> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.choisirUnTaxon}" styleName="sousTitre"/> |
<g:Label text="{constants.referentiel}" styleName="petit"/> |
<g:ListBox ui:field="referentiel" /> |
<g:HTML HTML="{constants.infoTaxon}" styleName="petit"/> |
<g:LayoutPanel ui:field="propositionTaxon" styleName="{style.propositionTaxon}" /> |
<g:HTML><br /></g:HTML> |
<g:Label text="{constants.commentaire}" styleName="sousTitre"/> |
<g:TextArea ui:field="commentaires" styleName="{style.commentaire}" /> |
<g:Button text="{constants.boutonProposer}" ui:field="boutonValidationProposition" styleName="{style.boutonProposer} arrondi"/> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionPresenteur.java |
---|
New file |
0,0 → 1,268 |
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition; |
import java.util.Date; |
import java.util.HashMap; |
import java.util.Map; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxPresenteur; |
import org.tela_botanica.del.client.composants.formulaires.autocompletion.AutoCompletionComboBoxVue; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.composants.validation.ValidateurChampTexteNonNul; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.modeles.Contributeur; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination; |
import org.tela_botanica.del.client.services.ReferentielService; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService; |
import org.tela_botanica.del.client.services.rest.async.PropositionDeterminationCallBack; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.UtilitairesAutoCompletionService; |
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.http.client.Response; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class FormulairePropositionPresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public HasText getObjetNom(); |
public HasText getObjetPrenom(); |
public HasWidgets getPropositionTaxon(); |
public HasText getCommentaires(); |
public HasClickHandlers getBoutonValidationProposition(); |
public void afficherNomPrenomEtDesactiver(String nom, String prenom); |
public String getCourriel(); |
public void afficherEmailEtDesactiver(String courriel); |
public String getNom(); |
public String getPrenom(); |
public void afficherStyleErreurNom(String styleErreur); |
public void supprimerStyleErreurNom(String styleErreur); |
public void afficherStyleErreurPrenom(String styleErreur); |
public void supprimerStyleErreurPrenom(String styleErreur); |
public void afficherPropositionDejaEffectuée(String taxon); |
public HasText getObjetCourriel(); |
public void setReferentiel(String referentiel); |
public String getReferentiel(); |
public void afficherStyleErreurCourriel(String styleErreur); |
void supprimerStyleErreurCourriel(String styleErreur); |
void remplirListeReferentiels(Map<String, String> listeReferentiels); |
} |
private Vue vue; |
private Config config; |
private AutoCompletionComboBoxPresenteur autoCompletionNomTaxonsPresenteur; |
private PropositionDeterminationService propositionDeterminationService; |
private Map<String, InfosNomPourAutocompletion> cacheTaxons = new HashMap<String, InfosNomPourAutocompletion>(); |
public FormulairePropositionPresenteur(Vue vue, PropositionDeterminationService propositionDeterminationService) { |
this.vue = vue; |
this.propositionDeterminationService=propositionDeterminationService; |
config = new Config(); |
creerCompletionTaxons(); |
remplirAvecInfosUtilisateur(); |
} |
private void remplirAvecInfosUtilisateur() { |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
if (utilisateur.estIdentifie()) { |
vue.afficherNomPrenomEtDesactiver(utilisateur.getNom(), utilisateur.getPrenom()); |
vue.afficherEmailEtDesactiver(utilisateur.getCourriel()); |
} |
} |
private void creerCompletionTaxons() { |
String url = this.config.getServiceBaseUrl() + "nomstaxons"; |
vue.remplirListeReferentiels(ReferentielService.getReferentiels()); |
final String referentiel = CacheClient.getInstance().getObservationCourante().getReferentiel(); |
String referentielPredefini = referentiel.substring(0, 5); |
if (referentielPredefini.equals("autre") || referentielPredefini.equals("")) { |
referentielPredefini = "bdtfx"; // évite de saisir des noms latins en dur et de perdre le nn |
} |
vue.setReferentiel(referentielPredefini); |
autoCompletionNomTaxonsPresenteur = new AutoCompletionComboBoxPresenteur(new AutoCompletionComboBoxVue(), url) { |
protected String effectuerPreTraitementChaineRequete(String requete) { |
// si aucun référentiel selectionné, pas de requete |
if(vue.getReferentiel() != null && !vue.getReferentiel().equals("") && !vue.getReferentiel().equals("tous")) { |
requete = "?masque.nom=" + requete + "&masque.referentiel=" + vue.getReferentiel().substring(0, 5); |
return requete; |
} else { |
return null; |
} |
} |
@Override |
protected InfosNomPourAutocompletion[] parserResultatRequete(Response response) { |
cacheTaxons = UtilitairesAutoCompletionService.extraireTaxonsNumNomsResultatRetourSimple(response); |
return UtilitairesAutoCompletionService.parserResultatRetourSimple(response); |
} |
}; |
} |
public void go(HasWidgets composite) { |
autoCompletionNomTaxonsPresenteur.go(vue.getPropositionTaxon()); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
protected void gererEvenements() { |
vue.getBoutonValidationProposition().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (!validerSaisieProposition()) { |
return; |
} else { |
final PropositionDetermination propositionAjoutee = collecterValeursSaisieProposition(); |
if(verifierPropositionDejaAjoutee(propositionAjoutee)){ |
BusEvenementiel.getInstance().fireEvent(new EvenementAjoutDetermination(propositionAjoutee)); |
vue.afficherPropositionDejaEffectuée(propositionAjoutee.getEspece()); |
return; |
} |
propositionDeterminationService.ajouterProposition(propositionAjoutee, new PropositionDeterminationCallBack() { |
@Override |
public void surRetour(String idNouvelleProposition) { |
propositionAjoutee.setId(idNouvelleProposition); |
CacheClient.getInstance().getObservationCourante().ajouterPropositionDetermination(propositionAjoutee); |
EvenementAjoutDetermination evenementAjoutDetermination = new EvenementAjoutDetermination(propositionAjoutee); |
BusEvenementiel.getInstance().fireEvent(evenementAjoutDetermination); |
} |
}); |
} |
} |
}); |
} |
private boolean verifierPropositionDejaAjoutee(PropositionDetermination propositionDetermination){ |
for(InterventionForum interventionForum: CacheClient.getInstance().getObservationCourante().getInterventionsForum()){ |
if(interventionForum instanceof PropositionDetermination){ |
if(((PropositionDetermination)interventionForum).getEspece().equals(propositionDetermination.getEspece())){ |
return true; |
} |
} |
} |
return false; |
} |
private boolean validerSaisieProposition() { |
ValidateurChampTexteNonNul validateurNom = new ValidateurChampTexteNonNul(vue.getObjetNom()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurNom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurNom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurPrenom = new ValidateurChampTexteNonNul(vue.getObjetPrenom()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurPrenom(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurPrenom(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurCourriel = new ValidateurChampTexteNonNul(vue.getObjetCourriel()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
vue.afficherStyleErreurCourriel(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
vue.supprimerStyleErreurCourriel(styleErreur); |
} |
}; |
ValidateurChampTexteNonNul validateurTaxon = new ValidateurChampTexteNonNul(autoCompletionNomTaxonsPresenteur.getAutoCompletionComboBoxVue().getSuggestBox()) { |
@Override |
public void afficherStyleErreur(String styleErreur) { |
autoCompletionNomTaxonsPresenteur.afficherStyleErreur(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
autoCompletionNomTaxonsPresenteur.supprimerStyleErreur(styleErreur); |
} |
}; |
boolean nomSaisi = validateurNom.valider(); |
boolean prenomSaisi = validateurPrenom.valider(); |
boolean courrielSaisi = validateurCourriel.valider(); |
boolean taxonSaisi = validateurTaxon.valider(); |
return nomSaisi && prenomSaisi && courrielSaisi && taxonSaisi; |
} |
private PropositionDetermination collecterValeursSaisieProposition() { |
PropositionDetermination propositionAjoutee = new PropositionDetermination(CacheClient.getInstance().getObservationCourante()); |
propositionAjoutee.setId(CacheClient.getInstance().getObservationCourante().getId()); |
String idUtilisateur = null; |
if (CacheClient.getInstance().getUtilisateur().estIdentifie()) { |
idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
} |
Contributeur contributeur = new Contributeur(idUtilisateur, vue.getNom(), vue.getPrenom(), vue.getCourriel()); |
propositionAjoutee.setContributeur(contributeur); |
propositionAjoutee.setDate(new Date()); |
String nomTaxon = autoCompletionNomTaxonsPresenteur.getValeur(); |
propositionAjoutee.setEspece(nomTaxon); |
if(cacheTaxons.containsKey(nomTaxon)) { |
propositionAjoutee.setNumNomenclatural("" + cacheTaxons.get(nomTaxon).getNn()); |
} |
if(vue.getReferentiel() != "tous") { |
propositionAjoutee.setReferentiel(vue.getReferentiel()); |
} |
if (vue.getCommentaires().getText() != "") { |
String contenuCommentaire = vue.getCommentaires().getText(); |
propositionAjoutee.setCommentaire(contenuCommentaire); |
} |
return propositionAjoutee; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/formulaireproposition/FormulairePropositionVue.java |
---|
New file |
0,0 → 1,168 |
package org.tela_botanica.del.client.composants.formulaires.formulaireproposition; |
import java.util.Iterator; |
import java.util.Map; |
import org.tela_botanica.del.client.i18n.I18n; |
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.Window; |
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.Label; |
import com.google.gwt.user.client.ui.LayoutPanel; |
import com.google.gwt.user.client.ui.ListBox; |
import com.google.gwt.user.client.ui.TextArea; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class FormulairePropositionVue extends Composite implements FormulairePropositionPresenteur.Vue { |
@UiField |
public TextBox nom, prenom, courriel; |
@UiField |
public LayoutPanel propositionTaxon; |
@UiField |
public TextArea commentaires; |
@UiField |
public Button boutonValidationProposition; |
@UiField |
public Label labelnomPrenom; |
@UiField |
ListBox referentiel; |
interface FormulairePropositionUIiBinder extends UiBinder<Widget, FormulairePropositionVue> { |
}; |
FormulairePropositionUIiBinder uiBinder = GWT.create(FormulairePropositionUIiBinder.class); |
public FormulairePropositionVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public LayoutPanel getPropositionTaxon() { |
return propositionTaxon; |
} |
@Override |
public TextArea getCommentaires() { |
return commentaires; |
} |
@Override |
public Button getBoutonValidationProposition() { |
return boutonValidationProposition; |
} |
@Override |
public void afficherStyleErreurNom(String styleErreur) { |
nom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurNom(String styleErreur) { |
nom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherStyleErreurPrenom(String styleErreur) { |
prenom.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurPrenom(String styleErreur) { |
prenom.removeStyleName(styleErreur); |
} |
@Override |
public void afficherNomPrenomEtDesactiver(String nom, String prenom) { |
this.nom.setText(nom); |
this.prenom.setText(prenom); |
this.nom.setEnabled(false); |
this.prenom.setEnabled(false); |
} |
@Override |
public void afficherEmailEtDesactiver(String courriel) { |
this.courriel.setText(courriel); |
this.courriel.setEnabled(false); |
} |
public void afficherPropositionDejaEffectuée(String taxon) |
{ |
Window.alert(I18n.getMessages().propositionDejaEffectuee(taxon)); |
} |
@Override |
public String getCourriel() { |
return courriel.getText(); |
} |
@Override |
public String getNom() { |
return nom.getText(); |
} |
@Override |
public String getPrenom() { |
return prenom.getText(); |
} |
@Override |
public HasText getObjetNom() { |
return this.nom; |
} |
@Override |
public HasText getObjetPrenom() { |
return this.prenom; |
} |
@Override |
public HasText getObjetCourriel() { |
return this.courriel; |
} |
@Override |
public void afficherStyleErreurCourriel(String styleErreur) { |
courriel.setStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreurCourriel(String styleErreur) { |
courriel.removeStyleName(styleErreur); |
} |
@Override |
public void remplirListeReferentiels(Map<String, String> listeReferentiels) { |
for (Iterator<String> iterator = listeReferentiels.keySet().iterator(); iterator.hasNext();) { |
String codeRef = iterator.next(); |
referentiel.addItem(listeReferentiels.get(codeRef), codeRef); |
} |
} |
@Override |
public void setReferentiel(String codeReferentiel) { |
for(int i = 0; i < referentiel.getItemCount(); i++) { |
if(referentiel.getValue(i).equals(codeReferentiel)) { |
referentiel.setSelectedIndex(i); |
} |
} |
} |
@Override |
public String getReferentiel() { |
return referentiel.getValue(referentiel.getSelectedIndex()); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxPresenteur.java |
---|
New file |
0,0 → 1,194 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import com.google.gwt.core.shared.GWT; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.dom.client.KeyPressEvent; |
import com.google.gwt.event.dom.client.KeyPressHandler; |
import com.google.gwt.event.logical.shared.HasSelectionHandlers; |
import com.google.gwt.event.logical.shared.SelectionEvent; |
import com.google.gwt.event.logical.shared.SelectionHandler; |
import com.google.gwt.http.client.Request; |
import com.google.gwt.http.client.RequestBuilder; |
import com.google.gwt.http.client.RequestCallback; |
import com.google.gwt.http.client.RequestException; |
import com.google.gwt.http.client.Response; |
import com.google.gwt.http.client.URL; |
import com.google.gwt.user.client.Timer; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.SuggestOracle; |
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; |
public abstract class AutoCompletionComboBoxPresenteur { |
public interface Vue extends IsWidget { |
public void ajouterVue(HasWidgets composite); |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers(); |
public String getValeur(); |
public void remplirListe(InfosNomPourAutocompletion[] suggestions); |
public void afficherSuggestions(SuggestOracle.Request request,SuggestOracle.Callback response); |
public void afficherListeDeroulante(); |
public void nettoyer(); |
public void setValeur(String valeur); |
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers(); |
public HasText getSuggestBox(); |
public void afficherStyleErreur(String styleErreur); |
public void supprimerStyleErreur(String styleErreur); |
} |
private Vue autoCompletionComboBoxVue; |
SuggestOracle.Request requeteOracle; |
SuggestOracle.Callback callBackOracle; |
Timer suggestionTimer = null; |
int tempsAvantRequete = 500; |
String urlRequete = ""; |
public AutoCompletionComboBoxPresenteur(Vue vue, String urlRequete) { |
this.autoCompletionComboBoxVue = vue; |
this.urlRequete = urlRequete; |
gererEvenements(); |
} |
public void go(HasWidgets composite) { |
autoCompletionComboBoxVue.ajouterVue(composite); |
} |
public void gererEvenements() { |
autoCompletionComboBoxVue.getSuggestBoxHasKeyPressHandlers().addKeyPressHandler(new KeyPressHandler() { |
public void onKeyPress(KeyPressEvent event) { |
if(event.getUnicodeCharCode() != 0) { |
gererTimer(); |
} |
} |
}); |
requeteOracle = new SuggestOracle.Request(); |
callBackOracle = new SuggestOracle.Callback() { |
public void onSuggestionsReady(SuggestOracle.Request request, SuggestOracle.Response response) { |
autoCompletionComboBoxVue.afficherListeDeroulante(); |
} |
}; |
autoCompletionComboBoxVue.getSuggestBoxHasSelectionChangeHandlers().addSelectionHandler(new SelectionHandler<SuggestOracle.Suggestion>(){ |
@Override |
public void onSelection(SelectionEvent<Suggestion> event) { |
surSelectionSuggestion(event.getSelectedItem().getReplacementString()); |
} |
}); |
} |
public void gererTimer() { |
if(suggestionTimer == null) { |
suggestionTimer = new Timer() { |
public void run() { |
requeteSuggestions(); |
} |
}; |
suggestionTimer.schedule(tempsAvantRequete); |
} else { |
suggestionTimer.schedule(tempsAvantRequete); |
} |
} |
public void setTempsAvantRequete(int temps) { |
tempsAvantRequete = temps; |
} |
public int getTempsAvantRequete(int temps) { |
return tempsAvantRequete; |
} |
public String getValeur() { |
return autoCompletionComboBoxVue.getValeur(); |
} |
public void setValeur(String taxon) { |
autoCompletionComboBoxVue.setValeur(taxon); |
} |
public void nettoyer() { |
autoCompletionComboBoxVue.nettoyer(); |
} |
public void requeteSuggestions() { |
final String requete = URL.encodeQueryString(autoCompletionComboBoxVue.getValeur()); |
String requeteAjax = effectuerPreTraitementChaineRequete(requete); |
// ceci permet au composant qui utilise l'autocomplétion |
// d'annuler une requete |
if(requeteAjax == null) { |
return; |
} |
String urlProxy = urlRequete+requeteAjax; |
RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, urlProxy) ; |
try { |
rb.sendRequest(null, new RequestCallback() { |
public void onError(final Request request, final Throwable exception) { |
// TODO Auto-generated method stub |
} |
public void onResponseReceived(final Request request, |
final Response response) { |
surReponseRequete(requete, response); |
} |
}) ; |
} catch (RequestException e) { |
// TODO Auto-generated catch block |
e.printStackTrace(); |
} |
} |
public void surReponseRequete(String requete, Response response) { |
InfosNomPourAutocompletion[] valeurs = parserResultatRequete(response); |
autoCompletionComboBoxVue.remplirListe(valeurs); |
requeteOracle.setQuery(requete); |
autoCompletionComboBoxVue.afficherSuggestions(requeteOracle, callBackOracle); |
} |
protected void surSelectionSuggestion(String suggestion) { |
return; |
} |
/** |
* Permet d'intervenir sur la chaine tapée par l'utilisateur avant que celle-ci ne soit passée |
* à la requête asynchrone pour pouvoir la formater (pour mettre en minuscule, séparer des termes) |
* par défaut renvoie la chaine telle quelle, à surcharger au besoin |
* @param String requete chaine de recherche contenant ce que l'utilisateur à tapé |
* @return String une chaine transformée |
*/ |
protected String effectuerPreTraitementChaineRequete(String requete) { |
return requete; |
} |
/** |
* Parse les résultats de la requete afin de pouvoir les utiliser à implémenter par le |
* composants qui crée la combobox selon le contexte et le web service appelé. |
* @param Response la réponse à la requête asynchrone |
* @return String[] le tableau des suggestions qui sera affiché dans la combobox |
*/ |
protected abstract InfosNomPourAutocompletion[] parserResultatRequete(Response response); |
public Vue getAutoCompletionComboBoxVue() { |
return autoCompletionComboBoxVue; |
} |
public void afficherStyleErreur(String styleErreur) { |
autoCompletionComboBoxVue.afficherStyleErreur(styleErreur); |
} |
public void supprimerStyleErreur(String styleErreur) { |
autoCompletionComboBoxVue.supprimerStyleErreur(styleErreur); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/formulaires/autocompletion/AutoCompletionComboBoxVue.java |
---|
New file |
0,0 → 1,86 |
package org.tela_botanica.del.client.composants.formulaires.autocompletion; |
import org.tela_botanica.del.client.utils.InfosNomPourAutocompletion; |
import org.tela_botanica.del.client.utils.TBSuggestOracle; |
import com.google.gwt.event.dom.client.HasKeyPressHandlers; |
import com.google.gwt.event.logical.shared.HasSelectionHandlers; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.LayoutPanel; |
import com.google.gwt.user.client.ui.SuggestBox; |
import com.google.gwt.user.client.ui.SuggestOracle; |
import com.google.gwt.user.client.ui.SuggestOracle.Suggestion; |
public class AutoCompletionComboBoxVue extends LayoutPanel implements AutoCompletionComboBoxPresenteur.Vue { |
TBSuggestOracle msu = new TBSuggestOracle(); |
SuggestBox suggestions = new SuggestBox(msu); |
public AutoCompletionComboBoxVue() { |
add(suggestions); |
//TODO: voir avec greg si la taille doit être définie ici |
setHeight("25px"); |
setWidth("100%"); |
} |
@Override |
public SuggestBox getSuggestBox() { |
return suggestions; |
} |
public void remplirListe(InfosNomPourAutocompletion[] listePropositions) { |
msu.clear(); |
for (int i = 0; i < listePropositions.length; i++) { |
msu.add(listePropositions[i]); |
} |
} |
@Override |
public void afficherSuggestions(SuggestOracle.Request requeteOracle, SuggestOracle.Callback callBackOracle) { |
msu.requestSuggestions(requeteOracle, callBackOracle); |
} |
@Override |
public void afficherListeDeroulante() { |
suggestions.showSuggestionList(); |
} |
public void nettoyer() { |
suggestions.setText(""); |
} |
public void setValeur(String taxon) { |
suggestions.setValue(taxon); |
} |
@Override |
public HasKeyPressHandlers getSuggestBoxHasKeyPressHandlers() { |
return suggestions; |
} |
@Override |
public HasSelectionHandlers<Suggestion> getSuggestBoxHasSelectionChangeHandlers() { |
return suggestions; |
} |
@Override |
public String getValeur() { |
return suggestions.getText(); |
} |
@Override |
public void ajouterVue(HasWidgets composite) { |
composite.add(this.asWidget()); |
} |
@Override |
public void afficherStyleErreur(String styleErreur) { |
suggestions.addStyleName(styleErreur); |
} |
@Override |
public void supprimerStyleErreur(String styleErreur) { |
suggestions.removeStyleName(styleErreur); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/ArbreCommentairePresenteur.java |
---|
New file |
0,0 → 1,40 |
package org.tela_botanica.del.client.composants.forum; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class ArbreCommentairePresenteur { |
private InterventionForum possesseurDeCommentaires; |
public interface Vue extends IsWidget { |
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires); |
} |
private Vue vue; |
public ArbreCommentairePresenteur(Vue vue, InterventionForum possesseurDeCommentaires) { |
this.vue = vue; |
this.possesseurDeCommentaires = possesseurDeCommentaires; |
vue.creerArbreCommentaire(this.possesseurDeCommentaires); |
} |
public void go(HasWidgets composite) { |
composite.add(vue.asWidget()); |
} |
public IsWidget getArbreCommentaireVue() { |
return vue; |
} |
public InterventionForum getPossesseurDeCommentaires() { |
return possesseurDeCommentaires; |
} |
public void gererEvenements() { |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/ArbreCommentaireVue.java |
---|
New file |
0,0 → 1,50 |
package org.tela_botanica.del.client.composants.forum; |
import java.util.ArrayList; |
import java.util.Date; |
import java.util.List; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import com.google.gwt.i18n.client.DateTimeFormat; |
import com.google.gwt.i18n.client.DateTimeFormat.PredefinedFormat; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.Tree; |
import com.google.gwt.user.client.ui.TreeItem; |
public class ArbreCommentaireVue extends Tree implements ArbreCommentairePresenteur.Vue { |
public ArbreCommentaireVue() { |
super(); |
} |
public void creerArbreCommentaire(InterventionForum possesseurDeCommentaires) { |
TreeItem racineArbreCommentaires = new TreeItem(); |
addItem(racineArbreCommentaires); |
if (possesseurDeCommentaires instanceof Commentaire) { |
List<Commentaire> commentaires = new ArrayList<Commentaire>(); |
commentaires.add((Commentaire) possesseurDeCommentaires); |
creerListeCommentaireRecursive(racineArbreCommentaires, commentaires); |
} else { |
creerListeCommentaireRecursive(racineArbreCommentaires, possesseurDeCommentaires.getListeCommentaires()); |
} |
} |
private void creerListeCommentaireRecursive(TreeItem parentTreeItem, List<Commentaire> commentaires) { |
for (Commentaire commentaire : commentaires) { |
String commentaireHTML = commentaire.getCommentaire(); |
HTML commentaireWidget = new HTML(commentaireHTML); |
parentTreeItem.setWidget(commentaireWidget); |
if (commentaire.getListeCommentaires().size() != 0) { |
TreeItem childTreeItem = new TreeItem(); |
parentTreeItem.addItem(childTreeItem); |
creerListeCommentaireRecursive(childTreeItem, commentaire.getListeCommentaires()); |
} |
} |
parentTreeItem.setState(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/forum.css |
---|
New file |
0,0 → 1,0 |
.table {} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/ForumVue.ui.xml |
---|
New file |
0,0 → 1,11 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="forum.css" /> |
<g:HTMLPanel> |
<g:HTMLPanel ui:field='panneauInterventions' styleName="{style.table}" /> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/ForumPresenteur.java |
---|
New file |
0,0 → 1,125 |
package org.tela_botanica.del.client.composants.forum; |
import java.util.Collections; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur; |
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionVue; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination; |
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.GestionnaireEvenementSuppressionDetermination; |
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination; |
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.GestionnaireEvenementVoteDetermination; |
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret; |
import org.tela_botanica.del.client.utils.ComparateurPropositionDetermination; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class ForumPresenteur { |
public interface Vue extends IsWidget { |
public abstract HasWidgets getPanneauInterventions(); |
public abstract void vider(); |
} |
private Vue vue; |
public ForumPresenteur(Vue vue) { |
this.vue = vue; |
} |
public void go(HasWidgets composite) { |
chargerDeterminations(); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
private void chargerDeterminations() { |
vue.vider(); |
List<PropositionDetermination> interventions = CacheClient.getInstance().getObservationCourante().getPropositionDeterminations(); |
Collections.sort(interventions, new ComparateurPropositionDetermination()); |
for (InterventionForum interventionCourante : interventions) { |
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret()); |
presenteur.go(vue.getPanneauInterventions()); |
ajouterCommentairesRecursivement(interventionCourante, presenteur); |
} |
List<Commentaire> commentaires = CacheClient.getInstance().getObservationCourante().getCommentairesForum(); |
for (InterventionForum interventionCourante : commentaires) { |
ForumInterventionPresenteur presenteur = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionCourante, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret()); |
presenteur.go(vue.getPanneauInterventions()); |
ajouterCommentairesRecursivement(interventionCourante, presenteur); |
} |
} |
private void ajouterCommentairesRecursivement(InterventionForum interventionCourante, ForumInterventionPresenteur presenteur) { |
List<Commentaire> fils = interventionCourante.getListeCommentaires(); |
for (InterventionForum interventionFils : fils) { |
ForumInterventionPresenteur presenteurFils = new ForumInterventionPresenteur(new ForumInterventionVue(), interventionFils, new CommentaireServiceConcret(), new PropositionDeterminationServiceConcret()); |
ajouterCommentairesRecursivement(interventionFils, presenteurFils); |
presenteur.ajouterEnfant(presenteurFils); |
} |
} |
private void gererEvenements() { |
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() { |
@Override |
public void onAjoutDetermination(EvenementAjoutDetermination event) { |
chargerDeterminations(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() { |
@Override |
public void onAjoutCommentaire(EvenementAjoutCommentaire event) { |
chargerDeterminations(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementSuppressionDetermination.TYPE, new GestionnaireEvenementSuppressionDetermination() { |
@Override |
public void onSuppressionDetermination(EvenementSuppressionDetermination event) { |
chargerDeterminations(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementSuppressionCommentaire.TYPE, new GestionnaireEvenementSuppressionCommentaire() { |
@Override |
public void onSuppressionCommentaire(EvenementSuppressionCommentaire event) { |
chargerDeterminations(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementVoteDetermination.TYPE, new GestionnaireEvenementVoteDetermination() { |
@Override |
public void onVoteDetermination(VoteDetermination event) { |
// ceci permet d'avoir un classement à jour des déterminations à chaque vote |
// à voir si ça ne fait pas trop ramer les petites machines |
chargerDeterminations(); |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/interventions/forumIntervention.css |
---|
New file |
0,0 → 1,82 |
.nombreVotes { |
width:15px; |
height:16px; |
padding-left: 10px; |
float:right; |
margin-left:10px; |
} |
.infobulle { |
background: none repeat scroll 0 0 #1A5AC3; |
color: white; |
font-size: 11px; |
height: 11px; |
line-height: 0.9; |
margin-left: 2px; |
margin-top: 8px; |
min-width: 7px; |
padding: 1px; |
position: absolute; |
} |
.proposition { |
width:550px; |
padding:10px; |
background:#EEE; |
margin-bottom:5px; |
} |
.nom { |
margin-right:4px; |
margin-top:1px; |
} |
.le { |
margin-top:1px; |
} |
.date { |
margin-left:3px; |
margin-top:1px; |
} |
.determination { |
clear:left; |
float:left; |
margin-top:1px; |
margin-right:3px; |
} |
.nomtaxon { |
float:left; |
font-size:15px; |
} |
.voter div{ |
font-size:18px; |
color:#333; |
text-align:right; |
margin-bottom:-3px; |
} |
.commentaire { |
clear:left |
} |
.daccord { |
clear:left; |
margin-right:5px; |
} |
.repondre { |
margin-top:3px; |
float:left; |
cursor:pointer; |
margin-bottom:5px; |
font-size:10px; |
} |
.suppression { |
width:15px; |
height:16px; |
background:url('./img/cancel.png') no-repeat; |
cursor: pointer; |
margin-top:-15px; |
margin-left:99%; |
position:relative; |
} |
.labelVoter { |
padding-left:9px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.ui.xml |
---|
New file |
0,0 → 1,39 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="forumIntervention.css" /> |
<g:FocusPanel ui:field="proposition" styleName="{style.proposition}"> |
<g:HTMLPanel> |
<g:Button ui:field="boutonValidationTaxon" text="✔" styleName="bouton boutonValiderTaxon" /> |
<g:HTMLPanel ui:field="conteneurIntermediaireProposition" styleName="conteneurIntermediaireProposition" > |
<g:FocusPanel ui:field="conteneurLienSuppression" styleName="{style.suppression}"> |
<g:HTML ui:field="supprimer" /> |
</g:FocusPanel> |
<g:HTMLPanel styleName="gauche nettoyage" ui:field="zoneDetermination"> |
<g:Label ui:field="nomTaxon" styleName="{style.nomtaxon} nomTaxonProposition" /> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="droite" ui:field="zoneVoter"> |
<g:HorizontalPanel> |
<g:Label text="Score " styleName="petit" /> |
<g:Label text="Voter" styleName="{style.labelVoter} petit" /> |
</g:HorizontalPanel> |
<g:HTMLPanel ui:field="voter" styleName="{style.voter} gauche" /> |
<g:FocusPanel ui:field="conteneurPanneauVotes" styleName="{style.nombreVotes}"> |
<g:HTML ui:field="nbVotesHtml" styleName="{style.infobulle}"/> |
</g:FocusPanel> |
</g:HTMLPanel> |
<g:Label text="Détermination proposée par " ui:field="labelDeterminationProposee" styleName="{style.determination} petit" /> |
<g:Label ui:field="nom" styleName="{style.nom} petit gauche" /> |
<g:Label text="le" styleName="{style.le} gauche petit"/> |
<g:Label ui:field="date" styleName="{style.date} gauche petit"/> |
<g:Label ui:field="commentaire" styleName="{style.commentaire}"/> |
<g:Label text="Répondre" styleName="{style.repondre} labelLien" ui:field="repondre"/> |
<g:HTML><br /></g:HTML> |
<g:HTMLPanel ui:field="zoneEnfants"></g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</g:FocusPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionPresenteur.java |
---|
New file |
0,0 → 1,344 |
package org.tela_botanica.del.client.composants.forum.interventions; |
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.formulaires.formulairecommentaire.FormulaireCommentairePresenteur; |
import org.tela_botanica.del.client.composants.formulaires.formulairecommentaire.FormulaireCommentaireVue; |
import org.tela_botanica.del.client.composants.forum.ArbreCommentairePresenteur; |
import org.tela_botanica.del.client.composants.forum.ArbreCommentaireVue; |
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVotePresenteur; |
import org.tela_botanica.del.client.composants.votes.barrerepartition.BarreRepartitionVoteVue; |
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationPresenteur; |
import org.tela_botanica.del.client.composants.votes.details.DetailListeVotesDeterminationVue; |
import org.tela_botanica.del.client.config.Config; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.InterventionForum; |
import org.tela_botanica.del.client.modeles.MoyenneVote; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.Utilisateur; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.EvenementAjoutCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.ajoutcommentaire.GestionnaireEvenementAjoutCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.EvenementAjoutDetermination; |
import org.tela_botanica.del.client.navigation.evenement.ajoutdetermination.GestionnaireEvenementAjoutDetermination; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.suppressiondetermination.EvenementSuppressionDetermination; |
import org.tela_botanica.del.client.navigation.evenement.validationPropositionDetermination.EvenementValidationPropositionDetermination; |
import org.tela_botanica.del.client.services.CalculVoteDeterminationService; |
import org.tela_botanica.del.client.services.rest.CommentaireService; |
import org.tela_botanica.del.client.services.rest.CommentaireServiceConcret; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationService; |
import org.tela_botanica.del.client.services.rest.PropositionDeterminationServiceConcret; |
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret; |
import org.tela_botanica.del.client.services.rest.async.SuppressionCommentaireCallback; |
import org.tela_botanica.del.client.services.rest.async.SuppressionPropositionDeterminationCallback; |
import org.tela_botanica.del.client.services.rest.async.ValidationPropositionCallback; |
import org.tela_botanica.del.client.utils.ModerationUtils; |
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.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
import com.google.gwt.event.dom.client.MouseOutEvent; |
import com.google.gwt.event.dom.client.MouseOutHandler; |
import com.google.gwt.event.dom.client.MouseOverEvent; |
import com.google.gwt.event.dom.client.MouseOverHandler; |
import com.google.gwt.event.shared.HandlerRegistration; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class ForumInterventionPresenteur { |
public interface Vue extends IsWidget { |
void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires); |
void ajouterInterventionCommentaire(Commentaire commentaire, IsWidget arbreCommentaires); |
HasClickHandlers getRepondre(); |
HasWidgets getEnfants(); |
HasClickHandlers getLienSuppression(); |
void afficherLienSuppression(); |
void cacherLienSuppression(); |
HasMouseOverHandlers getConteneurInterventionMouseOver(); |
HasMouseOutHandlers getConteneurInterventionMouseOut(); |
HasClickHandlers getEspece(); |
void ajouterLienEspece(); |
HasClickHandlers getAuteur(); |
void ajouterLienAuteur(); |
void cacherDeterminationProposee(); |
void ajouterLienVotes(); |
void masquerLienVotes(); |
void setNbVotes(int votes); |
public HasClickHandlers getZoneNbVotes(); |
public HasClickHandlers getBoutonValidationTaxon(); |
void cacherBoutonValidationTaxon(); |
void afficherBoutonValidationTaxon(); |
} |
private Vue vue; |
private InterventionForum interventionForum; |
private CommentaireService commentaireService; |
private PropositionDeterminationService propositionDeterminationService; |
private FenetreOverlaySimplePresenteur overlay; |
private int nbVotes; |
private HandlerRegistration validationTaxonHandler; |
public ForumInterventionPresenteur(Vue vue, InterventionForum interventionForum, CommentaireService commentaireService, PropositionDeterminationService propositionDeterminationService) { |
this.vue = vue; |
this.interventionForum = interventionForum; |
this.commentaireService = commentaireService; |
this.propositionDeterminationService = propositionDeterminationService; |
} |
public void go(HasWidgets composite) { |
chargerIntervention(); |
composite.add(vue.asWidget()); |
gererEvenements(); |
} |
public void ajouterEnfant(ForumInterventionPresenteur presenteur) { |
presenteur.go(vue.getEnfants()); |
} |
private void chargerIntervention() { |
if (interventionForum instanceof PropositionDetermination) { |
ajouterPropositionDetermination((PropositionDetermination) interventionForum); |
} else if (interventionForum instanceof Commentaire) { |
ajouterCommentaire((Commentaire) interventionForum); |
vue.cacherDeterminationProposee(); |
} |
} |
private void ajouterPropositionDetermination(PropositionDetermination propositionDetermination) { |
final PropositionDetermination cetteProposition = propositionDetermination; |
this.nbVotes = propositionDetermination.getVotesDeterminations().size(); |
BarreRepartitionVotePresenteur barreRepartitionVotePresenteur = new BarreRepartitionVotePresenteur(new BarreRepartitionVoteVue(), new VoteDeterminationServiceConcret()); |
barreRepartitionVotePresenteur.toggleNomEspece(); |
calculerEtAfficherVoteDetermination(barreRepartitionVotePresenteur, propositionDetermination); |
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), propositionDetermination); |
vue.ajouterInterventionDetermination(propositionDetermination, barreRepartitionVotePresenteur.getBarreRepartitionVoteVue(), arbreCommentairePresenteur.getArbreCommentaireVue()); |
final String nn = propositionDetermination.getNumNomenclatural(); |
final String referentiel = propositionDetermination.getReferentiel(); |
// @TODO harmoniser les valeurs qui veulent dire "y en n'a pas" plutôt que !equals("kedal") :-/ |
if (nn != null && !nn.equals(0) && !nn.equals("0") && referentiel != null && !referentiel.equals("")) { |
vue.ajouterLienEspece(); |
vue.getEspece().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
Config config = new Config(); |
String efloreUrlFicheTpl = config.getUrl("efloreTaxon"); |
String efloreUrlFiche = efloreUrlFicheTpl.replaceAll("referentiel-nn-num_nom", referentiel.substring(0,5)+"-nn-"+nn); |
Window.open(efloreUrlFiche, "Fiche eflore", config.getInfo("popupOptions")); |
} |
}); |
} |
gererAffichageBoutonValidationTaxon(cetteProposition); |
final String idContributeur = propositionDetermination.getContributeur().getId(); |
if (idContributeur != null && !idContributeur.equals("0")) { |
vue.ajouterLienAuteur(); |
vue.getAuteur().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
Config config = new Config(); |
Window.open(config.getUrl("profil") + idContributeur, "Consultation de l'annuaire", config.getInfo("popupOptions")); |
} |
}); |
} |
} |
private void gererAffichageBoutonValidationTaxon(final PropositionDetermination cetteProposition) { |
if (doitAfficherBoutonValidation(cetteProposition)) { |
vue.afficherBoutonValidationTaxon(); |
if(validationTaxonHandler != null) { |
validationTaxonHandler.removeHandler(); |
} |
validationTaxonHandler = vue.getBoutonValidationTaxon().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (Window.confirm(I18n.getVocabulary().confirmationValidationDetermination())) { |
validerProposition(cetteProposition); |
} |
} |
}); |
} else { |
vue.cacherBoutonValidationTaxon(); |
} |
} |
private void ajouterCommentaire(Commentaire proposition) { |
ArbreCommentairePresenteur arbreCommentairePresenteur = new ArbreCommentairePresenteur(new ArbreCommentaireVue(), proposition); |
vue.ajouterInterventionCommentaire(proposition, arbreCommentairePresenteur.getArbreCommentaireVue()); |
} |
private void calculerEtAfficherVoteDetermination(BarreRepartitionVotePresenteur barreRepartitionVotePresenteur, PropositionDetermination propositionDetermination) { |
MoyenneVote votes = CalculVoteDeterminationService.calculerVoteDetermination(propositionDetermination); |
barreRepartitionVotePresenteur.afficherVotes(votes); |
} |
private void gererEvenements() { |
if (this.nbVotes > 0) { |
vue.setNbVotes(this.nbVotes); |
vue.ajouterLienVotes(); |
vue.getZoneNbVotes().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (nbVotes > 0) { |
FenetreOverlaySimplePresenteur fenetreOverlaySimplePresenteur = new FenetreOverlaySimplePresenteur( |
new FenetreOverlayDefilanteVue()); |
DetailListeVotesDeterminationPresenteur detailListeVotesDeterminationPresenteur = new DetailListeVotesDeterminationPresenteur( |
new DetailListeVotesDeterminationVue()); |
fenetreOverlaySimplePresenteur |
.ouvrirFenetreModale(detailListeVotesDeterminationPresenteur); |
detailListeVotesDeterminationPresenteur |
.afficherVotes((PropositionDetermination) interventionForum); |
} |
} |
}); |
} else { |
vue.masquerLienVotes(); |
} |
vue.getRepondre().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
FormulaireCommentairePresenteur commentairePresenteur = new FormulaireCommentairePresenteur(interventionForum, new CommentaireServiceConcret(), new FormulaireCommentaireVue()); |
overlay = new FenetreOverlaySimplePresenteur(new FenetreOverlayDefilanteVue()); |
overlay.ouvrirFenetreModale(commentairePresenteur); |
} |
}); |
vue.getConteneurInterventionMouseOver().addMouseOverHandler(new MouseOverHandler() { |
@Override |
public void onMouseOver(MouseOverEvent event) { |
if(peutSupprimerIntervention()) { |
vue.afficherLienSuppression(); |
} |
} |
}); |
vue.getConteneurInterventionMouseOut().addMouseOutHandler(new MouseOutHandler() { |
@Override |
public void onMouseOut(MouseOutEvent event) { |
if(peutSupprimerIntervention()) { |
vue.cacherLienSuppression(); |
} |
} |
}); |
vue.getLienSuppression().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
String message = ""; |
if (interventionForum instanceof PropositionDetermination) { |
message = I18n.getVocabulary().confirmationSuppressionDetermination(); |
} else if (interventionForum instanceof Commentaire) { |
message = I18n.getVocabulary().confirmationSuppressionCommentaire(); |
} |
if(Window.confirm(message)) { |
supprimerIntervention(); |
} |
} |
}); |
vue.cacherLienSuppression(); |
BusEvenementiel.getInstance().addHandler(EvenementAjoutDetermination.TYPE, new GestionnaireEvenementAjoutDetermination() { |
@Override |
public void onAjoutDetermination(EvenementAjoutDetermination event) { |
if(overlay != null && overlay.fenetreModaleEstOuverte()) { |
overlay.fermerFenetreModale(); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementAjoutCommentaire.TYPE, new GestionnaireEvenementAjoutCommentaire() { |
@Override |
public void onAjoutCommentaire(EvenementAjoutCommentaire event) { |
if(overlay != null && overlay.fenetreModaleEstOuverte()) { |
overlay.fermerFenetreModale(); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() { |
@Override |
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) { |
if (interventionForum instanceof PropositionDetermination) { |
gererAffichageBoutonValidationTaxon((PropositionDetermination)interventionForum); |
} |
} |
}); |
} |
private boolean peutSupprimerIntervention() { |
return (!interventionForum.aDesCommentaires() && interventionForum.getContributeur() != null && interventionForum.getContributeur().getId().equals(CacheClient.getInstance().getUtilisateur().getId())); |
} |
private void supprimerIntervention() { |
if(interventionForum instanceof PropositionDetermination) { |
propositionDeterminationService.supprimerProposition((PropositionDetermination)interventionForum, new SuppressionPropositionDeterminationCallback() { |
@Override |
public void surRetour(String objetRetour) { |
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum); |
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionDetermination((PropositionDetermination)interventionForum)); |
} |
}); |
} |
if(interventionForum instanceof Commentaire) { |
commentaireService.supprimerCommentaire((Commentaire)interventionForum, new SuppressionCommentaireCallback() { |
@Override |
public void surRetour(String objetRetour) { |
CacheClient.getInstance().getObservationCourante().supprimerIntervention(interventionForum); |
BusEvenementiel.getInstance().fireEvent(new EvenementSuppressionCommentaire((Commentaire)interventionForum)); |
} |
}); |
} |
} |
private boolean doitAfficherBoutonValidation(PropositionDetermination propositionDetermination) { |
boolean estPropositionRetenue = propositionDetermination.estPropositionRetenue(); |
String numNomProp = propositionDetermination.getNumNomenclatural(); |
String referentielProp = propositionDetermination.getReferentiel(); |
boolean aUnNumNom = (numNomProp != null && !numNomProp.trim().equals("") && !numNomProp.trim().equals("0")); |
boolean aUnReferentiel = (referentielProp != null && !referentielProp.trim().equals("") && !referentielProp.trim().equals("0")); |
Utilisateur utilisateur = CacheClient.getInstance().getUtilisateur(); |
boolean estAuteurObservation = false; |
if(utilisateur != null) { |
estAuteurObservation = utilisateur.estIdentifie() && utilisateur.getId().equals(CacheClient.getInstance().getObservationCourante().getIdAuteur()); |
} |
boolean peutValiderObservation = ModerationUtils.utilisateurPeutValiderObservation(CacheClient.getInstance().getUtilisateur(), CacheClient.getInstance().getObservationCourante()); |
return (peutValiderObservation || estAuteurObservation) && aUnReferentiel && aUnNumNom && !estPropositionRetenue; |
} |
private void validerProposition(PropositionDetermination propositionDetermination) { |
final PropositionDetermination cetteProposition = propositionDetermination; |
PropositionDeterminationServiceConcret propositionService = new PropositionDeterminationServiceConcret(); |
propositionDetermination.setValideePar(CacheClient.getInstance().getUtilisateur().getId()); |
propositionService.validerProposition(propositionDetermination, new ValidationPropositionCallback() { |
@Override |
public void surRetour(String objetRetour) { |
BusEvenementiel.getInstance().fireEvent(new EvenementValidationPropositionDetermination(cetteProposition)); |
} |
}); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/interventions/ForumInterventionVue.java |
---|
New file |
0,0 → 1,203 |
package org.tela_botanica.del.client.composants.forum.interventions; |
import org.tela_botanica.del.client.composants.forum.interventions.ForumInterventionPresenteur.Vue; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.Commentaire; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasMouseOutHandlers; |
import com.google.gwt.event.dom.client.HasMouseOverHandlers; |
import com.google.gwt.i18n.client.DateTimeFormat; |
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.FocusPanel; |
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.Hyperlink; |
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 ForumInterventionVue extends Composite implements Vue { |
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class); |
interface ForumUIiBinder extends UiBinder<Widget, ForumInterventionVue> { |
}; |
@UiField |
FocusPanel proposition; |
@UiField |
Label nom, nomTaxon, date, commentaire, repondre, labelDeterminationProposee; |
@UiField |
HTMLPanel conteneurIntermediaireProposition, voter, zoneVoter, zoneDetermination, zoneEnfants; |
@UiField |
Button boutonValidationTaxon; |
@UiField |
FocusPanel conteneurLienSuppression; |
@UiField |
HTML supprimer, nbVotesHtml; |
@UiField |
FocusPanel conteneurPanneauVotes; |
public ForumInterventionVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public HasClickHandlers getLienSuppression() { |
return conteneurLienSuppression; |
} |
@Override |
public void afficherLienSuppression() { |
conteneurLienSuppression.removeStyleName("invisible"); |
} |
@Override |
public void cacherLienSuppression() { |
conteneurLienSuppression.addStyleName("invisible"); |
} |
@Override |
public void ajouterInterventionDetermination(PropositionDetermination determination, IsWidget barreRepartition, IsWidget arbreCommentaires) { |
nom.setText(determination.getAuteur()); |
nomTaxon.setText(determination.getEspece()); |
voter.add(barreRepartition); |
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(determination.getDate())); |
commentaire.setText(determination.getCommentaire()); |
if (determination.estFils()) { |
proposition.setStyleName("enfant"); |
} |
if(determination.estPropositionInitiale()) { |
labelDeterminationProposee.setText(I18n.getVocabulary().determinationOriginalePar()); |
labelDeterminationProposee.addStyleName("indicationPropositionInitiale"); |
} else { |
labelDeterminationProposee.setText(I18n.getVocabulary().determinationProposeePar()); |
} |
if(determination.estPropositionRetenue()) { |
proposition.setTitle(I18n.getVocabulary().indicationPropositionValidee()); |
proposition.setStyleName("propositionRetenue"); |
} |
boutonValidationTaxon.setTitle(I18n.getVocabulary().indicationValiderProposition()); |
conteneurIntermediaireProposition.addStyleName("propositionValidable"); |
} |
@Override |
public void ajouterInterventionCommentaire(Commentaire nouveauCommentaire, IsWidget arbreCommentaires) { |
zoneVoter.setVisible(false); |
zoneDetermination.setVisible(false); |
nom.setText(nouveauCommentaire.getAuteur()); |
date.setText(DateTimeFormat.getFormat("dd/MM/yyyy").format(nouveauCommentaire.getDate())); |
commentaire.setText(nouveauCommentaire.getCommentaire()); |
if (nouveauCommentaire.estFils()) { |
proposition.setStyleName("enfant"); |
} |
boutonValidationTaxon.setVisible(false); |
} |
@Override |
public HasClickHandlers getRepondre() { |
return repondre; |
} |
@Override |
public HasWidgets getEnfants() { |
return zoneEnfants; |
} |
@Override |
public HasMouseOverHandlers getConteneurInterventionMouseOver() { |
return proposition; |
} |
@Override |
public HasMouseOutHandlers getConteneurInterventionMouseOut() { |
return proposition; |
} |
public HasClickHandlers getEspece() { |
return nomTaxon; |
} |
public void ajouterLienEspece() { |
nomTaxon.addStyleName("labelLien"); |
} |
public HasClickHandlers getAuteur() { |
return nom; |
} |
public void ajouterLienAuteur() { |
nom.addStyleName("lien"); |
nom.setTitle("Voir le profil"); |
} |
public void cacherDeterminationProposee() { |
labelDeterminationProposee.setVisible(false); |
} |
@Override |
public void ajouterLienVotes() { |
conteneurPanneauVotes.addStyleName("nombreVotes"); |
} |
public void masquerLienVotes() { |
conteneurPanneauVotes.removeStyleName("nombreVotes"); |
nbVotesHtml.setVisible(false); |
} |
@Override |
public void setNbVotes(int votes) { |
nbVotesHtml.setText(String.valueOf(votes)); |
} |
@Override |
public HasClickHandlers getZoneNbVotes() { |
return this.conteneurPanneauVotes; |
} |
@Override |
public HasClickHandlers getBoutonValidationTaxon() { |
return this.boutonValidationTaxon; |
} |
@Override |
public void cacherBoutonValidationTaxon() { |
boutonValidationTaxon.setVisible(false); |
} |
@Override |
public void afficherBoutonValidationTaxon() { |
boutonValidationTaxon.setVisible(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/forum/ForumVue.java |
---|
New file |
0,0 → 1,36 |
package org.tela_botanica.del.client.composants.forum; |
import org.tela_botanica.del.client.composants.forum.ForumPresenteur.Vue; |
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.Composite; |
import com.google.gwt.user.client.ui.HTMLPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class ForumVue extends Composite implements Vue { |
private static ForumUIiBinder uiBinder = GWT.create(ForumUIiBinder.class); |
interface ForumUIiBinder extends UiBinder<Widget, ForumVue> { |
}; |
@UiField |
HTMLPanel panneauInterventions; |
public ForumVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public HTMLPanel getPanneauInterventions() { |
return panneauInterventions; |
} |
@Override |
public void vider() { |
panneauInterventions.clear(); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.ui.xml |
---|
New file |
0,0 → 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: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="pagination.css" /> |
<g:HorizontalPanel styleName="{style.pagination}"> |
<g:Label styleName="{style.nombreResultats} petit" ui:field="nbTotalResultats" /> |
<g:Label styleName="{style.labelResultats} petit" text="{constants.resultats}" /> |
<g:Label styleName="{style.labelPage} petit" text="{constants.page}" /> |
<g:Button ui:field="boutonPremierePage" styleName="{style.boutonPremierePage}" text=" " /> |
<g:Button ui:field="boutonPrecedent" styleName="{style.boutonPrecedent}" text=" " /> |
<g:TextBox styleName="{style.pageCourante} petit" ui:field="saisiePageCourante"/> |
<g:Label styleName="{style.nombreTotal} petit" ui:field="nbTotalPages" /> |
<g:Button ui:field="boutonSuivant" styleName="{style.boutonSuivant}" text=" "/> |
<g:Button ui:field="boutonDernierePage" styleName="{style.boutonDernierePage}" text=" " /> |
<g:Label styleName="{style.labelSelecteurPasAfficher} petit" text="{constants.afficher}" /> |
<g:TextBox ui:field="selecteurPas" styleName="{style.selecteurElements} petit" text="10"/> |
<g:Label styleName="{style.labelSelecteurPas} petit" text="{constants.elements_par_page}" /> |
</g:HorizontalPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/pagination/PaginationPresenteur.java |
---|
New file |
0,0 → 1,308 |
package org.tela_botanica.del.client.composants.pagination; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPage; |
import org.tela_botanica.del.client.navigation.evenement.pagination.EvenementChangementPas; |
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPage; |
import org.tela_botanica.del.client.navigation.evenement.pagination.GestionnaireEvenementChangementPas; |
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.ui.HasWidgets; |
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 |
* 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 { |
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonSuivant(); |
public HasClickHandlers getBoutonPrecedent(); |
public HasClickHandlers getBoutonPremierePage(); |
public HasClickHandlers getBoutonDernierePage(); |
public void masquerBoutonPrecedent(); |
public void afficherBoutonPrecedent(); |
public void masquerBoutonSuivant(); |
public void afficherBoutonSuivant(); |
public boolean boutonPrecedentEstAffiche(); |
public boolean boutonSuivantEstAffiche(); |
public HasChangeHandlers getSelecteurPas(); |
public int getPasSelectionne(); |
public void afficherPas(int pas); |
public void mettreNbTotalPages(int nbPages); |
public void mettreNbTotalResultats(int nbResultats); |
public HasChangeHandlers getSaisiePageCourante(); |
public int getPageSaisie(); |
public void setPageCourante(int pageCourante); |
} |
private Vue vue; |
private int nbPage = 1; |
//private int nbPage = 1; |
private int pageCourante = 1; |
private int nbElementsTotal = 0; |
private int pas = 10; |
private String groupePagination = null; |
/** |
* 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(Vue vue, int nbElementsTotal, int pas, int pageCourante) { |
this.nbElementsTotal = nbElementsTotal; |
this.vue = vue; |
this.pas = pas; |
this.pageCourante = pageCourante; |
vue.setPageCourante(pageCourante); |
this.nbPage = calculerNbPage(); |
} |
/** |
* Methode go du modèle MVP |
* |
* @param container |
* : la vue ou éxécuter l'affichage |
*/ |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
gererEvenements(); |
actualiserPas(); |
actualiserAffichageBoutons(); |
vue.mettreNbTotalPages(nbPage); |
vue.mettreNbTotalResultats(nbElementsTotal); |
} |
/** |
* Gérer les évènements sur les boutons statiques (précédent, suivant et |
* selecteur pas) |
* */ |
protected void gererEvenements() { |
vue.getSaisiePageCourante().addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
int pageSaisie; |
try { |
pageSaisie = vue.getPageSaisie(); |
if (pageSaisie < 0) { |
pageSaisie = 1; |
} else if (pageSaisie > nbPage){ |
pageSaisie = nbPage; |
} |
} catch (NumberFormatException e) { |
pageSaisie = pageCourante; |
} |
pageCourante = pageSaisie; |
chargerElements(pas * (pageCourante - 1), pas * (pageCourante)); |
vue.setPageCourante(pageCourante); |
actualiserAffichageBoutons(); |
} |
}); |
vue.getSelecteurPas().addChangeHandler(new ChangeHandler() { |
@Override |
public void onChange(ChangeEvent event) { |
int pasSelectionne; |
try { |
pasSelectionne = vue.getPasSelectionne(); |
if (pasSelectionne < 0) { |
pasSelectionne = 1; |
} else if (pasSelectionne > 100){ |
pasSelectionne = 100; |
} |
} catch (NumberFormatException e) { |
pasSelectionne = pas; |
} |
changerPas(pasSelectionne); |
} |
}); |
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
allerALaPagePrecedente(); |
} |
}); |
vue.getBoutonSuivant().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
allerALapageSuivante(); |
} |
}); |
vue.getBoutonPremierePage().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
allerALaPremierePage(); |
} |
}); |
vue.getBoutonDernierePage().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
allerAlaDernierePage(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementPage.TYPE, new GestionnaireEvenementChangementPage() { |
@Override |
public void onChangementPage(EvenementChangementPage event) { |
if (event.getGroupePagination() == groupePagination) { |
pageCourante = event.getPageAAfficher(); |
vue.setPageCourante(pageCourante); |
actualiserAffichageBoutons(); |
vue.mettreNbTotalPages(nbPage); |
vue.mettreNbTotalResultats(nbElementsTotal); |
} |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementPas.TYPE, new GestionnaireEvenementChangementPas() { |
@Override |
public void onChangementPas(EvenementChangementPas event) { |
if (event.getGroupePagination() == groupePagination) { |
// modifie le pas et les liens en fonction |
pas = event.getPas(); |
actualiserPas(); |
} |
} |
}); |
} |
private void gererDecalagePageCourante(int ancienPas, int nouveauPas) { |
if (ancienPas != nouveauPas) { |
double rapportPas = (double) ancienPas / (double) nouveauPas; |
pageCourante = (int) (Math.ceil((double) pageCourante * (double) rapportPas)); |
} |
} |
public void actualiserPas() { |
actualiserPasCache(pas); |
vue.afficherPas(pas); |
} |
public int getPageCourante() { |
return this.pageCourante; |
} |
public int getPas() { |
return this.pas; |
} |
public void setPageCourante(int pageCourante) { |
this.pageCourante = pageCourante; |
} |
public void changerPas(int nouveauPas) { |
// TODO corriger bug qui ne charge pas la bonne page ds certains cas |
// gererDecalagePageCourante(pas, nouveauPas); |
// pas = nouveauPas; |
// chargerElements((pageCourante - 1)*pas, pageCourante*pas); |
pas = nouveauPas; |
this.nbPage = calculerNbPage(); |
chargerElements(0, pas); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPas(nouveauPas, groupePagination)); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(1, groupePagination)); |
} |
public void allerALaPagePrecedente() { |
if (pageCourante > 1) { |
int pageAAfficher = pageCourante - 1; |
pageCourante = pageAAfficher; |
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher)); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination)); |
} |
} |
public void allerALapageSuivante() { |
if (pageCourante < nbPage) { |
int pageAAfficher = pageCourante + 1; |
pageCourante = pageAAfficher; |
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher)); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination)); |
} |
} |
public void allerALaPremierePage() { |
int pageAAfficher = 1; |
pageCourante = pageAAfficher; |
chargerElements(0, pas); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination)); |
} |
public void allerAlaDernierePage() { |
int pageAAfficher = nbPage; |
pageCourante = pageAAfficher; |
chargerElements(pas * (pageAAfficher - 1), pas * (pageAAfficher)); |
BusEvenementiel.getInstance().fireEvent(new EvenementChangementPage(pageAAfficher, groupePagination)); |
} |
/** calcule le nombre de page en fonction du pas */ |
private int calculerNbPage() { |
Double nombrePages = Math.ceil((double) nbElementsTotal / (double) pas); |
return nombrePages.intValue(); |
} |
public void setNbPages(int nbPages) { |
this.nbPage = nbPages; |
} |
public int getNbPages() { |
return nbPage; |
} |
public Vue getVue() { |
return vue; |
} |
public abstract void chargerElements(int debut, int fin); |
public abstract void actualiserPasCache(int pas); |
public void setPas(int pas) { |
this.pas = pas; |
} |
public void setGroupePagination(String groupePagination) { |
this.groupePagination = groupePagination; |
} |
public String getGroupePagination() { |
return groupePagination; |
} |
public void actualiserAffichageBoutons() { |
if (nbPage == 1) { |
vue.masquerBoutonPrecedent(); |
vue.masquerBoutonSuivant(); |
} else if (pageCourante == 1) { |
vue.masquerBoutonPrecedent(); |
vue.afficherBoutonSuivant(); |
} else { |
vue.afficherBoutonPrecedent(); |
if (pageCourante == nbPage) { |
vue.masquerBoutonSuivant(); |
} |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/pagination/PaginationVue.java |
---|
New file |
0,0 → 1,137 |
package org.tela_botanica.del.client.composants.pagination; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
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.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.Label; |
import com.google.gwt.user.client.ui.ListBox; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
public class PaginationVue extends Composite implements PaginationPresenteur.Vue { |
@UiField |
TextBox saisiePageCourante; |
@UiField |
TextBox selecteurPas; |
@UiField |
Button boutonPrecedent, boutonSuivant, boutonPremierePage, boutonDernierePage; |
@UiField |
Label nbTotalPages, nbTotalResultats; |
interface MyUiBinder extends UiBinder<Widget, PaginationVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public PaginationVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
public void afficherPas(int pas) { |
selecteurPas.setText(String.valueOf(pas)); |
} |
public void mettreNbTotalPages(int nbPages) { |
nbTotalPages.setText((I18n.getMessages().parmi_nb_pages(nbPages))); |
} |
public void mettreNbTotalResultats(int nbResultats) { |
nbTotalResultats.setText("" + nbResultats); |
} |
public void masquerBoutonPrecedent() { |
boutonPremierePage.setVisible(false); |
boutonPrecedent.setVisible(false); |
} |
public void afficherBoutonPrecedent() { |
boutonPremierePage.setVisible(true); |
boutonPrecedent.setVisible(true); |
} |
public void masquerBoutonSuivant() { |
boutonDernierePage.setVisible(false); |
boutonSuivant.setVisible(false); |
} |
public void afficherBoutonSuivant() { |
boutonDernierePage.setVisible(true); |
boutonSuivant.setVisible(true); |
} |
public TextBox getSelecteurPas() { |
return selecteurPas; |
} |
@Override |
public HasChangeHandlers getSaisiePageCourante() { |
return saisiePageCourante; |
} |
@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 int getPasSelectionne() throws NumberFormatException { |
return Integer.parseInt(selecteurPas.getText()); |
} |
@Override |
public boolean boutonPrecedentEstAffiche() { |
return boutonPrecedent.isVisible() && boutonPremierePage.isVisible(); |
} |
@Override |
public boolean boutonSuivantEstAffiche() { |
return boutonSuivant.isVisible() && boutonDernierePage.isVisible(); |
} |
public Label getNbTotalPages() { |
return nbTotalPages; |
} |
public Label getNbTotalResultats() { |
return nbTotalResultats; |
} |
@Override |
public int getPageSaisie() throws NumberFormatException { |
return Integer.parseInt(saisiePageCourante.getText()); |
} |
@Override |
public void setPageCourante(int pageCourante) { |
saisiePageCourante.setText(String.valueOf(pageCourante)); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/pagination/pagination.css |
---|
New file |
0,0 → 1,30 |
.pagination {width:100%;} |
.selecteurElements {float:right; width:2em} |
.pageCourante {width:2.6em} |
.pagination button {border:none; border-right:solid 1px #DDD; cursor:pointer; width:30px} |
.zoneLiens {} |
.zoneLiens button:hover {background:#8EB533} |
select {background:white} |
.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} |
.labelResultats { |
margin-left:5px; |
margin-right:5px; |
} |
.nombreResultats { |
font-weight: bold; |
margin-left:5px; |
} |
.labelPage { |
padding-left:5px; |
margin-right:5px; |
border-left: solid 1px grey; |
} |
.nombreTotal {margin-left:5px;} |
.labelSelecteurPas{margin-left:5px;margin-right:5px; margin-top: 3px;} |
.labelSelecteurPasAfficher{margin-left:10px;;margin-right:5px; margin-top: 3px;} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilanteVue.java |
---|
New file |
0,0 → 1,232 |
package org.tela_botanica.del.client.composants.fenetreoverlay; |
import org.tela_botanica.del.client.composants.fenetreoverlay.FenetreOverlayDefilantePresenteur.Vue; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.dom.client.Element; |
import com.google.gwt.event.dom.client.ClickEvent; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasKeyDownHandlers; |
import com.google.gwt.event.logical.shared.ResizeEvent; |
import com.google.gwt.event.logical.shared.ResizeHandler; |
import com.google.gwt.uibinder.client.UiBinder; |
import com.google.gwt.uibinder.client.UiField; |
import com.google.gwt.user.client.DOM; |
import com.google.gwt.user.client.Event; |
import com.google.gwt.user.client.Timer; |
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.FocusPanel; |
import com.google.gwt.user.client.ui.HasVisibility; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.HorizontalPanel; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.UIObject; |
import com.google.gwt.user.client.ui.VerticalPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class FenetreOverlayDefilanteVue extends Composite implements Vue { |
interface MyUiBinder extends UiBinder<Widget, FenetreOverlayDefilanteVue> {} |
@UiField |
VerticalPanel conteneurGlobal; |
@UiField |
FocusPanel overlay; |
@UiField |
FocusPanel overlayContenu; |
@UiField |
Button boutonFermer, boutonSuivant, boutonPrecedent; |
@UiField |
HorizontalPanel conteneurOverlayContenu; |
private int hauteurContenu = 0; |
private int largeurContenu = 0; |
// contiennent les coordonnées actuelles du scroll |
// pour le rétablir une fois la fenêtre fermée |
private int topFenetre = 0; |
private int gaucheFenetre = 0; |
private Timer timerPlacement = null; |
public FocusPanel getOverlay() { |
return overlay; |
} |
public FocusPanel getOverlayContenu() { |
return overlayContenu; |
} |
@Override |
public HasClickHandlers getOverlayHasClickHandlers() { |
return overlayContenu; |
} |
public Button getBoutonFermer() { |
return boutonFermer; |
} |
public Button getBoutonSuivant() { |
return boutonSuivant; |
} |
public Button getBoutonPrecedent() { |
return boutonPrecedent; |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
public FenetreOverlayDefilanteVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
boutonFermer.setStyleName("fermerOverlay"); |
boutonPrecedent.setStyleName("precedentOverlay"); |
boutonSuivant.setStyleName("suivantOverlay"); |
Window.addResizeHandler(new ResizeHandler() { |
@Override |
public void onResize(ResizeEvent event) { |
gererDimensionsEtPositionnerBoutons(); |
} |
}); |
} |
@Override |
public HasKeyDownHandlers getConteneurGlobal() { |
return overlayContenu; |
} |
@Override |
public HasVisibility getOverlayVisibility() { |
return overlay; |
} |
@Override |
public HasVisibility getOverlayContenuVisibility() { |
return overlayContenu; |
} |
@Override |
public HasWidgets getOverlayContenuHasWidgets() { |
return overlayContenu; |
} |
@Override |
public void setStyleOverlay(String style) { |
overlay.setStyleName(style); |
} |
@Override |
public void setStyleOverlayContenu(String style) { |
overlayContenu.setStyleName(style); |
} |
@Override |
public void setOverlayContenu(IsWidget w) { |
overlayContenu.clear(); |
overlayContenu.add(w); |
} |
@Override |
public void viderOverlay() { |
overlay.clear(); |
} |
@Override |
public void viderOverlayContenu() { |
overlayContenu.clear(); |
} |
private void gererDimensionsEtPositionnerBoutons() { |
UIObject overlayContenuUi = overlayContenu.getWidget(); |
if (overlayContenuUi == null) { |
return; |
} |
int topBoutonFermer = 65; |
int topBoutonsSuivantsPrecedent = (topBoutonFermer + overlayContenuUi.getOffsetHeight())/2 + 20; |
int left = overlayContenuUi.getAbsoluteLeft() - 20; |
int right = overlayContenuUi.getAbsoluteLeft() + overlayContenuUi.getOffsetWidth() - 12; |
DOM.setStyleAttribute(boutonPrecedent.getElement(), "left",left+"px"); |
DOM.setStyleAttribute(boutonPrecedent.getElement(), "top", topBoutonsSuivantsPrecedent+"px"); |
DOM.setStyleAttribute(boutonSuivant.getElement(), "left",right+"px"); |
DOM.setStyleAttribute(boutonSuivant.getElement(), "top", topBoutonsSuivantsPrecedent+"px"); |
DOM.setStyleAttribute(boutonFermer.getElement(), "left",(right - 10)+"px"); |
DOM.setStyleAttribute(boutonFermer.getElement(), "top", topBoutonFermer+"px"); |
setDimensionsContenu(overlayContenuUi.getOffsetHeight(), overlayContenuUi.getOffsetWidth()); |
} |
private void setDimensionsContenu(int hauteur, int largeur) { |
largeurContenu = largeur; |
hauteurContenu = hauteur; |
} |
@Override |
public void surOuvertureFenetre() { |
// enregistrement des coordonnées des scrool |
topFenetre = Window.getScrollTop(); |
gaucheFenetre = Window.getScrollLeft(); |
// scroll désactivé pour ne pas fausser le positionnement des boutons |
Window.enableScrolling(false); |
// Pas trouvé mieux que le timer pour bien redimensionner |
// à voir s il existe une meilleure solution qui n'oblige pas |
// par avance à connaitre le type d'objet contenu dans l'overlayContenu |
// ou bien la taille de la fenetre |
timerPlacement = new Timer() { |
@Override |
public void run() { |
if(tailleDuContenuEstModifiee()) { |
// On repositionne les boutons |
gererDimensionsEtPositionnerBoutons(); |
} |
} |
}; |
timerPlacement.scheduleRepeating(30); |
} |
private boolean tailleDuContenuEstModifiee() { |
UIObject overlayContenuUi = overlayContenu.getWidget(); |
return overlayContenuUi != null |
&& (overlayContenuUi.getOffsetHeight() != hauteurContenu |
|| overlayContenuUi.getOffsetWidth() != largeurContenu); |
} |
@Override |
public void surFermetureFenetre() { |
Window.enableScrolling(true); |
// replacement de la fenêtre à la position de scroll d'origine |
Window.scrollTo(gaucheFenetre, topFenetre); |
timerPlacement.cancel(); |
} |
@Override |
public void surSetContenuFenetre() { |
// nécessaire pour le défilement avec les touches du clavier |
overlayContenu.setFocus(true); |
} |
@Override |
public void afficherBoutonsSuivantsPrecedents(boolean afficher) { |
boutonPrecedent.setVisible(afficher); |
boutonSuivant.setVisible(afficher); |
} |
@Override |
public boolean testerFermetureClicExterieur(ClickEvent event) { |
Element e = DOM.eventGetTarget(Event.as(event.getNativeEvent())); |
return event.getRelativeElement() != null && (e == overlayContenu.getElement()); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilanteVue.ui.xml |
---|
New file |
0,0 → 1,16 |
<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="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<g:VerticalPanel styleName="fenetreDefilante" ui:field="conteneurGlobal"> |
<g:FocusPanel ui:field="overlay" /> |
<g:HorizontalPanel ui:field="conteneurOverlayContenu" styleName=""> |
<g:Button ui:field="boutonPrecedent" text="" /> |
<g:FocusPanel ui:field="overlayContenu" /> |
<g:Button ui:field="boutonSuivant" text="" /> |
<g:Button ui:field="boutonFermer" /> |
</g:HorizontalPanel> |
</g:VerticalPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlaySimplePresenteur.java |
---|
New file |
0,0 → 1,27 |
package org.tela_botanica.del.client.composants.fenetreoverlay; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
/** |
* Simple implémentation de la fenetre overlay defilante avec masquage direct des boutons |
* suivant et précédent et simplification de la méthode |
* @author aurelien |
* |
*/ |
public class FenetreOverlaySimplePresenteur extends FenetreOverlayDefilantePresenteur { |
public FenetreOverlaySimplePresenteur(Vue vue) { |
super(0, vue); |
afficherBoutonsSuivantsPrecedents(false); |
} |
public void ouvrirFenetreModale(Presenteur presenteur) { |
super.ouvrirFenetreModaleDefilante(0, presenteur); |
} |
@Override |
public void surClicBoutonSuivant() {} |
@Override |
public void surClicBoutonPrecedent() {} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/fenetreoverlay/FenetreOverlayDefilantePresenteur.java |
---|
New file |
0,0 → 1,148 |
package org.tela_botanica.del.client.composants.fenetreoverlay; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import com.google.gwt.core.shared.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.event.dom.client.HasKeyDownHandlers; |
import com.google.gwt.event.dom.client.KeyCodes; |
import com.google.gwt.event.dom.client.KeyDownEvent; |
import com.google.gwt.event.dom.client.KeyDownHandler; |
import com.google.gwt.user.client.ui.HasVisibility; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.RootPanel; |
public abstract class FenetreOverlayDefilantePresenteur { |
public interface Vue extends IsWidget { |
public HasKeyDownHandlers getConteneurGlobal(); |
public IsWidget getOverlay(); |
public void afficherBoutonsSuivantsPrecedents(boolean afficher); |
public HasClickHandlers getOverlayHasClickHandlers(); |
public HasVisibility getOverlayVisibility(); |
public IsWidget getOverlayContenu(); |
public HasVisibility getOverlayContenuVisibility(); |
public HasWidgets getOverlayContenuHasWidgets(); |
public HasClickHandlers getBoutonFermer(); |
public HasClickHandlers getBoutonSuivant(); |
public HasClickHandlers getBoutonPrecedent(); |
public void setStyleOverlay(String style); |
public void setStyleOverlayContenu(String style); |
public void setOverlayContenu(IsWidget w); |
public void viderOverlay(); |
public void viderOverlayContenu(); |
public void surOuvertureFenetre(); |
public void surFermetureFenetre(); |
public void surSetContenuFenetre(); |
public boolean testerFermetureClicExterieur(ClickEvent event); |
} |
private Vue vue; |
private boolean fenetreModaleOuverte = false; |
private int indexElementAffiche = 0; |
// Constructeur |
public FenetreOverlayDefilantePresenteur(int indexElementAffiche, Vue vue) { |
this.indexElementAffiche = indexElementAffiche; |
this.vue = vue; |
gererEvenements(); |
} |
// Afficheur |
public void go() { |
go(null); |
} |
public void go(HasWidgets composite) { |
} |
// Gestion des évènements |
protected void gererEvenements() { |
vue.getBoutonFermer().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
fermerFenetreModale(); |
} |
}); |
vue.getBoutonPrecedent().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
surClicBoutonPrecedent(); |
} |
}); |
vue.getBoutonSuivant().addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
surClicBoutonSuivant(); |
} |
}); |
vue.getConteneurGlobal().addKeyDownHandler(new KeyDownHandler() { |
@Override |
public void onKeyDown(KeyDownEvent event) { |
if(event.getNativeKeyCode() == KeyCodes.KEY_LEFT) { |
surClicBoutonPrecedent(); |
} |
if(event.getNativeKeyCode() == KeyCodes.KEY_RIGHT) { |
surClicBoutonSuivant(); |
} |
} |
}); |
vue.getOverlayHasClickHandlers().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if(vue.testerFermetureClicExterieur(event)) { |
fermerFenetreModale(); |
} |
} |
}); |
} |
public void ouvrirFenetreModaleDefilante(int indexElementAffiche, Presenteur presenteurModal) { |
vue.setStyleOverlay("overlay"); |
vue.setStyleOverlayContenu("overlayContenu"); |
vue.getOverlayContenuVisibility().setVisible(true); |
vue.getOverlayVisibility().setVisible(true); |
RootPanel.get().add(vue.asWidget()); |
fenetreModaleOuverte = true; |
GWT.log("Index elemt à afficher :"+indexElementAffiche); |
setContenuFenetreModale(indexElementAffiche, presenteurModal); |
vue.surOuvertureFenetre(); |
} |
public void setContenuFenetreModale(int indexElementAffiche, Presenteur presenteurModal) { |
this.indexElementAffiche = indexElementAffiche; |
vue.viderOverlayContenu(); |
presenteurModal.go(vue.getOverlayContenuHasWidgets()); |
vue.surSetContenuFenetre(); |
} |
public abstract void surClicBoutonSuivant(); |
public abstract void surClicBoutonPrecedent(); |
public boolean fenetreModaleEstOuverte() { |
return fenetreModaleOuverte; |
} |
public void fermerFenetreModale() { |
vue.viderOverlay(); |
vue.viderOverlayContenu(); |
RootPanel.get().remove(vue.asWidget()); |
fenetreModaleOuverte = false; |
vue.surFermetureFenetre(); |
} |
public int getIndexElementAffiche() { |
return indexElementAffiche; |
} |
public void afficherBoutonsSuivantsPrecedents(boolean afficher) { |
vue.afficherBoutonsSuivantsPrecedents(afficher); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampDouble.java |
---|
New file |
0,0 → 1,28 |
package org.tela_botanica.del.client.composants.validation; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextBox; |
public class ValidateurChampDouble extends ValidateurChampTexteAbstrait { |
public ValidateurChampDouble(HasText textBox) { |
super(textBox); |
} |
@Override |
public boolean valider() { |
try { |
Double.parseDouble(getTextBox().getText()); |
supprimerStyleErreur(getStyleErreur()); |
return true; |
} catch (Exception e) { |
afficherStyleErreur(getStyleErreur()); |
return false; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampNCaracteres.java |
---|
New file |
0,0 → 1,32 |
package org.tela_botanica.del.client.composants.validation; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.TextBox; |
public class ValidateurChampNCaracteres extends ValidateurChampTexteAbstrait { |
private int nbCaracteres = 0; |
public ValidateurChampNCaracteres(TextBox textBox) { |
super(textBox); |
// TODO Auto-generated constructor stub |
} |
public void setNbCaracteres(int nbCaracteresMax) { |
nbCaracteres = nbCaracteresMax; |
} |
@Override |
public boolean valider() { |
if(getTextBox().getText().length()>=nbCaracteres){ |
supprimerStyleErreur(getStyleErreur()); |
return true; |
} else { |
afficherStyleErreur(getStyleErreur()); |
return false; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampNumerique.java |
---|
New file |
0,0 → 1,29 |
package org.tela_botanica.del.client.composants.validation; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextBox; |
public class ValidateurChampNumerique extends ValidateurChampTexteAbstrait { |
public ValidateurChampNumerique(HasText textBox) { |
super(textBox); |
} |
@Override |
public boolean valider() { |
try{ |
Integer.parseInt(getTextBox().getText()); |
supprimerStyleErreur(getStyleErreur()); |
return true; |
} catch (Exception e) { |
supprimerStyleErreur(getStyleErreur()); |
return false; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampFlottant.java |
---|
New file |
0,0 → 1,26 |
package org.tela_botanica.del.client.composants.validation; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.TextBox; |
public class ValidateurChampFlottant extends ValidateurChampTexteAbstrait { |
public ValidateurChampFlottant(TextBox textBox) { |
super(textBox); |
} |
@Override |
public boolean valider() { |
try { |
Float.parseFloat(getTextBox().getText()); |
supprimerStyleErreur(getStyleErreur()); |
return true; |
} catch (Exception e) { |
afficherStyleErreur(getStyleErreur()); |
return false; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampTexteAbstrait.java |
---|
New file |
0,0 → 1,40 |
package org.tela_botanica.del.client.composants.validation; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextBox; |
public abstract class ValidateurChampTexteAbstrait extends ValidateurFormulaireAbstrait { |
private HasText textBox; |
protected String styleErreur = "erreurFormTexte"; |
public ValidateurChampTexteAbstrait(HasText textBox) { |
this.textBox = textBox; |
} |
public ValidateurChampTexteAbstrait(TextBox textBox, String styleErreur) { |
this.textBox = textBox; |
this.styleErreur = styleErreur; |
} |
public HasText getTextBox() { |
return textBox; |
} |
public void setTextBox(TextBox textBox) { |
this.textBox = textBox; |
} |
public String getStyleErreur() { |
return styleErreur; |
} |
public void setStyleErreur(String styleErreur) { |
this.styleErreur = styleErreur; |
} |
public void afficherStyleErreur(String styleErreur) {}; |
public void supprimerStyleErreur(String styleErreur) {}; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurChampTexteNonNul.java |
---|
New file |
0,0 → 1,26 |
package org.tela_botanica.del.client.composants.validation; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.user.client.ui.HTML; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.TextBox; |
public class ValidateurChampTexteNonNul extends ValidateurChampTexteAbstrait { |
public ValidateurChampTexteNonNul(HasText textBox) { |
super(textBox); |
} |
@Override |
public boolean valider() { |
if (getTextBox().getText().length() >= 0 && !getTextBox().getText().equals("")) { |
supprimerStyleErreur(getStyleErreur()); |
return true; |
} else { |
afficherStyleErreur(getStyleErreur()); |
return false; |
} |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/validation/ValidateurFormulaireAbstrait.java |
---|
New file |
0,0 → 1,9 |
package org.tela_botanica.del.client.composants.validation; |
public abstract class ValidateurFormulaireAbstrait { |
public abstract boolean valider(); |
public abstract void afficherStyleErreur(String styleErreur); |
public abstract void supprimerStyleErreur(String styleErreur); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/presenteur/PresenteurVue.ui.xml |
---|
New file |
0,0 → 1,13 |
<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="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<g:VerticalPanel> |
<g:Button ui:field="boutonFermer" text="{constants.fermer}" /> |
<g:HTMLPanel ui:field="overlay" /> |
<g:HTMLPanel ui:field="overlayContenu" /> |
</g:VerticalPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/presenteur/Presenteur.java |
---|
New file |
0,0 → 1,73 |
package org.tela_botanica.del.client.composants.presenteur; |
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.Panel; |
import com.google.gwt.user.client.ui.RootPanel; |
public abstract class Presenteur { |
private Panel overlay; |
private Panel overlayContenu; |
private PresenteurVue presenteurVue; |
private boolean fenetreModaleOuverte = false; |
// Constructeur |
public Presenteur() { |
} |
// Afficheur |
public void go() { |
go(null); |
} |
public abstract void go(HasWidgets composite); |
// Gestion des évènements |
protected abstract void gererEvenements(); |
public void ouvrirFenetreModale(Presenteur presenteurModal) { |
presenteurVue = new PresenteurVue(); |
overlay = presenteurVue.overlay; |
overlay.setStyleName("overlay"); |
overlay.setVisible(false); |
RootPanel.get().add(overlay); |
overlayContenu = presenteurVue.overlayContenu; |
overlayContenu.setStyleName("overlayContenu"); |
Button boutonFermer = presenteurVue.boutonFermer; |
boutonFermer.setStyleName("fermerOverlay"); |
boutonFermer.addClickHandler(new ClickHandler() { |
public void onClick(ClickEvent event) { |
fermerFenetreModale(); |
} |
}); |
presenteurModal.go(overlayContenu); |
RootPanel.get().add(overlayContenu); |
overlayContenu.setVisible(true); |
overlayContenu.add(boutonFermer); |
overlay.setVisible(true); |
fenetreModaleOuverte = true; |
} |
public boolean fenetreModaleEstOuverte() { |
return fenetreModaleOuverte; |
} |
public void fermerFenetreModale() { |
overlay.clear(); |
overlayContenu.clear(); |
RootPanel.get().remove(overlay); |
RootPanel.get().remove(overlayContenu); |
fenetreModaleOuverte = false; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/presenteur/PresenteurVue.java |
---|
New file |
0,0 → 1,29 |
package org.tela_botanica.del.client.composants.presenteur; |
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.HTMLPanel; |
import com.google.gwt.user.client.ui.Widget; |
public class PresenteurVue extends Composite { |
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("ObservationRechercheVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, PresenteurVue> { |
} |
@UiField |
HTMLPanel overlay, overlayContenu; |
@UiField |
Button boutonFermer; |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
protected PresenteurVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/LigneVotePresenteur.java |
---|
New file |
0,0 → 1,59 |
package org.tela_botanica.del.client.composants.votes.details; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import com.google.gwt.i18n.client.DateTimeFormat; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class LigneVotePresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public void setAuteur(String auteur); |
public void setColonneDateEtNb(String date); |
} |
private Vue vue; |
private VoteDetermination vote; |
public LigneVotePresenteur(Vue vue, VoteDetermination vote) { |
this.vue = vue; |
this.vote = vote; |
afficherProposition(); |
} |
//Pour les votes anonymes |
public LigneVotePresenteur(Vue vue, int nbVotes) { |
this.vue = vue; |
vue.setAuteur(I18n.getMessages().etVotesAnonymes(String.valueOf(nbVotes))); |
} |
public void afficherProposition() { |
String nomAuteur = vote.getAuteur().getNomComplet(); |
if (nomAuteur == null || nomAuteur.equals("")) { |
nomAuteur = I18n.getVocabulary().utilisateurAnonyme(); |
} |
vue.setAuteur(nomAuteur); |
vue.setColonneDateEtNb(DateTimeFormat.getFormat("dd/MM/yyyy").format(vote.getDate())); |
} |
/** |
* Declenchement du présenteur |
*/ |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
gererEvenements(); |
} |
protected void gererEvenements() { |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/LigneVoteVue.java |
---|
New file |
0,0 → 1,32 |
package org.tela_botanica.del.client.composants.votes.details; |
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.Composite; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Widget; |
public class LigneVoteVue extends Composite implements LigneVotePresenteur.Vue { |
interface LigneVoteVueUiBinder extends UiBinder<Widget, LigneVoteVue> {}; |
private static LigneVoteVueUiBinder uiBinder = GWT.create(LigneVoteVueUiBinder.class); |
//Composants |
@UiField |
Label auteur, dateOuNb; |
public LigneVoteVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
@Override |
public void setAuteur(String auteur) { |
this.auteur.setText(auteur); |
} |
@Override |
public void setColonneDateEtNb(String date) { |
this.dateOuNb.setText(date); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/detailListeVotesDeterminationVue.css |
---|
New file |
0,0 → 1,93 |
.conteneurTableauVotes { |
z-index: 1500; |
padding: 30px; |
padding-right: 21px; |
padding-top: 20px; |
background: white; |
width: 600px; |
margin: 0 auto; |
margin-top: 75px; |
padding-bottom:25px; |
} |
.chargement { |
padding-left: 165px; |
} |
.auteur { |
color: #6C6865; |
font-family: arial; |
font-size: 13px; |
letter-spacing: 0; |
line-height: 18px; |
text-transform: none; |
} |
.date { |
color: #6C6865; |
font-family: arial; |
font-size: 13px; |
letter-spacing: 0; |
line-height: 18px; |
text-transform: none; |
margin-left:3px |
} |
.dateLabel { |
color: #6C6865; |
font-family: arial; |
font-size: 13px; |
letter-spacing: 0; |
line-height: 18px; |
text-transform: none; |
margin-left:3px; |
text-transform:lowercase |
} |
.detailVotePour { |
width:250px; |
float:left; |
margin-bottom:15px |
} |
.detailVoteContre { |
width:250px; |
float:left; |
} |
.titreVotes div { |
font-size:16px; |
color:#8EB533; |
margin-bottom:5px; |
margin-right:15px; |
float:left; |
font-weight:bold; |
} |
.titreVotesContre div { |
color:#f06a6a; |
} |
.detailVotes { |
clear:left; |
} |
.detailVotes div { |
float:left; |
font-size:12px; |
margin-bottom:1px; |
} |
.espece { |
font-size: 15px; |
font-weight: bold; |
margin-right:3px; |
margin-bottom:10px; |
} |
.lignePonderation { |
margin-top:4px; |
margin-left:20px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationVue.ui.xml |
---|
New file |
0,0 → 1,46 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder |
xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="detailListeVotesDeterminationVue.css" /> |
<g:HTMLPanel styleName="{style.conteneurTableauVotes}"> |
<g:HorizontalPanel> <g:HTMLPanel ui:field='titre' styleName="{style.espece}" /> |
<g:HTMLPanel ui:field='auteur' styleName="{style.auteur}" /> |
<g:Label text="{constants.dateReleve}" styleName="{style.dateLabel}"></g:Label> |
<g:Label ui:field='date' styleName="{style.date}"></g:Label> |
</g:HorizontalPanel> |
<g:HTML><hr /></g:HTML> |
<g:HTMLPanel styleName="{style.detailVotePour}"> |
<g:HTMLPanel styleName="{style.titreVotes}"> |
<g:Label>Votes Pour</g:Label> |
<g:Label ui:field="scorePour">%</g:Label> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="detailVotePour" styleName="{style.detailVotes}"> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.detailVoteContre}"> |
<g:HorizontalPanel styleName="{style.titreVotes} {style.titreVotesContre}"> |
<g:Label>Votes Contre</g:Label> |
<g:Label ui:field="scoreContre">%</g:Label> |
</g:HorizontalPanel> |
<g:HTMLPanel ui:field="detailVoteContre" styleName="{style.detailVotes}"> |
</g:HTMLPanel> |
</g:HTMLPanel> |
<g:HTML><hr class="nettoyage"/></g:HTML> |
<g:HTMLPanel ui:field="panneauChargement" styleName="{style.chargement}"> |
<g:Image url="./img/wait.gif"></g:Image> |
</g:HTMLPanel> |
<g:HTMLPanel ui:field="aucuneDonnees" visible="false"><g:Label text="{constants.aucunVoteEffectue}"></g:Label></g:HTMLPanel> |
<g:HTML> |
<br class="nettoyage" /> |
</g:HTML> |
<g:HTML styleName="petit aide">Ces votes permettent de confirmer ou non une détermination proposée par un membre du réseau. <br /> |
Vous pouvez changer à tout moment votre vote à l'aide de <img src="./img/pouce_bas.png" /> ou <img src="./img/pouce_haut.png" />. <br /> |
</g:HTML> |
<g:HTML styleName="{style.lignePonderation} petit">Une pondération s'opère pour le calcul des votes : vote en tant que membre identifié (3 points) / non identifié (1 point).</g:HTML> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/ligneVote.css |
---|
New file |
0,0 → 1,9 |
.auteur { |
padding-right:10px; |
width:150px; |
} |
.colonne2:before { |
content:(' - '); |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationPresenteur.java |
---|
New file |
0,0 → 1,70 |
package org.tela_botanica.del.client.composants.votes.details; |
import java.util.HashMap; |
import org.tela_botanica.del.client.composants.presenteur.Presenteur; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import org.tela_botanica.del.client.services.rest.VoteDeterminationServiceConcret; |
import org.tela_botanica.del.client.services.rest.async.ListeVotesDeterminationCallback; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class DetailListeVotesDeterminationPresenteur extends Presenteur { |
public interface Vue extends IsWidget { |
public void afficherVotes(PropositionDetermination propositionDetermination); |
void stopChargement(); |
void startChargement(); |
public void afficherAucuneDonnees(); |
} |
private Vue vue; |
public DetailListeVotesDeterminationPresenteur(Vue vue) { |
this.vue = vue; |
} |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
} |
public void afficherVotes(final PropositionDetermination propositionDetermination) { |
vue.startChargement(); |
VoteDeterminationServiceConcret voteService = new VoteDeterminationServiceConcret(); |
voteService.consulterVotesPourPropositionDetermination(propositionDetermination, new ListeVotesDeterminationCallback() { |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
vue.stopChargement(); |
} |
@Override |
public void surRetour(HashMap<String, VoteDetermination> votesComplets) { |
if (votesComplets != null && votesComplets.size() > 0) { |
for (VoteDetermination voteDetermination : votesComplets.values()) { |
voteDetermination.setPropositionDetermination(propositionDetermination); |
} |
propositionDetermination.setVotesDeterminations(votesComplets); |
vue.afficherVotes(propositionDetermination); |
vue.stopChargement(); |
} else { |
vue.afficherAucuneDonnees(); |
vue.stopChargement(); |
} |
} |
}); |
} |
@Override |
protected void gererEvenements() { |
// TODO Auto-generated method stub |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/DetailListeVotesDeterminationVue.java |
---|
New file |
0,0 → 1,144 |
package org.tela_botanica.del.client.composants.votes.details; |
import java.util.Date; |
import java.util.Iterator; |
import java.util.List; |
import java.util.Map; |
import org.tela_botanica.del.client.i18n.I18n; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import org.tela_botanica.del.client.utils.StringUtils; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.i18n.client.DateTimeFormat; |
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.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.Widget; |
public class DetailListeVotesDeterminationVue extends Composite implements DetailListeVotesDeterminationPresenteur.Vue { |
private static DetailListeVotesDeterminationVueUIiBinder uiBinder = GWT.create(DetailListeVotesDeterminationVueUIiBinder.class); |
interface DetailListeVotesDeterminationVueUIiBinder extends UiBinder<Widget, DetailListeVotesDeterminationVue> { |
}; |
@UiField |
HTMLPanel titre, auteur, aucuneDonnees, detailVotePour, detailVoteContre; |
@UiField |
Label scorePour, scoreContre, date; |
@UiField |
Panel panneauChargement; |
public DetailListeVotesDeterminationVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
} |
public String formaterDate(String dateNonFormatee) { |
try { |
DateTimeFormat parseur = DateTimeFormat.getFormat("yyyy-dd-MM HH:mm:ss"); |
Date date = parseur.parse(dateNonFormatee); |
DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy"); |
return formateur.format(date); |
} catch (IllegalArgumentException e) { |
return ""; |
} |
} |
public String formaterDateQuiEstVraimentUneDateEtPasUnString(Date dateNonFormatee) { |
String retour = ""; |
try { |
DateTimeFormat formateur = DateTimeFormat.getFormat("dd/MM/yyyy"); |
retour = formateur.format(dateNonFormatee); |
} catch (IllegalArgumentException e) { |
} |
return retour; |
} |
@Override |
public void afficherVotes(PropositionDetermination propositionDetermination) { |
HTML htmlTitre = new HTML(propositionDetermination.getEspece()); |
titre.add(htmlTitre); |
HTML htmlAuteur = new HTML(I18n.getVocabulary().proposePar()+propositionDetermination.getAuteur()); |
auteur.add(htmlAuteur); |
Date datePropDet = propositionDetermination.getDate(); |
String date = formaterDateQuiEstVraimentUneDateEtPasUnString(datePropDet); |
this.date.setText(date); |
Map<String, VoteDetermination> listeVotes = propositionDetermination.getVotesDeterminations(); |
int votesAnonymesPour = 0; |
int votesAnonymesContre = 0; |
float votesPour = 0; |
float totalVotes = listeVotes.size(); |
for (Iterator<String> iterator = listeVotes.keySet().iterator(); iterator.hasNext();) { |
VoteDetermination voteDetermination = listeVotes.get(iterator.next()); |
if (voteDetermination.getVote() == 1) { |
//Votes pour |
if (voteDetermination.getAuteur() != null) { |
ajouterVote(voteDetermination, detailVotePour); |
} else { |
votesAnonymesPour++; |
} |
votesPour++; |
} else { |
//Votes contre |
if (voteDetermination.getAuteur() != null) { |
ajouterVote(voteDetermination, detailVoteContre); |
} else { |
votesAnonymesContre++; |
} |
} |
} |
float moyennePour = (votesPour/totalVotes*100); |
scorePour.setText(StringUtils.formaterNombre(moyennePour, 2)+"%"); |
scoreContre.setText(StringUtils.formaterNombre(100 - moyennePour, 2)+"%"); |
if (votesAnonymesPour > 0) { |
LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesPour); |
presenteurVote.go(detailVotePour); |
} |
if (votesAnonymesContre > 0) { |
LigneVotePresenteur presenteurVote= new LigneVotePresenteur(new LigneVoteVue(), votesAnonymesContre); |
presenteurVote.go(detailVoteContre); |
} |
} |
public void ajouterVote(VoteDetermination vote, HasWidgets panel) { |
LigneVotePresenteur presenteurVote = new LigneVotePresenteur(new LigneVoteVue(), vote); |
presenteurVote.go(panel); |
} |
@Override |
public void startChargement() { |
panneauChargement.setHeight((this.getOffsetHeight()/2)+"px"); |
panneauChargement.setWidth((this.getOffsetWidth()/2)+"px"); |
panneauChargement.setVisible(true); |
} |
@Override |
public void stopChargement() { |
panneauChargement.setVisible(false); |
} |
@Override |
public void afficherAucuneDonnees() { |
aucuneDonnees.setVisible(true); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/details/LigneVoteVue.ui.xml |
---|
New file |
0,0 → 1,12 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder' |
xmlns:g='urn:import:com.google.gwt.user.client.ui' |
xmlns:vues="urn:import:org.tela_botanica.del.client.composants.forum"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="ligneVote.css" /> |
<g:HTMLPanel styleName="nettoyage"> |
<g:Label ui:field="auteur" styleName="{style.auteur}"></g:Label> |
<g:Label ui:field="dateOuNb" styleName="{style.colonne2}"></g:Label> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/moyennevotes/moyenne.css |
---|
New file |
0,0 → 1,109 |
.moyenne { |
background: none repeat scroll 0 0 #333333; |
display: block; |
margin-left: -5px; |
margin-top: -7px; |
padding: 5px; |
width: 116px; |
} |
.petit { |
font-size: 11px; |
color: #AAA |
} |
.petitgauche, .petitgauchecliquable { |
font-size: 11px; |
color: #AAA; |
float: left; |
} |
.petitgauchecliquable, .fermerPanneauDetails { |
text-decoration: underline; |
cursor: pointer; |
} |
.chiffreDroite { |
float: right; |
margin-right: 10px; |
color: #22ee22; |
} |
.panneauDetailVotes { |
position: absolute; |
top: -205px; |
right: 0; |
width : 200px; |
height: 192px; |
padding: 3px; |
color: #dddddd; |
background-color: #333333; |
border: solid white 1px; |
} |
.fermerPanneauDetails { |
position: absolute; |
bottom: 3px; |
right: 3px; |
font-size: 11px; |
color: #AAA; |
} |
.barreVote { |
padding: 0 5px 0 5px |
} |
.validerVote { |
font-size: 11px; |
margin-left: 5px; |
float:left |
} |
.zoneBoutonsVote { |
position:absolute; |
} |
.annuler { |
background: url("./img/cancel.png") no-repeat; |
border: none; |
padding-left: 16px; |
padding-top: 16px; |
margin-left: 5px; |
cursor: pointer; |
} |
.zoneNoteGlobale { |
background: none repeat scroll 0 0 #333333; |
margin-left: 122px; |
margin-top: -5px; |
position: absolute; |
white-space: nowrap; |
width: 113px; |
height:29px; |
padding:5px; |
} |
.zoneFleur { |
position:absolute; |
top:5px; |
margin-left:86px; |
} |
.protocole { |
width:124px; |
white-space:nowrap; |
text-overflow:ellipsis; |
overflow:hidden; |
} |
.zoneVoter { |
background: none repeat scroll 0 0 #8EB533; |
color: white; |
font-size: 15px; |
height: 29px; |
margin-left: -5px; |
margin-top: -18px; |
padding: 10px 5px 0 39px; |
position: absolute; |
width: 82px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.ui.xml |
---|
New file |
0,0 → 1,98 |
<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="constants" type="org.tela_botanica.del.client.i18n.Vocabulary"/> |
<ui:style src="moyenne.css" /> |
<g:HTMLPanel styleName="{style.moyenne}"> |
<g:HTMLPanel ui:field="panneauDetailVotes" styleName="{style.panneauDetailVotes}"> |
<g:Label ui:field="lienPanneauFermer" styleName="{style.fermerPanneauDetails}"> |
Fermer X |
</g:Label> |
Moyenne pondérée: <span ui:field="pdvMoyennePonderee" class="chiffreDroite"></span> |
<br/> |
Moyenne arithmétique: <span ui:field="pdvMoyenneArithmetique" class="chiffreDroite"></span> |
<br/> |
Médiane: <span ui:field="pdvMediane" class="chiffreDroite"></span> |
<br/> |
Nombre de points: <span ui:field="pdvNbPoints" class="chiffreDroite"></span> |
<br/> |
<table class="notesVotes"> |
<tr> |
<td class="image"> |
<img src="./img/etoile_5.png" style="width: 16px;"/> |
</td> |
<td class="barre"> |
<div ui:field="barre5" class="avancement"></div> |
</td> |
<td class="votants"> |
<span ui:field="votants5"></span> |
</td> |
</tr> |
<tr> |
<td> |
<img src="./img/etoile_4.png" style="width: 16px;"/> |
</td> |
<td class="barre"> |
<div ui:field="barre4" class="avancement"></div> |
</td> |
<td class="votants"> |
<span ui:field="votants4"></span> |
</td> |
</tr> |
<tr> |
<td> |
<img src="./img/etoile_3.png" style="width: 16px;"/> |
</td> |
<td class="barre"> |
<div ui:field="barre3" class="avancement"></div> |
</td> |
<td class="votants"> |
<span ui:field="votants3"></span> |
</td> |
</tr> |
<tr> |
<td> |
<img src="./img/etoile_2.png" style="width: 16px;"/> |
</td> |
<td class="barre"> |
<div ui:field="barre2" class="avancement"></div> |
</td> |
<td class="votants"> |
<span ui:field="votants2"></span> |
</td> |
</tr> |
<tr> |
<td> |
<img src="./img/etoile_1.png" style="width: 16px;"/> |
</td> |
<td class="barre"> |
<div ui:field="barre1" class="avancement"></div> |
</td> |
<td class="votants"> |
<span ui:field="votants1"></span> |
</td> |
</tr> |
</table> |
</g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneNoteGlobale}"> |
<g:Label styleName="petit enligne">Note générale</g:Label><g:Label ui:field="noteGenerale" styleName="petit enligne"/> |
<g:Label ui:field="nbVotes" styleName="{style.petitgauchecliquable}"/> |
<!-- <g:Label ui:field="nbPoints" styleName="{style.petitgauche}"/> --> |
<g:HTMLPanel ui:field="zoneFleur" styleName="{style.zoneFleur}"></g:HTMLPanel> |
</g:HTMLPanel> |
<g:HorizontalPanel> |
<g:Label styleName="{style.petit} {style.protocole}" ui:field="protocole" text="protocole"/> |
</g:HorizontalPanel> |
<g:Label ui:field="zoneVoter" styleName="{style.zoneVoter}">Votez !</g:Label> |
<g:HorizontalPanel ui:field="zoneDeVote"> |
<g:FocusPanel ui:field="voter" styleName="{style.barreVote}"/> |
<g:HTMLPanel ui:field="votePrisEnCompte"><g:Label text="{constants.votePrisEnCompte}"></g:Label></g:HTMLPanel> |
<g:HTMLPanel ui:field="voteModifie"><g:Label text="{constants.voteModifie}"></g:Label></g:HTMLPanel> |
<g:HTMLPanel ui:field="voteSupprime"><g:Label text="{constants.voteSupprime}"></g:Label></g:HTMLPanel> |
<g:HTMLPanel styleName="{style.zoneBoutonsVote}"> |
<g:Button ui:field="boutonAnnuler" title="{constants.supprimerVote}" styleName="{style.annuler}"></g:Button> |
</g:HTMLPanel> |
</g:HorizontalPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVotePresenteur.java |
---|
New file |
0,0 → 1,396 |
package org.tela_botanica.del.client.composants.votes.moyennevotes; |
import java.util.ArrayList; |
import java.util.Collections; |
import java.util.Comparator; |
import java.util.HashMap; |
import java.util.Iterator; |
import java.util.List; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurPresenteur; |
import org.tela_botanica.del.client.composants.votefleur.VoteFleurVue; |
import org.tela_botanica.del.client.modeles.Image; |
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.changementEtatUtilisateur.EvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.changementEtatUtilisateur.GestionnaireEvenementChangementEtatUtilisateur; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.EvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.navigation.evenement.suppressioncommentaire.GestionnaireEvenementSuppressionCommentaire; |
import org.tela_botanica.del.client.services.rest.VoteProtocoleService; |
import org.tela_botanica.del.client.services.rest.async.AjoutVoteProtocoleCallback; |
import org.tela_botanica.del.client.services.rest.async.VoteProtocoleCallback; |
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.event.dom.client.HasMouseMoveHandlers; |
import com.google.gwt.event.dom.client.MouseMoveEvent; |
import com.google.gwt.event.dom.client.MouseMoveHandler; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
import com.google.gwt.user.client.ui.Panel; |
public class MoyenneVotePresenteur { |
public interface Vue extends IsWidget { |
public HasClickHandlers getBoutonAnnuler(); |
public HasClickHandlers getVotes(); |
public int getValeurVote(); |
public void afficherBoutonAnnuler(); |
public void masquerBoutonAnnuler(); |
public void afficherNbVotes(); |
public void masquerNbVotes(); |
//public void afficherNbPoints(); |
//public void masquerNbPoints(); |
public void reinitialiserVotes(); |
public void rafraichir(int moyenneVote, int nbVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee); |
public void ajouterAuParent(HasWidgets composite); |
public void afficherVotePrisEnCompte(); |
public HasWidgets getZoneFleur(); |
public HasText getZoneProtocole(); |
public HasText getNbVotes(); |
//public HasText getNbPoints(); |
public HasClickHandlers getLienNbVotes(); |
public void setNoteGenerale(int note); |
public void afficherVoteModifie(); |
public HasMouseMoveHandlers getZoneVoter(); |
public void masquerZoneVoter(); |
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise); |
public void desactiverInteractionVote(); |
public void activerInteractionVote(); |
public void afficherVoteSupprime(); |
public Panel getPanneauDetailVotes(); |
public void afficherPanneauDetailVotes(); |
public void masquerPanneauDetailVotes(); |
public HasClickHandlers getLienPanneauFermer(); |
} |
private Vue vue; |
private Protocole protocole; |
private Image image; |
private int valeurVoteDefaut = -1; |
private int valeurVoteUtilisateur = -1; |
private int valeurVoteTotal = 0; |
private double moyenneArithmetique = 0; |
private double mediane = 0; |
private int nombrePoints = 0; |
private double valeurVoteTotalPrecise = 0.0; |
private HashMap<Integer,Integer> occurrencesParNote; |
// TODO: on devrait passer un conteneur qui permet d'accéder à ces services |
private VoteProtocoleService voteProtocoleService; |
public MoyenneVotePresenteur(Image image, Protocole protocole, Vue vue, |
VoteProtocoleService voteProtocoleService) { |
this.vue = vue; |
this.protocole = protocole; |
this.image = image; |
this.voteProtocoleService = voteProtocoleService; |
String nomProtocole = protocole.getNom(); |
nomProtocole = nomProtocole.substring(0, 1).toUpperCase() |
+ nomProtocole.substring(1).toLowerCase(); |
vue.getZoneProtocole().setText(nomProtocole); |
} |
public void go(HasWidgets composite) { |
vue.ajouterAuParent(composite); |
gererEvenements(); |
rafraichirVue(); |
} |
public void gererEvenements() { |
vue.getZoneVoter().addMouseMoveHandler(new MouseMoveHandler() { |
@Override |
public void onMouseMove(MouseMoveEvent event) { |
vue.masquerZoneVoter(); |
} |
}); |
vue.getVotes().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = vue.getValeurVote(); |
enregistrerVote(); |
vue.afficherBoutonAnnuler(); |
} |
}); |
vue.getBoutonAnnuler().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
valeurVoteUtilisateur = valeurVoteDefaut; |
vue.masquerBoutonAnnuler(); |
supprimerVote(); |
vue.reinitialiserVotes(); |
} |
}); |
// Affiche un chouette panneau qui montre le détail des votes |
vue.getLienNbVotes().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
if (vue.getPanneauDetailVotes().isVisible()) { |
vue.masquerPanneauDetailVotes(); |
} else { |
vue.afficherPanneauDetailVotes(); |
} |
} |
}); |
vue.getLienPanneauFermer().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
vue.masquerPanneauDetailVotes(); |
} |
}); |
BusEvenementiel.getInstance().addHandler(EvenementChangementEtatUtilisateur.TYPE, new GestionnaireEvenementChangementEtatUtilisateur() { |
@Override |
public void onModificationEtatUtilisateur(EvenementChangementEtatUtilisateur evenementChangementEtatUtilisateur) { |
rafraichirVue(); |
} |
}); |
} |
public void setValeurVoteUtilisateur(int valeurVoteUtilisateur) { |
this.valeurVoteUtilisateur = valeurVoteUtilisateur; |
} |
public void enregistrerVote() { |
vue.desactiverInteractionVote(); |
final VoteProtocole voteProtocole = new VoteProtocole(); |
voteProtocole.setProtocole(this.protocole); |
voteProtocole.setVote(valeurVoteUtilisateur); |
String idContributeur = CacheClient.getInstance().getUtilisateur() |
.getId(); |
voteProtocole.setContributeur(idContributeur); |
//TODO: ceci devrait pouvoir être factorisé |
if (image.utilisateurAVotePourProtocole(this.protocole.getId() + "", |
idContributeur)) { |
voteProtocole.setId(image.getVotesProtocoles(this.protocole.getId()+"").get(idContributeur).getId()); |
VoteProtocoleCallback vpc = new VoteProtocoleCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
image.ajouterVoteProtocole(voteProtocole); |
rafraichirVue(); |
vue.afficherVoteModifie(); |
vue.activerInteractionVote(); |
} |
}; |
voteProtocoleService.modifierVote(image.getIdImage(), |
voteProtocole, vpc); |
} else { |
AjoutVoteProtocoleCallback vpc = new AjoutVoteProtocoleCallback() { |
@Override |
public void surRetour(String idVote) { |
voteProtocole.setId(idVote); |
image.ajouterVoteProtocole(voteProtocole); |
rafraichirVue(); |
vue.afficherVotePrisEnCompte(); |
vue.activerInteractionVote(); |
} |
}; |
voteProtocoleService.ajouterVote(image.getIdImage(), voteProtocole, |
vpc); |
} |
} |
public void supprimerVote() { |
vue.desactiverInteractionVote(); |
final String idContributeur = CacheClient.getInstance().getUtilisateur() |
.getId(); |
final VoteProtocole voteProtocole = image.getVotesProtocoles(protocole.getId()).get(idContributeur); |
VoteProtocoleCallback vpc = new VoteProtocoleCallback() { |
@Override |
public void surRetour(Void objetRetour) { |
// TODO: voir si l'on affiche un message en cas de succès ? |
image.supprimerVoteProtocole(protocole.getId() + "", idContributeur); |
rafraichirVue(); |
vue.afficherVoteSupprime(); |
vue.activerInteractionVote(); |
} |
}; |
voteProtocoleService.supprimerVote(image.getIdImage(), voteProtocole, vpc); |
} |
public int getValeurVoteTotal() { |
return valeurVoteTotal; |
} |
public IsWidget getVue() { |
return vue; |
} |
private void rafraichirVue() { |
valeurVoteTotal = calculerMoyenneVotesArrondie(); |
moyenneArithmetique = calculerMoyenneVotes(); |
mediane = calculerMedianeVotes(); |
valeurVoteTotalPrecise = calculerMoyennePondereeVotes(); |
nombrePoints = calculerNombrePointsEchelleArbitraire(); |
VoteProtocole voteProtocole = image.getVotesProtocoles( |
protocole.getId()).get( |
CacheClient.getInstance().getUtilisateur().getId()); |
int voteUtilisateur = 0; |
if (voteProtocole != null) { |
voteUtilisateur = voteProtocole.getVote(); |
vue.masquerZoneVoter(); |
} |
if(image.utilisateurAVotePourProtocole(protocole.getId()+"", CacheClient.getInstance().getUtilisateur().getId())) { |
vue.afficherBoutonAnnuler(); |
} |
VoteFleurPresenteur presenteurFleur = new VoteFleurPresenteur( |
new VoteFleurVue()); |
presenteurFleur.setNote(valeurVoteTotal); |
vue.setNoteGenerale(valeurVoteTotal); |
vue.setNoteGeneraleToolTip(valeurVoteTotalPrecise); |
presenteurFleur.go(vue.getZoneFleur()); |
vue.rafraichir(voteUtilisateur, image.getVotesProtocoles(protocole.getId()).size(), nombrePoints, |
moyenneArithmetique, mediane, occurrencesParNote, valeurVoteTotalPrecise); |
} |
public double calculerMedianeVotes() { |
double med = 0; |
// comparateur de votes (le bulldozer Java™ pour écraser une mouche) |
class Comparatisateur3000 implements Comparator<VoteProtocole> { |
@Override |
public int compare(VoteProtocole v1, VoteProtocole v2) { |
if (v1.getVote() > v2.getVote()) { |
return 1; |
} else if (v1.getVote() > v2.getVote()) { |
return -1; |
} else { |
return 0; |
} |
} |
} |
// conversion en liste triable |
List<VoteProtocole> liste = new ArrayList<VoteProtocole>(image.getVotesProtocoles(protocole.getId()).values()); |
Collections.sort(liste, new Comparatisateur3000()); |
int longueur = liste.size(); |
if (longueur > 0) { |
if (longueur % 2 == 0) { |
// moyenne des éléments centraux |
med = (liste.get(longueur / 2 - 1).getVote() + liste.get(longueur / 2).getVote()) / 2; |
} else { |
// élément central |
med = liste.get((int) (longueur / 2)).getVote(); |
} |
} |
return med; |
} |
// calcule la moyenne arithmétique |
public double calculerMoyenneVotes() { |
double valeurVote = 0; |
double nbVote = 0; |
for (Iterator<String> iterator = image |
.getVotesProtocoles(protocole.getId()).keySet().iterator(); iterator |
.hasNext();) { |
VoteProtocole imageCelValidationData = image.getVotesProtocoles( |
protocole.getId()).get(iterator.next()); |
valeurVote += (double) imageCelValidationData.getVote() / 5; |
nbVote++; |
} |
if (nbVote > 0) { |
valeurVote /= nbVote; |
valeurVote *= 5; |
} |
return valeurVote; |
} |
// Calcule une moyenne, où chaque note est pondérée par son nombre d'occurrences au carré. |
// voir http://www.tela-botanica.org/wikini/DevInformatiques/wakka.php?wiki=AppliDelCalculVotes |
public double calculerMoyennePondereeVotes() { |
double score = 0; |
double diviseur = 0; |
int nbOccurrences; |
// mise à jour des occurrences par note, utile pour le panneau de détails |
occurrencesParNote = new HashMap<Integer,Integer>(); |
// rangement par note => occurrences |
for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) { |
VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef); |
nbOccurrences = 1; |
if (occurrencesParNote.containsKey(imageCelValidationData.getVote())) { |
nbOccurrences = occurrencesParNote.get(imageCelValidationData.getVote()) + 1; |
} |
occurrencesParNote.put(imageCelValidationData.getVote(), nbOccurrences); |
} |
// calcul pondéré |
for (Integer clef : occurrencesParNote.keySet()) { |
score += clef * occurrencesParNote.get(clef) * occurrencesParNote.get(clef); |
diviseur += occurrencesParNote.get(clef) * occurrencesParNote.get(clef); |
} |
if (diviseur > 0) { |
score /= diviseur; |
} |
return score; |
} |
// remplace chaque note par un nombre de points noté dans "echelle" afin de favoriser |
// les note fortes (5 et 4), pour le défi photo notamment |
public int calculerNombrePointsEchelleArbitraire() { |
int points = 0; |
//int[] echelle = {-1,0,1,4,20}; |
int[] echelle = {1,10,100,1000,10000}; |
for (String clef : image.getVotesProtocoles(protocole.getId()).keySet()) { |
VoteProtocole imageCelValidationData = image.getVotesProtocoles(protocole.getId()).get(clef); |
points += echelle[imageCelValidationData.getVote() - 1]; |
} |
return points; |
} |
public int calculerMoyenneVotesArrondie() { |
//double valeurVote = calculerMoyenneVotes(); |
double valeurVote = calculerMoyennePondereeVotes(); |
return (int) Math.round(valeurVote); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/moyennevotes/MoyenneVoteVue.java |
---|
New file |
0,0 → 1,280 |
package org.tela_botanica.del.client.composants.votes.moyennevotes; |
import java.util.HashMap; |
import org.cobogw.gwt.user.client.ui.Rating; |
import org.tela_botanica.del.client.composants.votes.barrerepartition.InfoBulleAnim; |
import org.tela_botanica.del.client.i18n.I18n; |
import com.google.gwt.core.client.GWT; |
import com.google.gwt.dom.client.DivElement; |
import com.google.gwt.dom.client.SpanElement; |
import com.google.gwt.event.dom.client.HasClickHandlers; |
import com.google.gwt.event.dom.client.HasMouseMoveHandlers; |
import com.google.gwt.i18n.client.NumberFormat; |
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.FocusPanel; |
import com.google.gwt.user.client.ui.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
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 MoyenneVoteVue extends Composite implements MoyenneVotePresenteur.Vue { |
// Annotation can be used to change the name of the associated xml file |
// @UiTemplate("MoyenneVoteVue.ui.xml") |
interface MyUiBinder extends UiBinder<Widget, MoyenneVoteVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
private Rating votes; |
private int valeurOrigine; |
private InfoBulleAnim animerVotePrisEnCompte; |
private InfoBulleAnim animerVoteModifie; |
private InfoBulleAnim animerVoteSupprime; |
@UiField |
FocusPanel voter; |
@UiField |
Panel votePrisEnCompte, voteModifie, voteSupprime, zoneFleur, panneauDetailVotes; |
@UiField |
Label nbVotes, protocole, noteGenerale/*, nbPoints*/, zoneVoter, lienPanneauFermer; |
@UiField |
Button boutonAnnuler; |
@UiField |
// pour le panneau de détail des votes |
SpanElement pdvMoyenneArithmetique, pdvMoyennePonderee, pdvMediane, pdvNbPoints, |
votants5, votants4, votants3, votants2, votants1; |
@UiField |
DivElement barre5, barre4, barre3, barre2, barre1; |
public static final double TAILLE_MAX_BARRE = 135; // si "int", peut faire foirer les divisions |
public MoyenneVoteVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
votes = new Rating(0, 5); |
votes.setReadOnly(false); |
voter.add(votes); |
masquerBoutonAnnuler(); |
masquerPanneauDetailVotes(); |
votePrisEnCompte.setVisible(false); |
animerVotePrisEnCompte = new InfoBulleAnim(votePrisEnCompte); |
animerVoteModifie = new InfoBulleAnim(voteModifie); |
animerVoteSupprime = new InfoBulleAnim(voteSupprime); |
} |
public HasClickHandlers getBoutonAnnuler() { |
return boutonAnnuler; |
} |
public HasText getNbVotes() { |
return nbVotes; |
} |
public HasClickHandlers getLienNbVotes() { |
return nbVotes; |
} |
/*public HasText getNbPoints() { |
return nbPoints; |
}*/ |
public HasClickHandlers getVotes() { |
return votes; |
} |
public int getValeurVote() { |
return votes.getValue(); |
} |
public void afficherBoutonAnnuler() { |
boutonAnnuler.setVisible(true); |
} |
public void masquerBoutonAnnuler() { |
boutonAnnuler.setVisible(false); |
} |
public void afficherNbVotes() { |
nbVotes.setVisible(true); |
} |
public void masquerNbVotes() { |
nbVotes.setVisible(false); |
} |
/*public void afficherNbPoints() { |
nbPoints.setVisible(true); |
}*/ |
/*public void masquerNbPoints() { |
nbPoints.setVisible(false); |
}*/ |
public void afficherPanneauDetailVotes() { |
panneauDetailVotes.setVisible(true); |
} |
public void masquerPanneauDetailVotes() { |
panneauDetailVotes.setVisible(false); |
} |
public Panel getPanneauDetailVotes() { |
return panneauDetailVotes; |
} |
public HasClickHandlers getLienPanneauFermer() { |
return lienPanneauFermer; |
} |
public void reinitialiserVotes() { |
votes.setValue(valeurOrigine); |
} |
public void rafraichir(int voteUtilisateur, int nombreVotes, int nombrePoints, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, double moyennePonderee) { |
valeurOrigine = voteUtilisateur; |
String valeurVote = nombreVotes+" "+I18n.getVocabulary().nbVotes(); |
if (nombreVotes > 1) { |
valeurVote += "s"; |
} |
/*String valeurPoints = ", "+Math.max(0, nombrePoints)+" "+I18n.getVocabulary().nbPoints(); |
if (nombrePoints > 1) { |
valeurPoints += "s"; |
}*/ |
nbVotes.setText(valeurVote); |
//nbPoints.setText(valeurPoints); |
pdvNbPoints.setInnerHTML("" + nombrePoints); |
votes.setValue(voteUtilisateur); |
rafraichirPanneauDetail(moyennePonderee, moyenneArithmetique, mediane, occurrencesParNote, nombreVotes); |
} |
// si la chose est nulle, on retourne 0 |
private int nullCestZero(Integer chose) { |
if (chose == null) { |
return 0; |
} else { |
return chose; |
} |
} |
// try { |
// codeConcisEtEfficace(); |
// } catch (ShitLanguageException e) { |
// codeCracra(); |
// } |
private void rafraichirPanneauDetail(double moyennePonderee, double moyenneArithmetique, double mediane, HashMap<Integer,Integer> occurrencesParNote, int nombreVotes) { |
// stats |
NumberFormat df = NumberFormat.getFormat("0.###"); |
this.pdvMoyennePonderee.setInnerHTML("" + df.format(moyennePonderee)); |
this.pdvMoyenneArithmetique.setInnerHTML("" + df.format(moyenneArithmetique)); |
this.pdvMediane.setInnerHTML("" + df.format(mediane)); |
// détail des votes |
double tailleBarre1 = 0, |
tailleBarre2 = 0, |
tailleBarre3 = 0, |
tailleBarre4 = 0, |
tailleBarre5 = 0; |
// on peut pas mettre des attributs dans une variable ? Quelle idée aussi de faire |
// du Web avec un langage statique... du coup codre cracra, ça vous fera les pieds |
if (nombreVotes > 0) { |
if (occurrencesParNote.get(1) != null) { |
tailleBarre1 = (int) (occurrencesParNote.get(1) * TAILLE_MAX_BARRE / nombreVotes); |
} |
if (occurrencesParNote.get(2) != null) { |
tailleBarre2 = (int) (occurrencesParNote.get(2) * TAILLE_MAX_BARRE / nombreVotes); |
} |
if (occurrencesParNote.get(3) != null) { |
tailleBarre3 = (int) (occurrencesParNote.get(3) * TAILLE_MAX_BARRE / nombreVotes); |
} |
if (occurrencesParNote.get(4) != null) { |
tailleBarre4 = (int) (occurrencesParNote.get(4) * TAILLE_MAX_BARRE / nombreVotes); |
} |
if (occurrencesParNote.get(5) != null) { |
tailleBarre5 = (int) (occurrencesParNote.get(5) * TAILLE_MAX_BARRE / nombreVotes); |
} |
} |
this.barre1.setAttribute("style", "width: " + tailleBarre1 + "px;"); |
this.barre2.setAttribute("style", "width: " + tailleBarre2 + "px;"); |
this.barre3.setAttribute("style", "width: " + tailleBarre3 + "px;"); |
this.barre4.setAttribute("style", "width: " + tailleBarre4 + "px;"); |
this.barre5.setAttribute("style", "width: " + tailleBarre5 + "px;"); |
this.votants1.setInnerHTML("" + nullCestZero(occurrencesParNote.get(1))); |
this.votants2.setInnerHTML("" + nullCestZero(occurrencesParNote.get(2))); |
this.votants3.setInnerHTML("" + nullCestZero(occurrencesParNote.get(3))); |
this.votants4.setInnerHTML("" + nullCestZero(occurrencesParNote.get(4))); |
this.votants5.setInnerHTML("" + nullCestZero(occurrencesParNote.get(5))); |
} |
@Override |
public void ajouterAuParent(HasWidgets composite) { |
composite.add(this); |
} |
@Override |
public void afficherVotePrisEnCompte() { |
votePrisEnCompte.setStyleName("votePrisEnCompteOui"); |
animerVotePrisEnCompte.run(2000); |
} |
public HasWidgets getZoneFleur() { |
return zoneFleur; |
} |
public HasText getZoneProtocole() { |
return protocole; |
} |
public void setNoteGenerale(int note) { |
noteGenerale.setText(" : " + note); |
} |
@Override |
public void setNoteGeneraleToolTip(double valeurVoteTotalPrecise) { |
double valeurArrondie = (double)Math.round(valeurVoteTotalPrecise * 1000) / 1000; |
zoneFleur.setTitle(I18n.getVocabulary().votesMoyennePrecise()+valeurArrondie); |
} |
public void afficherVoteModifie() { |
voteModifie.setStyleName("votePrisEnCompteOui"); |
animerVoteModifie.run(2000); |
} |
@Override |
public void afficherVoteSupprime() { |
voteSupprime.setStyleName("voteSupprime"); |
animerVoteSupprime.run(2000); |
} |
public HasMouseMoveHandlers getZoneVoter() { |
return zoneVoter; |
} |
public void masquerZoneVoter() { |
zoneVoter.setVisible(false); |
} |
@Override |
public void desactiverInteractionVote() { |
votes.setReadOnly(true); |
boutonAnnuler.setEnabled(false); |
boutonAnnuler.addStyleName("elementMasque"); |
votes.addStyleName("elementMasque"); |
} |
@Override |
public void activerInteractionVote() { |
votes.setReadOnly(false); |
boutonAnnuler.setEnabled(true); |
boutonAnnuler.removeStyleName("elementMasque"); |
votes.removeStyleName("elementMasque"); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVoteVue.java |
---|
New file |
0,0 → 1,126 |
package org.tela_botanica.del.client.composants.votes.barrerepartition; |
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.HasText; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.PushButton; |
import com.google.gwt.user.client.ui.Widget; |
public class BarreRepartitionVoteVue extends Composite implements BarreRepartitionVotePresenteur.Vue { |
interface MyUiBinder extends UiBinder<Widget, BarreRepartitionVoteVue> { |
} |
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); |
private InfoBulleAnim animerVotePrisEnCompte; |
private InfoBulleAnim animerVoteModifie; |
@UiField |
Label nomTaxon, score; |
@UiField |
Panel votePrisEnCompte, voteModifie; |
@UiField |
PushButton boutonOui, boutonNon; |
public BarreRepartitionVoteVue() { |
initWidget(uiBinder.createAndBindUi(this)); |
votePrisEnCompte.setVisible(false); |
voteModifie.setVisible(false); |
animerVotePrisEnCompte = new InfoBulleAnim(votePrisEnCompte); |
animerVoteModifie = new InfoBulleAnim(voteModifie); |
boutonOui.setTitle(I18n.getVocabulary().JeSuisDaccord()); |
boutonNon.setTitle(I18n.getVocabulary().JeNeSuisPasDaccord()); |
} |
@Override |
public void afficherVotes(int pourcentage, String nomTaxon, String auteur, boolean estPropositionInitiale) { |
this.nomTaxon.setText(nomTaxon); |
this.nomTaxon.setTitle(nomTaxon + " - " + auteur); |
score.setText(String.valueOf(pourcentage)); |
if (estPropositionInitiale) { |
this.nomTaxon.addStyleName("propositionInitiale"); |
} |
} |
@Override |
public HasClickHandlers getBoutonOui() { |
return boutonOui; |
} |
@Override |
public HasClickHandlers getBoutonNon() { |
return boutonNon; |
} |
@Override |
public void setVoteOuiEffectue() { |
boutonOui.setEnabled(false); |
boutonOui.addStyleName("boutonVoteOuiDesactive"); |
boutonNon.setEnabled(true); |
boutonNon.removeStyleName("boutonVoteNonDesactive"); |
boutonOui.setTitle(""); |
boutonNon.setTitle(I18n.getVocabulary().JeNeSuisPasDaccord()); |
} |
@Override |
public void setVoteNonEffectue() { |
boutonOui.setEnabled(true); |
boutonOui.removeStyleName("boutonVoteOuiDesactive"); |
boutonNon.setEnabled(false); |
boutonNon.addStyleName("boutonVoteNonDesactive"); |
boutonOui.setTitle(I18n.getVocabulary().JeSuisDaccord()); |
boutonNon.setTitle(""); |
} |
@Override |
public void afficherVotePrisEnCompte(boolean voteOui) { |
if (voteOui) { |
votePrisEnCompte.removeStyleName("votePrisEnCompteNon"); |
votePrisEnCompte.setStyleName("votePrisEnCompteOui"); |
} else { |
votePrisEnCompte.removeStyleName("votePrisEnCompteOui"); |
votePrisEnCompte.setStyleName("votePrisEnCompteNon"); |
} |
animerVotePrisEnCompte.run(2000); |
} |
public void afficherVoteModifie(boolean voteOui) { |
if (voteOui) { |
voteModifie.removeStyleName("votePrisEnCompteNon"); |
voteModifie.setStyleName("votePrisEnCompteOui"); |
} else { |
voteModifie.removeStyleName("votePrisEnCompteOui"); |
voteModifie.setStyleName("votePrisEnCompteNon"); |
} |
animerVoteModifie.run(2000); |
} |
@Override |
public void desactiverBoutons() { |
boutonNon.setEnabled(false); |
boutonOui.setEnabled(false); |
} |
@Override |
public void activerBoutons() { |
boutonNon.setEnabled(true); |
boutonOui.setEnabled(true); |
} |
@Override |
public void toggleNomEspece() { |
nomTaxon.setVisible(!nomTaxon.isVisible()); |
} |
@Override |
public HasText getScore() { |
return score; |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/barrerepartition/barreRepartition.css |
---|
New file |
0,0 → 1,93 |
.conteneurBarre { |
width:130px; |
display: inline; |
} |
.conteneurBarreOuiNon { |
display: inline; |
float: right; |
} |
.labelTaxon { |
float: left; |
margin-right: 5px; |
overflow: hidden; |
text-overflow: ellipsis; |
white-space: nowrap; |
width: 190px; |
margin-bottom: 5px; |
text-align:left; |
} |
.barre { |
width:50px; |
height:15px; |
background:#BBB; |
float:left; |
margin-right:2px; |
margin-left:2px; |
display: inline; |
float:left; |
} |
.pourcentage { |
position:absolute; |
font-size:10px; |
width:48px; |
text-align:center; |
} |
.barreOui { |
background:#8EB533; |
padding-bottom:15px; |
} |
.barreNon { |
background:#f06a6a; |
padding-bottom:15px; |
} |
.boutonOui, .boutonNon { |
text-align:center; |
color:white; |
line-height:1em; |
font-size:15px; |
font-weight:bold; |
cursor:pointer; |
float:left; |
background:#AAA; |
} |
.boutonOui { |
width:9%; |
height:15px; |
width:30px; |
border-radius:0 2px 2px 0; |
background-image: url("img/pouce_haut.png"); |
} |
.boutonOui:hover { |
background-image: url("img/pouce_haut_hover.png"); |
} |
.boutonNon:hover { |
background-image: url("img/pouce_bas_hover.png"); |
} |
.boutonNon { |
width:9%; |
height:15px; |
width:30px; |
border-radius:2px 0 0 2px; |
background-image: url("img/pouce_bas.png"); |
margin-right:5px; |
} |
.score { |
font-size:13px; |
color:#333; |
font-weight:bold; |
margin-right:10px; |
width:28px; |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/barrerepartition/InfoBulleAnim.java |
---|
New file |
0,0 → 1,30 |
package org.tela_botanica.del.client.composants.votes.barrerepartition; |
import com.google.gwt.animation.client.Animation; |
import com.google.gwt.user.client.ui.Widget; |
public class InfoBulleAnim extends Animation{ |
private Widget widget; |
public InfoBulleAnim(Widget widget) { |
this.widget = widget; |
widget.setVisible(false); |
} |
@Override |
protected void onStart() { |
super.onStart(); |
widget.setVisible(true); |
} |
@Override |
protected void onUpdate(double progress) { |
} |
@Override |
protected void onComplete() { |
super.onComplete(); |
widget.setVisible(false); |
} |
} |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVoteVue.ui.xml |
---|
New file |
0,0 → 1,16 |
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent"> |
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder" |
xmlns:g="urn:import:com.google.gwt.user.client.ui"> |
<ui:with field="constants" type="org.tela_botanica.del.client.i18n.Vocabulary" /> |
<ui:style src="barreRepartition.css" /> |
<g:HTMLPanel styleName="{style.conteneurBarre}"> |
<g:Label styleName="gauche {style.score}" ui:field="score">--</g:Label> |
<g:Label ui:field="nomTaxon" styleName="{style.labelTaxon} labelTaxon" /> |
<g:HTMLPanel styleName="{style.conteneurBarreOuiNon}"> |
<g:PushButton ui:field="boutonNon" text=" " styleName="{style.boutonNon}"/> |
<g:PushButton ui:field="boutonOui" text=" " styleName="{style.boutonOui}"/> |
<g:HTMLPanel ui:field="votePrisEnCompte"><g:Label text="{constants.votePrisEnCompte}"></g:Label></g:HTMLPanel> |
<g:HTMLPanel ui:field="voteModifie"><g:Label text="{constants.voteModifie}"></g:Label></g:HTMLPanel> |
</g:HTMLPanel> |
</g:HTMLPanel> |
</ui:UiBinder> |
/branches/v1.5-carbone/src/org/tela_botanica/del/client/composants/votes/barrerepartition/BarreRepartitionVotePresenteur.java |
---|
New file |
0,0 → 1,171 |
package org.tela_botanica.del.client.composants.votes.barrerepartition; |
import java.util.Date; |
import org.tela_botanica.del.client.cache.CacheClient; |
import org.tela_botanica.del.client.modeles.MoyenneVote; |
import org.tela_botanica.del.client.modeles.PropositionDetermination; |
import org.tela_botanica.del.client.modeles.VoteDetermination; |
import org.tela_botanica.del.client.navigation.evenement.BusEvenementiel; |
import org.tela_botanica.del.client.navigation.evenement.voteDetermination.EvenementVoteDetermination; |
import org.tela_botanica.del.client.services.CalculVoteDeterminationService; |
import org.tela_botanica.del.client.services.rest.VoteDeterminationService; |
import org.tela_botanica.del.client.services.rest.async.AjoutVoteDeterminationCallback; |
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.HasText; |
import com.google.gwt.user.client.ui.HasWidgets; |
import com.google.gwt.user.client.ui.IsWidget; |
public class BarreRepartitionVotePresenteur { |
public interface Vue extends IsWidget { |
public void afficherVotes(int pourcentage, String NomTaxon, String auteur, boolean estPropositionInitiale); |
public HasClickHandlers getBoutonOui(); |
public HasClickHandlers getBoutonNon(); |
public void desactiverBoutons(); |
public void activerBoutons(); |
public void setVoteOuiEffectue(); |
public void setVoteNonEffectue(); |
public void afficherVotePrisEnCompte(boolean b); |
public void afficherVoteModifie(boolean b); |
public void toggleNomEspece(); |
public HasText getScore(); |
} |
private Vue vue; |
private MoyenneVote moyenneVote; |
// TODO: classe conteneur qui est passé en paramètre au constructeur |
private VoteDeterminationService voteDeterminationService; |
public BarreRepartitionVotePresenteur(Vue vue, VoteDeterminationService voteDeterminationService) { |
this.vue = vue; |
this.voteDeterminationService = voteDeterminationService; |
gererEvenements(); |
} |
public void go(HasWidgets container) { |
container.add(vue.asWidget()); |
} |
public void afficherVotes(MoyenneVote moyenneVote) { |
this.moyenneVote = moyenneVote; |
int score = moyenneVote.getScore(); |
String intitule = moyenneVote.getIntituleAssocie(); |
PropositionDetermination proposition = moyenneVote.getPropositionAssociee(); |
boolean estPropositionInitiale = false; |
if (proposition != null) { |
estPropositionInitiale = moyenneVote.getPropositionAssociee().estPropositionInitiale(); |
} |
vue.afficherVotes(score, intitule, moyenneVote.getPropositionAssociee().getAuteur(), estPropositionInitiale); |
afficherValeurVoteUtilisateur(); |
} |
public void afficherValeurVoteUtilisateur() { |
String idUtilisateur = CacheClient.getInstance().getUtilisateur().getId(); |
if(moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(idUtilisateur)) { |
boolean valeurVote = (moyenneVote.getPropositionAssociee().getVotesDeterminations().get(idUtilisateur).getVote() == 1) ? true : false; |
if(valeurVote) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
} |
} |
public Vue getBarreRepartitionVoteVue() { |
return vue; |
} |
public MoyenneVote getMoyenneVote() { |
return moyenneVote; |
} |
public void gererEvenements() { |
vue.getBoutonOui().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
voter(true); |
} |
}); |
vue.getBoutonNon().addClickHandler(new ClickHandler() { |
@Override |
public void onClick(ClickEvent event) { |
voter(false); |
} |
}); |
} |
private void surVoteDetermination(final VoteDetermination vd) { |
if (vd.getPropositionDetermination().equals(moyenneVote.getPropositionAssociee())) { |
AjoutVoteDeterminationCallback vdc = new AjoutVoteDeterminationCallback() { |
@Override |
public void surErreur(String messageErreur) { |
Window.alert(messageErreur); |
vue.activerBoutons(); |
} |
@Override |
public void surRetour(Void objetRetour) { |
moyenneVote.getPropositionAssociee().ajouterVoteDetermination(vd); |
moyenneVote = CalculVoteDeterminationService.calculerVoteDetermination(moyenneVote.getPropositionAssociee()); |
afficherVotes(moyenneVote); |
vue.activerBoutons(); |
boolean valeurVote = (vd.getVote() == 1) ? true : false; |
if(valeurVote) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
// l'évènement n'est lancé que si le vote est validé |
BusEvenementiel.getInstance().fireEvent(new EvenementVoteDetermination(vd)); |
} |
}; |
if (moyenneVote.getPropositionAssociee().utilisateurAVotePourDetermination(vd.getContributeur())) { |
voteDeterminationService.modifierVote(vd, vdc); |
vue.afficherVoteModifie(vd.getVote()==1); |
} else { |
voteDeterminationService.ajouterVote(vd, vdc); |
vue.afficherVotePrisEnCompte(vd.getVote()==1); |
} |
} |
} |
public void toggleNomEspece() { |
vue.toggleNomEspece(); |
} |
public void voter(boolean oui) { |
VoteDetermination vd = new VoteDetermination(); |
vd.setPropositionDetermination(moyenneVote.getPropositionAssociee()); |
vd.setContributeur(CacheClient.getInstance().getUtilisateur().getId()); |
vd.setDate(new Date()); |
int valeurVote = oui ? 1 : 0; |
vd.setVote(valeurVote); |
vd.setId(CacheClient.getInstance().getUtilisateur().getId()); |
if (oui) { |
vue.setVoteOuiEffectue(); |
} else { |
vue.setVoteNonEffectue(); |
} |
vue.desactiverBoutons(); |
surVoteDetermination(vd); |
} |
} |