Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
150 gduche 1
package org.tela_botanica.client.vues;
2
 
189 gduche 3
 
4
 
197 gduche 5
import java.util.HashMap;
6
import java.util.Iterator;
189 gduche 7
 
197 gduche 8
 
150 gduche 9
import org.tela_botanica.client.RegistreId;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.Personne;
227 aurelien 12
import org.tela_botanica.client.modeles.PersonneListe;
150 gduche 13
import org.tela_botanica.client.modeles.StructureListe;
14
 
15
import com.extjs.gxt.ui.client.Registry;
16
import com.extjs.gxt.ui.client.Style.Scroll;
197 gduche 17
import com.extjs.gxt.ui.client.event.ComponentEvent;
18
import com.extjs.gxt.ui.client.event.KeyListener;
150 gduche 19
import com.extjs.gxt.ui.client.util.Params;
215 aurelien 20
import com.extjs.gxt.ui.client.widget.ContentPanel;
150 gduche 21
import com.extjs.gxt.ui.client.widget.Html;
197 gduche 22
import com.extjs.gxt.ui.client.widget.LayoutContainer;
217 aurelien 23
import com.extjs.gxt.ui.client.widget.PagingToolBar;
189 gduche 24
import com.extjs.gxt.ui.client.widget.TabItem;
25
import com.extjs.gxt.ui.client.widget.TabPanel;
200 gduche 26
import com.extjs.gxt.ui.client.widget.form.Field;
197 gduche 27
import com.extjs.gxt.ui.client.widget.form.FieldSet;
200 gduche 28
import com.extjs.gxt.ui.client.widget.form.TextArea;
197 gduche 29
import com.extjs.gxt.ui.client.widget.form.TextField;
215 aurelien 30
import com.extjs.gxt.ui.client.widget.layout.CenterLayout;
150 gduche 31
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
197 gduche 32
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
33
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
34
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
217 aurelien 35
import com.extjs.gxt.ui.client.widget.toolbar.ToolBar;
36
import com.extjs.gxt.ui.client.widget.toolbar.ToolItem;
197 gduche 37
import com.google.gwt.dom.client.LinkElement;
38
import com.google.gwt.dom.client.NodeList;
39
import com.google.gwt.user.client.Window;
189 gduche 40
import com.google.gwt.user.client.ui.Hyperlink;
197 gduche 41
import com.google.gwt.user.client.ui.Image;
189 gduche 42
import com.google.gwt.user.client.ui.Label;
215 aurelien 43
import com.google.gwt.user.client.ui.Panel;
44
import com.google.gwt.user.client.ui.SimplePanel;
200 gduche 45
import com.google.gwt.user.client.ui.TextBox;
189 gduche 46
import com.google.gwt.user.client.ui.Widget;
47
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
150 gduche 48
 
