Subversion Repositories eFlore/Applications.coel

Rev

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