Subversion Repositories eFlore/Applications.cel

Rev

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