Rev 140 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;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.Image;import com.gwtext.client.core.Ext;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 {/*** Le médiateur associé*/private ObservationMediateur observationMediateur = null;/*** l'image à afficher*/private Image image = new Image();private String urlImage = "" ;private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ;com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("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) {this.observationMediateur = obs;imgZoom.setCloseAction(com.gwtext.client.widgets.Window.HIDE) ;image = new Image() {public 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);this.setCls("x-image-info-rep") ;add(image);image.setPixelSize(150, 150);// on ajoute les listenersajouterListeners();}/*** Affichage carte de repartition**/public 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) {image.setUrl("ill_choro.png") ;image.setPixelSize(150, 150);}else {image.setUrl(urlImage);verifierEtRetaillerImage();}}}public void agrandirImage() {if(!imgZoom.isVisible()){String urlAgrandie = urlImage.replace("min", "max") ;imgZoom.setHtml("<img src=\""+urlAgrandie+"\" />") ;imgZoom.setPagePosition( Window.getClientWidth()/2, Window.getClientHeight()/5) ;imgZoom.setAutoHeight(true) ;imgZoom.setAutoWidth(true) ;imgZoom.show(this.getElement()) ;}}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("");}}