Subversion Repositories eFlore/Applications.cel

Rev

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

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