Subversion Repositories eFlore/Applications.cel

Rev

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

Rev Author Line No. Line
247 aurelien 1
package org.tela_botanica.client.vues.observation;
2
 
3
import org.tela_botanica.client.interfaces.Rafraichissable;
4
import org.tela_botanica.client.modeles.EntiteGeographiqueObservation;
5
import org.tela_botanica.client.observation.ObservationMediateur;
6
 
7
import com.google.gwt.maps.client.InfoWindow;
8
import com.google.gwt.maps.client.InfoWindowContent;
9
import com.google.gwt.maps.client.MapType;
10
import com.google.gwt.maps.client.MapWidget;
11
import com.google.gwt.maps.client.control.LargeMapControl;
264 aurelien 12
import com.google.gwt.maps.client.event.MapZoomEndHandler;
247 aurelien 13
import com.google.gwt.maps.client.event.MarkerClickHandler;
14
import com.google.gwt.maps.client.event.MarkerDragEndHandler;
15
import com.google.gwt.maps.client.event.MarkerDragStartHandler;
16
import com.google.gwt.maps.client.event.MarkerDragEndHandler.MarkerDragEndEvent;
17
import com.google.gwt.maps.client.event.MarkerDragStartHandler.MarkerDragStartEvent;
18
import com.google.gwt.maps.client.geom.LatLng;
19
import com.google.gwt.maps.client.overlay.Marker;
20
import com.google.gwt.maps.client.overlay.MarkerOptions;
21
import com.google.gwt.user.client.Window;
22
import com.google.gwt.user.client.ui.HTML;
23
import com.gwtext.client.core.EventCallback;
24
import com.gwtext.client.core.EventObject;
25
import com.gwtext.client.core.Ext;
26
import com.gwtext.client.core.ExtElement;
27
import com.gwtext.client.core.RegionPosition;
28
import com.gwtext.client.widgets.Component;
29
import com.gwtext.client.widgets.Container;
30
import com.gwtext.client.widgets.Panel;
31
import com.gwtext.client.widgets.event.ContainerListener;
32
import com.gwtext.client.widgets.event.ContainerListenerAdapter;
33
import com.gwtext.client.widgets.form.Label;
34
import com.gwtext.client.widgets.layout.BorderLayout;
35
import com.gwtext.client.widgets.layout.BorderLayoutData;
36
import com.gwtext.client.widgets.layout.FitLayout;
37
import com.gwtext.client.widgets.layout.RowLayout;
38
import com.gwtext.client.widgets.layout.RowLayoutData;
39
import com.gwtext.client.widgets.map.LatLonPoint;
40
 
