Rev 2627 | Blame | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues.observation.indicateurs;import org.tela_botanica.client.i18n.Msg;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.observation.ObservationMediateur;import com.google.gwt.user.client.DOM;import com.google.gwt.user.client.Event;import com.google.gwt.user.client.Window;import com.google.gwt.user.client.ui.HTML;import com.google.gwt.user.client.ui.Image;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.ToolTip;/*** Un panneau affichant la repartition d'une plante** @author David Delon**/public class InformationRepartitionVue extends Panel implements Rafraichissable {/*** l'image à afficher*/private Image image = new Image();private String urlImage = "" ;private HTML htmlVide = new HTML();private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> " + Msg.get("double-clic-agrandir") + " </div>") ;com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window(Msg.get("agrandissement")) ;/*** Constructeur sans argument (privé car ne doit pas être utilisé)*/@SuppressWarnings("unused")private InformationRepartitionVue() {super();}/*** Constructeur avec argument* @param obs le médiateur à associer*/public InformationRepartitionVue(ObservationMediateur obs) {imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;image = new Image() {@Overridepublic void onBrowserEvent(Event event) {// lors du double clicif (Event.ONDBLCLICK == DOM.eventGetType(event)) {// on notifie le médiateuragrandirImage() ;}}};tp.applyTo(image.getElement()) ;image.sinkEvents(Event.ONDBLCLICK);imgZoom.setConstrain(true);imgZoom.setAutoHeight(true) ;imgZoom.setAutoWidth(true) ;this.setCls("x-image-info-rep") ;add(image);add(htmlVide);image.setPixelSize(150, 150);afficherImageSinonAfficherMessage(false);// on ajoute les listenersajouterListeners();}private void afficherImageSinonAfficherMessage(boolean afficherImage) {if(afficherImage) {htmlVide.setVisible(false);} else {afficherHtmlVide();}image.setVisible(afficherImage);}private void afficherHtmlVide() {String htmlDivVide = "<div class=\"aucune_image_pour\"> "+Msg.get("aucune-carte-taxon")+"</div>";htmlVide.setHeight("150px");htmlVide.setHTML(htmlDivVide);htmlVide.setVisible(true);}/*** Affichage carte de repartition**/@Overridepublic void rafraichir(Object nouvelleDonnees,boolean repandreRaffraichissement) {// si on recoit une String contenant une URLif (nouvelleDonnees instanceof String) {urlImage=(String) nouvelleDonnees;if (urlImage == null || urlImage.equals("null") || urlImage.length()==0) {afficherImageSinonAfficherMessage(false);}else {afficherImageSinonAfficherMessage(true);image.setUrl(urlImage);verifierEtRetaillerImage();}}}public void agrandirImage() {if(!imgZoom.isVisible()){String urlAgrandie = urlImage.replace("min", "max");imgZoom.setHtml("<img height="+Window.getClientHeight()*0.75+"px src=\""+urlAgrandie+"\" />") ;imgZoom.setPagePosition( Window.getClientWidth()/2, Window.getClientHeight()/5) ;imgZoom.show(this.getElement()) ;} else {imgZoom.hide();}}public void verifierEtRetaillerImage() {// si l'image est nulleif (image == null) {// on ne fait rienreturn;}// on prend la taille originale de l'imageint originalX = image.getWidth();int originalY = image.getHeight();// on la transforme en float (la division entre entier donne de curieux// résultats)float fOriginalX = (new Float(originalX)).floatValue();float fOriginalY = (new Float(originalY)).floatValue();// et on fait le rapport longueur sur hauteur (pour connaitre le ratio)float rapportTaille = fOriginalX / fOriginalY;// la nouvelle taille est pour le moment égale à l'ancienneint nouvelleTailleX = originalX;int nouvelleTailleY = originalY;// on prend la taille du conteneurint tailleConteneurX = getWidth();int tailleConteneurY = getHeight();int maxConteneur = Math.min(tailleConteneurX, tailleConteneurY);int max = Math.min(maxConteneur, 300);// si l'image ne rentre pas telle quelle (longueur ou hauteur trop// grande)// si la longueur de l'image est la plus grande des deuxint maxImage = Math.max(originalX, originalY);if(maxImage == originalX) {// on prend la longueur comme taille de référence, qu'on met à// la longueur du conteneurnouvelleTailleX = max;// et on recalcule la hauteur, par rapport à la nouvelle// longueur, en gardant le format de 'limagenouvelleTailleY = (int) Math.floor(nouvelleTailleX * 1/ rapportTaille);}else{// si la hauteur est la plus grande, on fait le même genre// d'opération en prenant la hauteur comme référencenouvelleTailleY = max;nouvelleTailleX = (int) Math.floor(nouvelleTailleY* rapportTaille);}// on modifie enfin la taille de l'image pour qu'elle soit affichéeimage.setPixelSize(nouvelleTailleX ,nouvelleTailleY);doLayout();}/*** Ajoute les listeners pour la gestions d'évènement*/public void ajouterListeners() {}public void raz() {image.setUrl("");}}