Subversion Repositories eFlore/Applications.cel

Rev

Rev 5 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 aperonnet 1
package org.tela_botanica.client.vues;
2
 
61 jpm 3
import java.util.Iterator;
4
 
3 aperonnet 5
import org.tela_botanica.client.image.ImageMediateur;
6
import org.tela_botanica.client.interfaces.Rafraichissable;
61 jpm 7
import org.tela_botanica.client.modeles.ListeObservation;
8
import org.tela_botanica.client.modeles.Observation;
3 aperonnet 9
 
61 jpm 10
import com.google.gwt.user.client.Window;
3 aperonnet 11
import com.gwtext.client.data.SimpleStore;
12
import com.gwtext.client.data.Store;
13
import com.gwtext.client.dd.DragSource;
14
import com.gwtext.client.dd.DropTarget;
15
import com.gwtext.client.dd.DropTargetConfig;
16
import com.gwtext.client.widgets.Component;
61 jpm 17
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
18
import com.gwtext.client.widgets.event.ContainerListener;
3 aperonnet 19
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
20
import com.gwtext.client.widgets.grid.ColumnConfig;
21
import com.gwtext.client.widgets.grid.ColumnModel;
22
import com.gwtext.client.widgets.grid.GridDragData;
23
import com.gwtext.client.widgets.grid.GridPanel;
24
import com.gwtext.client.core.EventObject;
25
import com.gwtext.client.dd.DragData;
26
 
5 aperonnet 27
/**
28
 * Fausse liste d'observation pour tester le drag n' drop et l'insertion
29
 * Est vouée à devenir une véritable liste avec de vraie données
30
 * @author aurelien
31
 *
32
 */
3 aperonnet 33
public class MiniListeObservationVue extends GridPanel implements Rafraichissable {
34
 
5 aperonnet 35
	/**
36
	 * Le médiateur associé à la vue
37
	 */
3 aperonnet 38
	private ImageMediateur iMediateur = null ;
39
 
5 aperonnet 40
	/**
41
	 * Booléen d'instanciation
42
	 */
3 aperonnet 43
	private boolean estInstancie = false ;
44
 
5 aperonnet 45
	/**
46
	 * Le modèle de colonnes
47
	 */
48
	private ColumnModel colModel = null ;
49
 
61 jpm 50
	private SimpleStore store = null ;
51
 
5 aperonnet 52
	/**
53
	 * Constructeur avec arguments
54
	 * @param im le médiateur à associer à la vue
55
	 */
3 aperonnet 56
	public MiniListeObservationVue(ImageMediateur im)
57
	{
58
		iMediateur = im ;
59
 
60
		this.setId("x-view-mini-obs") ;
5 aperonnet 61
 
62
		// on crée un store simple contenant un petit set de données et deux colonnes
61 jpm 63
		store = new SimpleStore(new String[]{"id_obs","plante","date"}, getObs());
3 aperonnet 64
		ColumnConfig[] columns = {
61 jpm 65
		new ColumnConfig("Numero", "id_obs", 55, true),
66
		new ColumnConfig("Taxon", "plante", 150, true),
67
		new ColumnConfig("Date", "date", 68, true) } ;
3 aperonnet 68
 
5 aperonnet 69
        ColumnModel columnModel = new ColumnModel(columns);
70
 
71
        colModel = columnModel ;
72
 
73
        setTitle("Observations");
74
        // on associe le modèle de colonnes
75
        setColumnModel(columnModel);
61 jpm 76
        setAutoHeight(true);
5 aperonnet 77
        setWidth(200);
78
        // on autorise le drag 'n drop pour un certain groupe
3 aperonnet 79
 		this.setEnableDragDrop(true);
80
 		this.setDdGroup("DragGroupName");
5 aperonnet 81
        store.load();
82
		setStore(store) ;
83
 
84
		// on configure le drag 'n drop
85
		configDragAndDrop() ;
61 jpm 86
 
87
		this.addListener(new ComponentListenerAdapter() {
88
 
89
			public void onRender(Component c) {
90
 
91
				obtenirMiniListeObservations() ;
92
 
93
			}
94
 
95
		}) ;
3 aperonnet 96
 
97
	}
98
 
5 aperonnet 99
	/**
100
	 * Configure le drag 'n drop pour la liste
101
	 */
102
	private void configDragAndDrop()
3 aperonnet 103
	{
104
		// on choisit le texte qui sera affiché lors d'un drag 'n drop
105
		setDragDropText("Faites glisser la selection d'observations sur une image pour les lier") ;
106
 
107
		//On active le drag 'n drop
108
		this.setEnableDragDrop(true);
109
 
110
		// on fabrique la nouvelle configuration
111
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
112
		this.setDdGroup("DragGroupName");
113
		DropTargetConfig dtc = new DropTargetConfig();
114
		dtc.setdDdGroup("DragGroupName");
115
 
116
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
117
		@SuppressWarnings("unused")
118
		DropTarget tg = new DropTarget(this, dtc)
119
		{
120
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
121
 
122
				// si on reçoit des données provenant d'une grille
123
				if(data instanceof GridDragData)
124
		    	  {
125
					// on la convertit
126
		    		  	GridDragData gdd = (GridDragData)data ;
127
		    		  	// et on vérifie que les données ne viennent pas de l'élément courant
128
		    		  	if(gdd.getGrid().getId().equals("x-view-mini-obs"))
129
		    		  	{
130
		    		  		return false ;
131
		    		  	}
132
		    		  	else
133
		    		  	{
134
		    		  		// on appelle le médiateur
135
		    		  		return iMediateur.lierImagesDD(source, e, data) ;
136
		    		  	}
137
		    	  }
138
				return false ;
139
			}
140
 
141
			public String notifyOver(DragSource source, EventObject e, DragData data){
142
			    return "x-dd-drop-ok";
143
			}
144
		};
145
 
146
	}
147
 
5 aperonnet 148
	/**
149
	 * Méthode héritée de l'interface rafraichissable
150
	 */
3 aperonnet 151
	public void rafraichir(Object nouvelleDonnees,
152
			boolean repandreRaffraichissement) {
153
 
61 jpm 154
		if(nouvelleDonnees instanceof ListeObservation)
155
		{
156
			ListeObservation data = (ListeObservation)nouvelleDonnees ;
157
			String[][] listeObs = new String[data.size()][3] ;
158
			int i = 0 ;
159
 
160
			for (Iterator it = data.keySet().iterator(); it.hasNext();)
161
			{
162
 
163
				Observation obs=(Observation) data.get(it.next());
164
 
165
				listeObs[i][0] = obs.getNumeroOrdre();
166
				listeObs[i][1] = obs.getNomSaisi();
167
				listeObs[i][2] = obs.getDate() ;
168
 
169
				i++ ;
170
			}
171
 
172
			store = new SimpleStore(new String[]{"id_obs","plante","date"}, listeObs);
173
			store.load();
174
			this.reconfigure(store, colModel) ;
175
 
176
		}
177
 
3 aperonnet 178
	}
179
 
61 jpm 180
	private void obtenirMiniListeObservations()
181
	{
182
		iMediateur.obtenirMiniListeObservations(this) ;
183
	}
184
 
5 aperonnet 185
	/**
186
	 * Renvoie le faux set de données pour le store
187
	 * @return un tableau à deux colonnes int - String
188
	 */
189
	private Object[][] getObs() {
3 aperonnet 190
	         return new Object[][]{
61 jpm 191
 
3 aperonnet 192
	         } ;
193
	 }
61 jpm 194
 
195
 
3 aperonnet 196
 
197
}