Subversion Repositories eFlore/Archives.cel-v2

Rev

Rev 16 | Rev 19 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

package org.tela_botanica.client.image;

import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.vues.GalerieImageVue;
import org.tela_botanica.client.vues.ListeImageVue;
import org.tela_botanica.client.vues.MenuImageVue;
import org.tela_botanica.client.vues.PanneauMetadonneesVue;
import org.tela_botanica.client.vues.ZoomImageVue;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Element;
import com.google.gwt.user.client.Event;
import com.google.gwt.user.client.Window;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.core.Function;
import com.gwtext.client.core.RegionPosition;
import com.gwtext.client.data.Record;
import com.gwtext.client.data.Store;
import com.gwtext.client.widgets.DataView;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.TabPanel;
import com.gwtext.client.widgets.Tool;
import com.gwtext.client.widgets.Tool.ToolType;
import com.gwtext.client.widgets.layout.BorderLayout;
import com.gwtext.client.widgets.layout.BorderLayoutData;
import com.gwtext.client.widgets.layout.FitLayout;

/**
 * Mediateur gérant les interactions entre vues et les echanges de données
 * C'est un singleton. 
 * @author aurelien
 *
 */
public class ImageMediateur {
        
        // cette classe est un singleton
        private static boolean estInstancie = false ;  
        
        // controleur
        private ImageModele iModele = null ;
        
        //widgets
        
        //Panneau principal des images (onglet "images")
        private final Panel panneauPrincipalImage = new Panel("Images");
        
        // Panneau à onglet pour la liste, la galerie et la vue en grand
        private TabPanel ongletsImage = null ;
        private Panel panneauMenuEtOngletsImage = null ;
        
        private GalerieImageVue galerieImage = null ;
        private ListeImageVue listeImage = null ;
        private ZoomImageVue zoomImage = null ;
        
        // panneau details et mots clés
        private final Panel detailsEtMotsCles = new Panel("Détails et mots clés");
        
        private MenuImageVue menuImageVue = null ;
        
        private PanneauMetadonneesVue metadonneesIptcExif = null ;
        
        public static ImageMediateur Instance()
        {
                        if(!estInstancie)
                        {
                                estInstancie = true ;
                                return new ImageMediateur() ;
                        }
                        else
                        {
                                return null ;
                        }
        }
        
        private ImageMediateur()
        {
                final BorderLayoutData regionNord = new BorderLayoutData(
                                RegionPosition.NORTH) ;
                
                final BorderLayoutData regionCentre = new BorderLayoutData(
                                RegionPosition.CENTER) ;

                final BorderLayoutData regionEst = new BorderLayoutData(
                                RegionPosition.EAST);
                regionEst.setSplit(true);

                
                iModele = ImageModele.Instance(this);
                
                panneauPrincipalImage.setLayout(new BorderLayout());
                panneauMenuEtOngletsImage = new Panel() ;
                panneauMenuEtOngletsImage.setLayout(new BorderLayout()) ;
                
                ongletsImage = new TabPanel();
                galerieImage = new GalerieImageVue(this) ;
                
                Panel panneauListeImage = new Panel("Liste");
                listeImage = new ListeImageVue(this);
                panneauListeImage.setLayout(new FitLayout());
                panneauListeImage.add(listeImage);
                
                zoomImage = new ZoomImageVue(this);
                
                ongletsImage.add(galerieImage);
                ongletsImage.add(zoomImage);
                ongletsImage.add(panneauListeImage);
                
                menuImageVue = new MenuImageVue(this) ;
                
                detailsEtMotsCles.setWidth("20%");
                detailsEtMotsCles.setAnimCollapse(true);
                detailsEtMotsCles.setTitleCollapse(true);
                detailsEtMotsCles.setCollapsible(true);
                
                metadonneesIptcExif = new PanneauMetadonneesVue(this) ;
                detailsEtMotsCles.add(metadonneesIptcExif) ;
                        
                
                //panneauMenuEtOngletsImage.add(menuImageVue,regionNord) ;
                panneauMenuEtOngletsImage.add(ongletsImage,regionCentre);
                
                panneauPrincipalImage.add(panneauMenuEtOngletsImage,regionCentre);
                panneauPrincipalImage.add(detailsEtMotsCles,regionEst);
                
        }
        