189 gduche 49
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable {
150 gduche 50
 
197 gduche 51
	// Le panneau détail se compose de formulaires tabulés
189 gduche 52
 
197 gduche 53
	// Onglet 1 : identite & contact
215 aurelien 54
	private TabItem tabIdentite;
55
 
56
	private ContentPanel panneauIdentite;
57
	private ContentPanel panneauImage;
58
 
197 gduche 59
	private FieldSet fsIdentite;
60
	private FieldSet fsContact;
189 gduche 61
 
200 gduche 62
	// Onglet 2 : Adresses
63
	private TabItem tabAdresse;
64
	private FieldSet fsAdressePerso;
198 gduche 65
		// contient : adresse perso / adresse pro
66
 
215 aurelien 67
	// Onglet 3 : Informations naturalistes
68
	private TabItem tabInfosNat;
198 gduche 69
 
70
	// > Se baser sur la présentation thunderBird
71
 
72
 
150 gduche 73
	public PersonneDetailPanneauVue() {
189 gduche 74
 
198 gduche 75
		//Constructeur de la classe
150 gduche 76
		Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
189 gduche 77
		setLayout(new FitLayout());
150 gduche 78
 
215 aurelien 79
		tabIdentite = new TabItem("Identité");
80
		TableLayout tLayout = new TableLayout(2);
81
		tabIdentite.setLayout(tLayout);
82
		tabIdentite.setScrollMode(Scroll.AUTO);
189 gduche 83
 
215 aurelien 84
		panneauIdentite = new ContentPanel();
85
		panneauIdentite.setWidth("400px");
86
		panneauIdentite.setHeaderVisible(false);
87
		panneauIdentite.setBorders(false);
88
		panneauIdentite.setBodyBorder(false);
89
		panneauImage = new ContentPanel();
90
		panneauImage.setWidth("350px");
91
		panneauImage.setBorders(false);
92
		panneauImage.setBodyBorder(false);
93
		panneauImage.setHeaderVisible(false);
94
		panneauImage.setStyleName("conteneur-image-centre");
200 gduche 95
 
215 aurelien 96
		tabIdentite.add(panneauIdentite);
97
		tabIdentite.add(panneauImage);
98
 
197 gduche 99
		fsIdentite = new FieldSet();
100
		fsIdentite.setLayout(new FormLayout());
101
 
102
 
103
		fsContact = new FieldSet();
104
		fsContact.setLayout(new FormLayout());
105
 
215 aurelien 106
		this.add(tabIdentite);
197 gduche 107
 
200 gduche 108
		//Onglet Adresse:
215 aurelien 109
		tabAdresse = new TabItem("Adresse");
200 gduche 110
		fsAdressePerso = new FieldSet();
111
		fsAdressePerso.setLayout(new FormLayout());
112
 
215 aurelien 113
		this.add(tabAdresse);
200 gduche 114
 
215 aurelien 115
		//Onglet info naturalistes
116
		tabInfosNat = new TabItem("Informations naturalistes");
200 gduche 117
 
215 aurelien 118
		this.add(tabInfosNat);
198 gduche 119
 
150 gduche 120
	}
121
 
122
	public void afficherDetailPersonne(Personne personne) {
123
		if (personne != null) {
198 gduche 124
 
125
 
126
			//MAJ Identité : Configurer les fieldSet
215 aurelien 127
			panneauIdentite.removeAll();
128
			panneauImage.removeAll();
150 gduche 129
 
197 gduche 130
			fsIdentite.setHeading("Identité");
131
			fsIdentite.setWidth("350px");
183 gduche 132
 
197 gduche 133
			fsContact.setHeading("Contact");
134
			fsContact.setWidth("350px");
183 gduche 135
 
197 gduche 136
 
215 aurelien 137
			panneauIdentite.add(fsIdentite);
138
 
198 gduche 139
			//La personne peut avoir un logo
197 gduche 140
			String logoUrl = (String) personne.obtenirValeurChamp("truk_logo");
198 gduche 141
 
197 gduche 142
			if ((logoUrl!=null)&&(!logoUrl.trim().equals("")))	{
198 gduche 143
				//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité
197 gduche 144
				Image img = new Image();
145
				img.setUrl(logoUrl);
200 gduche 146
				img.setStyleName("logo-personne");
215 aurelien 147
 
148
				panneauImage.add(img);
189 gduche 149
			}
150 gduche 150
 
215 aurelien 151
			panneauIdentite.add(fsContact);
183 gduche 152
 
197 gduche 153
			fsIdentite.removeAll();
154
			fsContact.removeAll();
215 aurelien 155
			fsAdressePerso.removeAll();
197 gduche 156
			//Ajout des champs Identité
157
 
158
 
159
 
160
			// TODO: projet
161
 
162
			// nom complet
163
			Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");
164
			ajouterTextFieldNonEditable(fsIdentite,"Nom", nomComplet);
165
 
166
 
167
			// TODO : nom autre
168
 
169
			// abreviation
170
			Object abreviation = personne.obtenirValeurChamp("abreviation");
171
			ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation);
172
 
173
			// date naissance
174
			Object dateNaissance = personne.obtenirValeurChamp("date_naissance");
175
			ajouterTextFieldNonEditable(fsIdentite, "Date de naissance", dateNaissance);
176
 
177
			// lieu naissance
178
			Object lieuNaissance = personne.obtenirValeurChamp("lieu_naissance");
179
			ajouterTextFieldNonEditable(fsIdentite, "Lieu de naissance", lieuNaissance);
180
 
181
			// date deces
182
			Object dateDeces = personne.obtenirValeurChamp("date_deces");
183
			ajouterTextFieldNonEditable(fsIdentite, "Date de décès", dateDeces);
184
 
185
			// lieu deces
186
			Object lieuDeces = personne.obtenirValeurChamp("lieu_deces");
187
			ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces);
188
 
200 gduche 189
			//Description
190
			String description = (String) personne.obtenirValeurChamp("description");
191
			if ((description!=null)&&(!description.trim().equals("")))	{
192
				TextArea txtDescription = new TextArea();
193
				txtDescription.setFieldLabel("Description");
194
				txtDescription.setValue(description);
195
 
196
				rendreNonEditable(txtDescription);
197
 
198
				fsIdentite.add(txtDescription);
199
			}
197 gduche 200
 
201
 
202
			//CONTACT
203
 
215 aurelien 204
			// Courriel est un champ TRUK
198 gduche 205
			// on doit afficher N entrées
215 aurelien 206
			// Voir si le | (pipe) est bien le bon séparateur
207
			String courriels =  (String) personne.obtenirValeurChamp("truk_courriel");
208
			String[] tabCourriel = courriels.split("\\|");
209
			Html intituleHTML = new Html("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b>");
210
			fsContact.add(intituleHTML);
211
 
212
			for(int i = 0 ; i < tabCourriel.length ; i++) {
213
				String courriel = tabCourriel[i];
214
				Hyperlink lnkCourriel = new Hyperlink();
215
				lnkCourriel.setHTML("<a href=\"mailto:" + courriel + "\">" + courriel + "</a>");
216
				fsContact.add(lnkCourriel);
217
			}
197 gduche 218
 
215 aurelien 219
			panneauIdentite.add(fsContact);
197 gduche 220
 
198 gduche 221
 
215 aurelien 222
			fsAdressePerso.setHeading("Adresse personnelle");
223
 
198 gduche 224
			/*
225
			 * Adresses :
215 aurelien 226
			 * */
197 gduche 227
			String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
215 aurelien 228
			ajouterTextFieldNonEditable(fsAdressePerso, "Adresse", adresse01);
197 gduche 229
 
230
 
231
			String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
215 aurelien 232
			ajouterTextFieldNonEditable(fsAdressePerso, "", adresse02);
197 gduche 233
 
234
			String boitePostale = (String) personne.obtenirValeurChamp("bp");
215 aurelien 235
			ajouterTextFieldNonEditable(fsAdressePerso, "Boite Postale", boitePostale);
197 gduche 236
 
237
			String codePostal = (String) personne.obtenirValeurChamp("code_postal");
215 aurelien 238
			ajouterTextFieldNonEditable(fsAdressePerso, "Code postal", codePostal);
197 gduche 239
 
240
			String ville = (String) personne.obtenirValeurChamp("ville");
215 aurelien 241
			ajouterTextFieldNonEditable(fsAdressePerso, "Ville", ville);
197 gduche 242
 
243
			String region = (String) personne.obtenirValeurChamp("region");
215 aurelien 244
			ajouterTextFieldNonEditable(fsAdressePerso, "Région", region);
197 gduche 245
 
246
			String pays = (String) personne.obtenirValeurChamp("pays");
215 aurelien 247
			ajouterTextFieldNonEditable(fsAdressePerso, "Pays", pays);
197 gduche 248
 
215 aurelien 249
			fsAdressePerso.addText("<br >");
250
			fsAdressePerso.setWidth("350px");
197 gduche 251
 
215 aurelien 252
			tabAdresse.add(fsAdressePerso);
253
			tabAdresse.setScrollMode(Scroll.AUTO);
254
			/*
255
			*/
256
 
150 gduche 257
			layout();
197 gduche 258
		}
