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.HTML;import com.google.gwt.user.client.ui.Image;import com.gwtext.client.widgets.Panel;import com.gwtext.client.widgets.ToolTip;import com.gwtext.client.widgets.Window.CloseAction;/*** Un panneau affichant une image generique provenant d eflore** @author David Delon**/public class ImageGeneriqueVue extends Panel implements Rafraichissable {/*** Le médiateur associé*/private ObservationMediateur observationMediateur = null;/*** l'image à afficher*/private Image image = new Image();private String urlImage = "" ;private com.gwtext.client.widgets.Window imgZoom = new com.gwtext.client.widgets.Window("Agrandissement") ;private ToolTip tp = new ToolTip("<div class=\"x-tooltip-help\"> Double cliquez pour agrandir l'image </div>") ;/*** Constructeur sans argument (privé car ne doit pas être utilisé)*/@SuppressWarnings("unused")private ImageGeneriqueVue() {super();}/*** Constructeur avec argument* @param obs le médiateur à associer*/public ImageGeneriqueVue(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()) ;this.setCls("x-image-gen") ;add(image);image.setPixelSize(150, 150);image.sinkEvents(Event.ONDBLCLICK);// on ajoute les listenersajouterListeners();}/*** Affichage image generique**/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_taxon.png") ;image.setPixelSize(150, 150);}else {image.setUrl(urlImage);verifierEtRetaillerImage();}}observationMediateur.deMasquerChargementInfosObservations() ;}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()) ;}}/*** Ajoute les listeners pour la gestions d'évènement*/public void ajouterListeners() {}public void raz() {image.setUrl("");}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();}}