        public String getIdentifiant()
        {
                return "0" ;
        }

        public ImageModele getIModele() {
                return iModele;
        }

        public Panel getPanneauPrincipalImage() {
                return panneauPrincipalImage;
        }

        public TabPanel getOngletsImage() {
                return ongletsImage;
        }

        public GalerieImageVue getGalerieImage() {
                return galerieImage;
        }

        public ListeImageVue getListeImage() {
                return listeImage;
        }

        public ZoomImageVue getZoomImage() {
                return zoomImage;
        }

        public Panel getDetailsEtMotsCles() {
                return detailsEtMotsCles;
        }
        
        public void synchroniserZoomListeGalerie(Object o, Rafraichissable r)
        {
                
                
                getIModele().rafraichirListeImage(o) ;
                
                if(r != getGalerieImage())
                {
                        getGalerieImage().rafraichir(o,false);
                }
                if(r != getZoomImage())
                {
                        getZoomImage().rafraichir(o,false);
                }
                if(r != getListeImage())
                {
                        getListeImage().rafraichir(o,false);
                }
                
        }
        
        
        public void obtenirPhotoGalerie(Rafraichissable r)
        {
                getIModele().obtenirPhotoGalerie(r) ;
        }
        
        public void obtenirMetadonnees(Rafraichissable r, String id)
        {
                getIModele().obtenirMetadonnees(r, id) ;
        }
        
        public void mettreAJourInfo(String commentaires, String date)
        {
                String ids[] = getGalerieImage().getIdSelectionnee() ;
                
                        getIModele().mettreAJourCacheImage(commentaires, date, ids) ;
        }
        
        public void uploaderImage()
        {
                getIModele().uploaderImages() ;
        }
        
        public void clicGalerieImage(int index, Element node,
                        EventObject e)
        {
                Record rd = getGalerieImage().getDView().getRecord(node) ;
                String imgUrl = rd.getAsString("url_image"); 
                
                getZoomImage().rafraichir(imgUrl,false);
                
                if(DOM.eventGetType(e.getBrowserEvent()) == Event.ONDBLCLICK)
                {
                        getOngletsImage().setActiveTab(1);
                }
                
                String imgNum = rd.getAsString("num_image");
                obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
        }
        
        public void rafraichirToutesVues()
        {
                obtenirPhotoGalerie(getGalerieImage());
        }
        
        public void montrerContextMenu(EventObject e)
        {
                menuImageVue.showAt(e.getXY()) ;
        }
        
        public void doubleClicZoomImage()
        {
                getOngletsImage().setActiveTab(0);
        }
        
        public void clicBoutonZoomImage(String arg)
        {
                
                DataView dv = getGalerieImage().getDView();
                Store st = getGalerieImage().getSt();
                Record nRec = null ;
                
                final int selected = st.indexOf(dv.getSelectedRecords()[0]);
                int storeIndex = dv.indexOf(selected);
                
                
                if(arg.equals("prev"))
                {
                        // si la photo séléctionnée est la première, on passe à la
                        // dernière
                        if (selected == 0) {
                                storeIndex = st.getCount() - 1 ;
                                nRec = st.getAt(storeIndex);
        
                        } 
                        else 
                        {
                                storeIndex = storeIndex - 1 ;
                                nRec = st.getAt(storeIndex);
                        }
                        
                        
                }
                
                if(arg.equals("suiv"))
                {
                        // si la photo selectionnée est la dernière on passe à la
                        // première
                        if (selected == st.getCount() - 1) {
                                
                                storeIndex = 0 ;
                                nRec = st.getAt(0);
                        } 
                        else 
                        {
                                storeIndex = storeIndex + 1 ;
                                nRec = st.getAt(storeIndex);
                        }
                }
                
                if(nRec != null)
                {
                        getZoomImage().rafraichir(nRec.getAsString("url_image"),false);
                        dv.select(storeIndex);
                        
                        String imgNum = nRec.getAsString("num_image");
                        obtenirMetadonnees(metadonneesIptcExif,imgNum) ;
                }
        }
        
        

}