Subversion Repositories eFlore/Applications.cel

Rev

Rev 155 | 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
 
155 aurelien 10
import com.google.gwt.core.client.JavaScriptObject;
61 jpm 11
import com.google.gwt.user.client.Window;
62 jpm 12
import com.google.gwt.user.client.ui.MouseListenerAdapter;
99 jpm 13
import com.gwtext.client.data.Record;
3 aperonnet 14
import com.gwtext.client.data.SimpleStore;
15
import com.gwtext.client.data.Store;
16
import com.gwtext.client.dd.DragSource;
17
import com.gwtext.client.dd.DropTarget;
18
import com.gwtext.client.dd.DropTargetConfig;
155 aurelien 19
import com.gwtext.client.widgets.BoxComponent;
3 aperonnet 20
import com.gwtext.client.widgets.Component;
155 aurelien 21
import com.gwtext.client.widgets.Container;
22
import com.gwtext.client.widgets.Panel;
99 jpm 23
import com.gwtext.client.widgets.Toolbar;
61 jpm 24
import com.gwtext.client.widgets.event.ComponentListenerAdapter;
25
import com.gwtext.client.widgets.event.ContainerListener;
3 aperonnet 26
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
155 aurelien 27
import com.gwtext.client.widgets.event.PanelListener;
62 jpm 28
import com.gwtext.client.widgets.event.PanelListenerAdapter;
99 jpm 29
import com.gwtext.client.widgets.form.ComboBox;
30
import com.gwtext.client.widgets.form.event.ComboBoxListenerAdapter;
3 aperonnet 31
import com.gwtext.client.widgets.grid.ColumnConfig;
32
import com.gwtext.client.widgets.grid.ColumnModel;
33
import com.gwtext.client.widgets.grid.GridDragData;
34
import com.gwtext.client.widgets.grid.GridPanel;
62 jpm 35
import com.gwtext.client.widgets.grid.event.GridListener;
36
import com.gwtext.client.widgets.grid.event.GridListenerAdapter;
155 aurelien 37
import com.gwtext.client.widgets.map.OpenLayersMap;
3 aperonnet 38
import com.gwtext.client.core.EventObject;
99 jpm 39
import com.gwtext.client.core.Ext;
40
import com.gwtext.client.core.ExtElement;
3 aperonnet 41
import com.gwtext.client.dd.DragData;
42
 
5 aperonnet 43
/**
63 jpm 44
 * liste d'observation pour l'association d'images aux observations
5 aperonnet 45
 * @author aurelien
46
 *
47
 */
