Rev 3 | 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"}
} ;
}
}