Subversion Repositories eFlore/Applications.cel

Rev

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