259
	}
260
 
200 gduche 261
	private void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue)	{
197 gduche 262
 
263
		if ((tfValue!=null)&&(!tfValue.toString().trim().equals("")))	{
189 gduche 264
 
197 gduche 265
			TextField tf = new TextField();
266
 
267
			tf.setFieldLabel(tfLabel);
268
			if ((tfLabel==null)||("".equals(tfLabel)))	{
269
				tf.setHideLabel(true);
270
				tf.setStyleAttribute("margin", "0 0 0 105px");
271
			}
272
			tf.setValue(tfValue);
273
 
274
			// Non éditable : on empêche l'évènement par défaut
200 gduche 275
			rendreNonEditable(tf);
276
 
277
			//Ajout au fieldSet
278
			fs.add(tf);
279
		}
280
	}
281
 
282
	private void rendreNonEditable(Field field)	{
197 gduche 283
 
200 gduche 284
		field.addKeyListener(new KeyListener()	{
197 gduche 285
			public void componentKeyPress(ComponentEvent ev)	{
286
				ev.stopEvent();
287
			}
288
			});
200 gduche 289
	}
197 gduche 290
 
291
 
183 gduche 292
	public void rafraichir(Object nouvelleDonnees) {
227 aurelien 293
 
294
		// Si on a reçu une personne on en affiche les détails
183 gduche 295
		if (nouvelleDonnees instanceof Personne) {
296
			afficherDetailPersonne((Personne) nouvelleDonnees);
227 aurelien 297
		}
150 gduche 298
	}
299
 
197 gduche 300
}