Subversion Repositories eFlore/Applications.cel

Rev

Rev 99 | Rev 104 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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