3 aperonnet 48
public class MiniListeObservationVue extends GridPanel implements Rafraichissable {
49
 
5 aperonnet 50
	/**
51
	 * Le médiateur associé à la vue
52
	 */
3 aperonnet 53
	private ImageMediateur iMediateur = null ;
54
 
5 aperonnet 55
	/**
56
	 * Booléen d'instanciation
57
	 */
3 aperonnet 58
	private boolean estInstancie = false ;
59
 
5 aperonnet 60
	/**
61
	 * Le modèle de colonnes
62
	 */
63
	private ColumnModel colModel = null ;
64
 
61 jpm 65
	private SimpleStore store = null ;
66
 
99 jpm 67
	//private BarrePaginationVue pgBar = new BarrePaginationVue(iMediateur) ;
68
 
69
	private Toolbar bt = new Toolbar() ;
70
 
5 aperonnet 71
	/**
99 jpm 72
	 * Combobox permettant de selectionner le mode
73
	 * modification ou bien création
74
	 */
75
	private ComboBox selecteurMode = new ComboBox();
76
 
77
	Store storeMode = null ;
78
 
79
	private boolean liaison;
80
 
81
	/**
5 aperonnet 82
	 * Constructeur avec arguments
83
	 * @param im le médiateur à associer à la vue
84
	 */
3 aperonnet 85
	public MiniListeObservationVue(ImageMediateur im)
86
	{
87
		iMediateur = im ;
88
 
89
		this.setId("x-view-mini-obs") ;
5 aperonnet 90
 
91
		// on crée un store simple contenant un petit set de données et deux colonnes
155 aurelien 92
		store = new SimpleStore(new String[]{"id_obs","plante","date","lieu"}, getObs());
3 aperonnet 93
		ColumnConfig[] columns = {
62 jpm 94
		new ColumnConfig("Numero", "id_obs", 50, true),
95
		new ColumnConfig("Taxon", "plante", 145, true),
155 aurelien 96
		new ColumnConfig("Date", "date", 68, true),
97
		new ColumnConfig("Lieu", "lieu", 145, true) } ;
3 aperonnet 98
 
5 aperonnet 99
        ColumnModel columnModel = new ColumnModel(columns);
100
 
101
        colModel = columnModel ;
155 aurelien 102
 
5 aperonnet 103
 
104
        setTitle("Observations");
105
        // on associe le modèle de colonnes
106
        setColumnModel(columnModel);
62 jpm 107
        setAutoScroll(true) ;
108
        setHeight("100%") ;
109
		setAutoWidth(true) ;
5 aperonnet 110
        // on autorise le drag 'n drop pour un certain groupe
3 aperonnet 111
 		this.setEnableDragDrop(true);
112
 		this.setDdGroup("DragGroupName");
5 aperonnet 113
        store.load();
114
		setStore(store) ;
115
 
99 jpm 116
		//setBottomToolbar(pgBar) ;
117
 
118
		Object[][] mode = {{"toutes les observations",false} , {"observations liées", true} };
119
		storeMode = new SimpleStore(new String[] { "nom_mode", "mode" },
120
				mode);
121
		storeMode.load();
122
		selecteurMode.setStore(storeMode);
123
		selecteurMode.setDisplayField("nom_mode") ;
124
		selecteurMode.setLabel("mode ") ;
125
		selecteurMode.setForceSelection(true) ;
126
		selecteurMode.setValue("toutes les observations") ;
127
		selecteurMode.setEditable(false) ;
100 jpm 128
		selecteurMode.setCls("x-selec-consult") ;
99 jpm 129
 
130
		bt = new Toolbar() ;
131
		bt.addField(selecteurMode) ;
132
 
155 aurelien 133
		//this.setAutoExpandColumn("plante");
134
 
99 jpm 135
		setTopToolbar(bt) ;
136
 
137
		selecteurMode.addListener(new ComboBoxListenerAdapter() {
138
 
139
			public void onSelect(ComboBox comboBox, Record record, int index) {
140
 
141
				// et on met la valeur à jour dans la combobox
142
				comboBox.setValue(record.getAsString("nom_mode"));
143
				setModification(record.getAsString("mode")) ;
144
			}
145
 
146
		});
147
 
62 jpm 148
		setAutoScroll(true) ;
5 aperonnet 149
		// on configure le drag 'n drop
150
		configDragAndDrop() ;
61 jpm 151
 
173 aurelien 152
		this.addListener(new ContainerListenerAdapter() {
61 jpm 153
 
154
			public void onRender(Component c) {
155
 
156
				obtenirMiniListeObservations() ;
157
 
158
			}
159
 
173 aurelien 160
			public void onAfterLayout(Container c)
161
			{
162
				obtenirMiniListeObservations() ;
163
			}
164
 
61 jpm 165
		}) ;
62 jpm 166
 
167
		this.addGridListener(new GridListenerAdapter() {
168
 
169
			public void onContextMenu(EventObject e) {
170
 
171
				e.stopEvent() ;
104 jpm 172
				MenuLiaisonVue mlv = new MenuLiaisonVue(iMediateur,liaison) ;
62 jpm 173
				mlv.showAt(e.getXY()) ;
174
 
175
			}
176
 
155 aurelien 177
		}) ;
3 aperonnet 178
	}
179
 
5 aperonnet 180
	/**
181
	 * Configure le drag 'n drop pour la liste
182
	 */
183
	private void configDragAndDrop()
3 aperonnet 184
	{
185
		// on choisit le texte qui sera affiché lors d'un drag 'n drop
186
		setDragDropText("Faites glisser la selection d'observations sur une image pour les lier") ;
187
 
188
		//On active le drag 'n drop
189
		this.setEnableDragDrop(true);
190
 
191
		// on fabrique la nouvelle configuration
192
		// les éléments sur lesquels on fait du drag 'n drop doivent tous avoir le même ddGroup
193
		this.setDdGroup("DragGroupName");
194
		DropTargetConfig dtc = new DropTargetConfig();
195
		dtc.setdDdGroup("DragGroupName");
196
 
197
		//La drop target permet de gérer l'évenement onDrop sur l'élement courant
198
		@SuppressWarnings("unused")
199
		DropTarget tg = new DropTarget(this, dtc)
200
		{
62 jpm 201
			public boolean notifyDrop(DragSource source, EventObject e, DragData data){
3 aperonnet 202
 
203
				// si on reçoit des données provenant d'une grille
204
				if(data instanceof GridDragData)
205
		    	  {
206
					// on la convertit
207
		    		  	GridDragData gdd = (GridDragData)data ;
208
		    		  	// et on vérifie que les données ne viennent pas de l'élément courant
209
		    		  	if(gdd.getGrid().getId().equals("x-view-mini-obs"))
210
		    		  	{
211
		    		  		return false ;
212
		    		  	}
213
		    		  	else
214
		    		  	{
215
		    		  		// on appelle le médiateur
216
		    		  		return iMediateur.lierImagesDD(source, e, data) ;
217
		    		  	}
218
		    	  }
219
				return false ;
220
			}
221
 
222
			public String notifyOver(DragSource source, EventObject e, DragData data){
223
			    return "x-dd-drop-ok";
224
			}
225
		};
226
 
227
	}
228
 
5 aperonnet 229
	/**
230
	 * Méthode héritée de l'interface rafraichissable
231
	 */
3 aperonnet 232
	public void rafraichir(Object nouvelleDonnees,
233
			boolean repandreRaffraichissement) {
234
 
61 jpm 235
		if(nouvelleDonnees instanceof ListeObservation)
236
		{
63 jpm 237
			if(this.getView() != null)
61 jpm 238
			{
63 jpm 239
				ListeObservation data = (ListeObservation)nouvelleDonnees ;
155 aurelien 240
				String[][] listeObs = new String[data.size()][4] ;
63 jpm 241
				int i = 0 ;
61 jpm 242
 
63 jpm 243
				for (Iterator it = data.keySet().iterator(); it.hasNext();)
244
				{
245
 
246
					Observation obs=(Observation) data.get(it.next());
247
 
248
					listeObs[i][0] = obs.getNumeroOrdre();
249
					listeObs[i][1] = obs.getNomSaisi();
250
					listeObs[i][2] = obs.getDate() ;
155 aurelien 251
					listeObs[i][3] = obs.getLocalite();
61 jpm 252
 
63 jpm 253
					i++ ;
254
				}
255
 
155 aurelien 256
				store = new SimpleStore(new String[]{"id_obs","plante","date","lieu"}, listeObs);
63 jpm 257
				store.load();
258
				this.reconfigure(store, colModel) ;
61 jpm 259
			}
63 jpm 260
			else
261
			{
262
				addListener(new ContainerListenerAdapter() {
263
 
264
					public void onShow(Component c)
265
					{
266
						obtenirMiniListeObservations() ;
267
					}
268
 
173 aurelien 269
					public void onAfterLayout(Container c)
270
					{
271
						obtenirMiniListeObservations() ;
272
					}
273
 
63 jpm 274
				}) ;
275
			}
61 jpm 276
 
277
		}
278
 
99 jpm 279
		deMasquerChargement() ;
280
 
3 aperonnet 281
	}
282
 
61 jpm 283
	private void obtenirMiniListeObservations()
284
	{
285
		iMediateur.obtenirMiniListeObservations(this) ;
286
	}
287
 
5 aperonnet 288
	/**
289
	 * Renvoie le faux set de données pour le store
290
	 * @return un tableau à deux colonnes int - String
291
	 */
292
	private Object[][] getObs() {
3 aperonnet 293
	         return new Object[][]{
61 jpm 294
 
3 aperonnet 295
	         } ;
296
	 }
61 jpm 297
 
62 jpm 298
	public Store getStore()
299
	{
300
		return store ;
301
	}
61 jpm 302
 
99 jpm 303
	/*public BarrePaginationVue getBarrePagination()
304
	{
305
		return pgBar ;
306
	}*/
62 jpm 307
 
99 jpm 308
	private void setModification(String mode)
309
	{
310
		if(mode.equals("true")) {
3 aperonnet 311
 
99 jpm 312
			liaison = true ;
313
			selecteurMode.removeClass("x-selec-consult") ;
314
			selecteurMode.setCls("x-selec-liaison") ;
315
		}
316
		else
317
		{
318
			liaison = false ;
319
			selecteurMode.removeClass("x-selec-liaison") ;
320
			selecteurMode.setCls("x-selec-consult") ;
321
 
322
		}
323
 
324
		masquerChargement() ;
325
		store.removeAll() ;
326
		iMediateur.changerModeLiaison(liaison) ;
327
 
328
	}
329
 
330
	public boolean getMode() {
331
		return liaison ;
332
	}
333
 
334
	/**
335
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
336
	 */
337
	public void masquerChargement()
338
	{
339
			ExtElement masked = Ext.get(getId()) ;
340
 
341
			if (masked!=null) {
342
				masked.mask("Chargement") ;
343
			}
344
	}
345
 
346
	/**
347
	 * Recherche l'élement actuellement affiché et affiche son message de chargement
348
	 */
349
	public void deMasquerChargement()
350
	{
351
			ExtElement masked = Ext.get(getId()) ;
352
 
353
			if (masked!=null) {
354
				masked.unmask() ;
355
			}
356
	}
357
 
104 jpm 358
	public String getIdSelectionnees() {
359
 
360
		Record[] sels = getSelectionModel().getSelections() ;
361
		String id = sels[0].getAsString("id_obs") ;
362
 
363
		return id ;
364
 
365
	}
99 jpm 366
 
104 jpm 367
	public void supprimerLiaison() {
368
 
369
 
370
		Record[] rdObs = getSelectionModel().getSelections() ;
371
 
372
		for(int i = 0 ; i < rdObs.length ; i++) {
373
 
374
			getStore().remove(rdObs[i]) ;
375
			this.getView().refresh() ;
376
 
377
		}
378
 
379
	}
380
 
155 aurelien 381
	public void redimensionner() {
382
		if(getView() != null) {
383
 
384
				this.setWidth("100%");
385
				getView().setForceFit(true);
386
				doLayout();
387
		}
388
		else {
389
			Window.alert("null");
390
		}
391
	}
3 aperonnet 392
}