41
public class CartographieObservationVue extends Panel implements Rafraichissable {
42
 
43
	private String id = "cartographie_observation";
44
 
45
	private ObservationMediateur oMediateur = null;
46
 
47
	Panel panneauCarto = null;
48
	private MapWidget map;
49
 
50
	private boolean carteAjoutee = false;
51
	private boolean requeteEnCours = false;
52
 
53
	String valeurCommune = "Bourges";
54
	LatLng centreFrance = LatLng.newInstance(47.0504, 2.2347);
55
	LatLng pointCommune = centreFrance;
56
	String codeCommune = "";
57
 
264 aurelien 58
	int niveauZoom = 13;
247 aurelien 59
 
60
	Label panneauExplication = new Label(
61
			"Précisez le lieu de votre observation et cliquez sur OK. Les coordonnées sont données en degrés décimaux, comptés positivement vers le Nord pour la latitude, et vers l'Est pour la longitude");
62
 
63
	private InfoWindow info;
64
 
65
	public CartographieObservationVue(ObservationMediateur om) {
66
		oMediateur = om;
67
 
68
		setTitle("Carto");
69
		setAutoWidth(true);
70
		setPaddings(10);
71
 
72
		panneauCarto = new Panel();
73
		panneauCarto.setLayout(new FitLayout());
74
 
75
		setLayout(new RowLayout());
76
 
77
		//initialiserCarte();
78
 
79
		add(panneauExplication, new RowLayoutData(12));
80
		add(panneauCarto, new RowLayoutData());
81
 
82
		addListener(new ContainerListenerAdapter() {
83
			public void onAfterLayout(Container c) {
84
 
85
				if(!carteAjoutee) {
86
					initialiserCarte();
87
				}
88
				recentrerCarte();
89
			}
90
		});
91
 
92
		panneauCarto.setAutoHeight(true);
93
	}
94
 
95
	public void masquerChargement(boolean masquer) {
96
		if (masquer) {
97
			ExtElement masked = Ext.get(id);
98
 
99
			if (masked != null) {
100
				masked.mask("Chargement");
101
			}
102
		} else {
103
			ExtElement masked = Ext.get(id);
104
 
105
			if (masked != null) {
106
				masked.unmask();
107
			}
108
		}
109
	}
110
 
111
	public void obtenirInfosCommunes(LatLng coord) {
112
		oMediateur.obtenirInformationCoord(this, coord);
113
	}
114
 
115
	public void mettreAJourInfos(final LatLng pointNouvelleCommune, String infosComplementaires, int zoom) {
116
 
117
		if (!carteAjoutee) {
118
			initialiserCarte();
119
		}
120
 
121
		pointCommune = pointNouvelleCommune;
122
		map.clearOverlays();
123
		Marker nmk = fabriquerMarqueur(pointCommune, infosComplementaires);
124
		map.addOverlay(nmk);
125
		afficherInfoMarker(nmk);
126
		recentrerCarte();
127
	}
128
 
129
	public void initialiserCarte() {
130
 
131
		map = new MapWidget(pointCommune, niveauZoom);
132
		panneauCarto.add(map);
133
		panneauCarto.doLayout();
134
		info = map.getInfoWindow();
135
		map.checkResizeAndCenter();
136
		map.setUIToDefault();
137
		map.addControl(new LargeMapControl());
138
		map.setCurrentMapType(MapType.getHybridMap());
139
		carteAjoutee = true;
140
		panneauCarto.doLayout();
264 aurelien 141
 
142
		map.addMapZoomEndHandler(new MapZoomEndHandler() {
143
 
144
			public void onZoomEnd(MapZoomEndEvent event) {
145
				niveauZoom = event.getNewZoomLevel();
146
			}
147
 
148
		});
247 aurelien 149
	}
150
 
151
	public void AfficherMessageAucuneInfos() {
152
		mettreAJourInfos(centreFrance,"", niveauZoom);
153
		Window.alert("Aucune information pour le nom donné");
154
	}
155
 
156
	public int getNiveauZoom() {
157
		return niveauZoom;
158
	}
159
 
160
	private void ajouterListenerBouton(String idBouton) {
161
		ExtElement bouton = Ext.get(idBouton);
162
 
163
		bouton.addListener("click", new EventCallback() {
164
 
165
			public void execute(EventObject e) {
264 aurelien 166
				EntiteGeographiqueObservation infosCommune = new EntiteGeographiqueObservation(codeCommune,valeurCommune,null,null);
247 aurelien 167
				infosCommune.setLat(pointCommune.getLatitude()+"");
168
				infosCommune.setLon(pointCommune.getLongitude()+"");
169
				oMediateur.rafraichirSaisieCommuneObservation(infosCommune);
170
			}
171
 
172
		});
173
	}
174
 
175
	public void rafraichir(Object nouvelleDonnees,
176
			boolean repandreRaffraichissement) {
177
		if (nouvelleDonnees instanceof String) {
178
 
179
			if(isVisible()) {
180
				Window.alert((String)nouvelleDonnees);
181
			}
182
		}
183
 
184
		if (nouvelleDonnees instanceof Object[]) {
185
 
186
			Object[] infos = (Object[]) nouvelleDonnees;
187
			LatLng coord = LatLng.newInstance((Double) infos[0],
188
					(Double) infos[1]);
189
 
190
			valeurCommune = (String)infos[3];
191
			codeCommune = (String)infos[2];
192
 
193
			mettreAJourInfos(coord, "", niveauZoom);
194
		}
195
 
196
		masquerChargement(false);
197
	}
198
 
199
	public Marker fabriquerMarqueur(LatLng pointMarqueur, final String texte) {
200
		// ajout de marqueurs déplacables, qui affichent une bulle d'information
201
		MarkerOptions options = MarkerOptions.newInstance();
202
		options.setDraggable(true);
203
		final Marker marker = new Marker(pointMarqueur, options);
204
 
205
		marker.addMarkerDragEndHandler(new MarkerDragEndHandler() {
206
			public void onDragEnd(MarkerDragEndEvent event) {
264 aurelien 207
				obtenirInfosCommunes(marker.getLatLng());
247 aurelien 208
			}
209
 
210
		});
211
 
212
		marker.addMarkerDragStartHandler(new MarkerDragStartHandler() {
213
			public void onDragStart(MarkerDragStartEvent event) {
214
				info.setVisible(false);
215
			}
216
		});
217
 
218
		marker.addMarkerClickHandler(new MarkerClickHandler() {
219
 
220
			public void onClick(MarkerClickEvent event) {
221
				if(info.isVisible()) {
222
					info.close();
223
				} else {
224
					afficherInfoMarker(marker);
225
				}
226
			}
227
		});
228
 
229
		return marker;
230
	}
231
 
232
	public void recentrerCarte() {
233
		//mettreAJourInfos(pointCommune,"", niveauZoom);
234
		map.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 24)+"px");
235
		panneauCarto.setSize((this.getWidth() - 12)+"px" , (this.getHeight() - 12)+"px");
236
		map.setCenter(pointCommune, niveauZoom);
237
		map.checkResizeAndCenter();
238
	}
239
 
240
	public boolean isCarteAjoutee() {
241
		return carteAjoutee;
242
	}
243
 
244
	public void afficherInfoMarker(Marker marker) {
245
		final String htmlBoutonOk = "<br /><button id=\"okMap\" class=\"x-btn-text\" type=\"button\">OK</button>";
246
 
247
		info.open(marker, new InfoWindowContent(""
248
				+valeurCommune+" ("+codeCommune+")<br />"
249
				+"longitude="
250
				+ marker.getLatLng().getLongitude() + "<br />latitude="
251
				+ marker.getLatLng().getLatitude() + htmlBoutonOk));
252
 
253
		ajouterListenerBouton("okMap");
254
	}
255
 
256
}