Subversion Repositories eFlore/Applications.del

Rev

Rev 1963 | Blame | Compare with Previous | Last modification | View Log | RSS feed

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"));
                setAltImage(imageCourante.getObservation().getAuteur() + " - " + imageCourante.getObservation().getNomRetenu());
                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);
        }

        // définit le "alt" sur l'image (ajouté pour l'intégration aux réseaux sociaux)
        public void setAltImage(String altImage) {
                photoPrincipale.setAltText(altImage);
        }

        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");
        }
}