Subversion Repositories eFlore/Applications.cel

Rev

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