Subversion Repositories eFlore/Applications.cel

Rev

Rev 61 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

package org.tela_botanica.client.vues;

import java.util.Iterator;

import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.ListeObservation;
import org.tela_botanica.client.modeles.Observation;

import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.MouseListenerAdapter;
import com.gwtext.client.data.SimpleStore;
import com.gwtext.client.data.Store;
import com.gwtext.client.dd.DragSource;
import com.gwtext.client.dd.DropTarget;
import com.gwtext.client.dd.DropTargetConfig;
import com.gwtext.client.widgets.Component;
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
import com.gwtext.client.widgets.event.ContainerListener;
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
import com.gwtext.client.widgets.event.PanelListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridDragData;
import com.gwtext.client.widgets.grid.GridPanel;
import com.gwtext.client.widgets.grid.event.GridListener;
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.dd.DragData;

/**
 * Fausse liste d'observation pour tester le drag n' drop et l'insertion
 * Est vouée à devenir une véritable liste avec de vraie données
 * @author aurelien
 *
 */
public class MiniListeObservationVue extends GridPanel implements Rafraichissable {

        /**
         * Le médiateur associé à la vue
         */
        private ImageMediateur iMediateur = null ;
        
        /**
         * Booléen d'instanciation
         */
        private boolean estInstancie = false ;
        
        /**
         * Le modèle de colonnes
         */
        private ColumnModel colModel = null ;
        
        private SimpleStore store = null ;
        
        /**
         * Constructeur avec arguments
         * @param im le médiateur à associer à la vue
         */
        public MiniListeObservationVue(ImageMediateur im)
        {
                iMediateur = im ;
                
                this.setId("x-view-mini-obs") ;
                
                // on crée un store simple contenant un petit set de données et deux colonnes
                store = new SimpleStore(new String[]{"id_obs","plante","date"}, getObs());  
                ColumnConfig[] columns = {  
                new ColumnConfig("Numero", "id_obs", 50, true),   
                new ColumnConfig("Taxon", "plante", 145, true), 
                new ColumnConfig("Date", "date", 68, true) } ;
                   
        ColumnModel columnModel = new ColumnModel(columns);
         
        colModel = columnModel ;
         
        setTitle("Observations");  
        // on associe le modèle de colonnes
        setColumnModel(columnModel);  
        setAutoScroll(true) ;
        setHeight("100%") ;
                setAutoWidth(true) ; 
        // on autorise le drag 'n drop pour un certain groupe
                this.setEnableDragDrop(true);
                this.setDdGroup("DragGroupName");
        store.load();       
                setStore(store) ;
                
                setAutoScroll(true) ;
                // on configure le drag 'n drop
                configDragAndDrop() ;
                
                this.addListener(new ComponentListenerAdapter() {
                        
                        public void onRender(Component c) {
                                
                                obtenirMiniListeObservations() ;
                                
                        }
                        
                }) ;
                
                this.addGridListener(new GridListenerAdapter() {

                        @Override
                        public void onContextMenu(EventObject e) {
                                
                                e.stopEvent() ;
                                MenuLiaisonVue mlv = new MenuLiaisonVue(iMediateur) ;
                                mlv.showAt(e.getXY()) ;
                                
                        }
                        
                }) ;
                                  
        }
        
        /**
         * Configure le drag 'n drop pour la liste
         */
        private void configDragAndDrop()
        {
                // on choisit le texte qui sera affiché lors d'un drag 'n drop
                setDragDropText("Faites glisser la selection d'observations sur une image pour les lier") ;
                
                //On active le drag 'n drop
                this.setEnableDragDrop(true);

                // on fabrique la nouvelle configuration
                // les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
                this.setDdGroup("DragGroupName");
                DropTargetConfig dtc = new DropTargetConfig();
                dtc.setdDdGroup("DragGroupName");

                //La drop target permet de gérer l'évenement onDrop sur l'élement courant
                @SuppressWarnings("unused")
                DropTarget tg = new DropTarget(this, dtc)
                {
                        public boolean notifyDrop(DragSource source, EventObject e, DragData data){     
                                
                                // si on reçoit des données provenant d'une grille
                                if(data instanceof GridDragData)
                          {
                                        // on la convertit 
                                        GridDragData gdd = (GridDragData)data ;
                                        // et on vérifie que les données ne viennent pas de l'élément courant
                                        if(gdd.getGrid().getId().equals("x-view-mini-obs"))
                                        {
                                                return false ;
                                        }
                                        else
                                        {
                                                // on appelle le médiateur
                                                return iMediateur.lierImagesDD(source, e, data) ;   
                                        }
                          }
                                return false ;
                        }
                        
                        public String notifyOver(DragSource source, EventObject e, DragData data){
                            return "x-dd-drop-ok";
                        }
                };
        
        }
        
        /**
         * Méthode héritée de l'interface rafraichissable
         */
        public void rafraichir(Object nouvelleDonnees,
                        boolean repandreRaffraichissement) {
                
                if(nouvelleDonnees instanceof ListeObservation)
                {
                        ListeObservation data = (ListeObservation)nouvelleDonnees ;
                        String[][] listeObs = new String[data.size()][3] ;
                        int i = 0 ;
                        
                        for (Iterator it = data.keySet().iterator(); it.hasNext();) 
                        {
                                
                                Observation obs=(Observation) data.get(it.next());
                                
                                listeObs[i][0] = obs.getNumeroOrdre();
                                listeObs[i][1] = obs.getNomSaisi();
                                listeObs[i][2] = obs.getDate() ;
                        
                                i++ ;
                        }

                        store = new SimpleStore(new String[]{"id_obs","plante","date"}, listeObs);      
                        store.load();       
                        this.reconfigure(store, colModel) ;
        
                }
                
        }
        
        private void obtenirMiniListeObservations()
        {
                iMediateur.obtenirMiniListeObservations(this) ;
        }
        
        /**
         * Renvoie le faux set de données pour le store
         * @return un tableau à deux colonnes int - String
         */
        private Object[][] getObs() {  
                 return new Object[][]{  
                              
                 } ;
         }
        
        public Store getStore()
        {
                return store ;
        }
        
        

}