Subversion Repositories eFlore/Applications.cel

Rev

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

package org.tela_botanica.client.vues;

import org.tela_botanica.client.image.ImageMediateur;
import org.tela_botanica.client.interfaces.Rafraichissable;

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.ContainerListenerAdapter;
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.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 ;
        
        /**
         * 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
                final Store store = new SimpleStore(new String[]{"id_obs","plante"}, getObs());  
                ColumnConfig[] columns = {  
                new ColumnConfig("Numero", "id_obs", 65, true),   
                new ColumnConfig("Taxon", "plante", 150, true) } ;
                   
        ColumnModel columnModel = new ColumnModel(columns);
         
        colModel = columnModel ;
         
        setTitle("Observations");  
        // on associe le modèle de colonnes
        setColumnModel(columnModel);  
        setHeight(390);  
        setWidth(200);  
        // on autorise le drag 'n drop pour un certain groupe
                this.setEnableDragDrop(true);
                this.setDdGroup("DragGroupName");
        store.load();       
                setStore(store) ;
                
                // on configure le drag 'n drop
                configDragAndDrop() ;
                                  
        }
        
        /**
         * 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) {
                // TODO Auto-generated method stub
                
        }
        
        /**
         * Renvoie le faux set de données pour le store
         * @return un tableau à deux colonnes int - String
         */
        private Object[][] getObs() {  
                 return new Object[][]{  
                                 new Object[]{"1","Plantum bizarrum"},
                                 new Object[]{"2","Feuillum etrangum"},
                                 new Object[]{"3","Spirus cotapilis"},
                                 new Object[]{"4","Birita raborum"},
                                 new Object[]{"5","Spacea sinea"},
                                 new Object[]{"6","Spacea subtea"},
                                 new Object[]{"7","Buissnum petitum"},
                                 new Object[]{"8","Acer monspessulanum"},
                                 new Object[]{"9","Geranium prouticorum"},
                                 new Object[]{"10","Rosae epania"},
                                 new Object[]{"11","Rosea rougea"},
                                 new Object[]{"12","Liciea rosa"},
                                 new Object[]{"13","Liciea bella"}
                        
                 } ;
         }

}