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;
|
|
|
12 |
import org.tela_botanica.client.modeles.StructureListe;
|
|
|
13 |
|
|
|
14 |
import com.extjs.gxt.ui.client.Registry;
|
|
|
15 |
import com.extjs.gxt.ui.client.Style.Scroll;
|
197 |
gduche |
16 |
import com.extjs.gxt.ui.client.event.ComponentEvent;
|
|
|
17 |
import com.extjs.gxt.ui.client.event.KeyListener;
|
150 |
gduche |
18 |
import com.extjs.gxt.ui.client.util.Params;
|
|
|
19 |
import com.extjs.gxt.ui.client.widget.Html;
|
197 |
gduche |
20 |
import com.extjs.gxt.ui.client.widget.LayoutContainer;
|
189 |
gduche |
21 |
import com.extjs.gxt.ui.client.widget.TabItem;
|
|
|
22 |
import com.extjs.gxt.ui.client.widget.TabPanel;
|
197 |
gduche |
23 |
import com.extjs.gxt.ui.client.widget.form.FieldSet;
|
|
|
24 |
import com.extjs.gxt.ui.client.widget.form.TextField;
|
150 |
gduche |
25 |
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
|
197 |
gduche |
26 |
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
|
|
|
27 |
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
|
|
|
28 |
import com.extjs.gxt.ui.client.widget.layout.TableLayout;
|
|
|
29 |
import com.google.gwt.dom.client.LinkElement;
|
|
|
30 |
import com.google.gwt.dom.client.NodeList;
|
|
|
31 |
import com.google.gwt.user.client.Window;
|
189 |
gduche |
32 |
import com.google.gwt.user.client.ui.Hyperlink;
|
197 |
gduche |
33 |
import com.google.gwt.user.client.ui.Image;
|
189 |
gduche |
34 |
import com.google.gwt.user.client.ui.Label;
|
|
|
35 |
import com.google.gwt.user.client.ui.Widget;
|
|
|
36 |
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter;
|
150 |
gduche |
37 |
|
189 |
gduche |
38 |
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable {
|
150 |
gduche |
39 |
|
197 |
gduche |
40 |
// Le panneau détail se compose de formulaires tabulés
|
189 |
gduche |
41 |
|
197 |
gduche |
42 |
// Onglet 1 : identite & contact
|
|
|
43 |
private TabItem identite;
|
|
|
44 |
private FieldSet fsIdentite;
|
|
|
45 |
private FieldSet fsContact;
|
189 |
gduche |
46 |
|
198 |
gduche |
47 |
//A ajouter :
|
|
|
48 |
// Onglet Adresse
|
|
|
49 |
// contient : adresse perso / adresse pro
|
|
|
50 |
|
|
|
51 |
//Onglet Info Naturaliste
|
|
|
52 |
|
|
|
53 |
// > Se baser sur la présentation thunderBird
|
|
|
54 |
|
|
|
55 |
|
150 |
gduche |
56 |
public PersonneDetailPanneauVue() {
|
189 |
gduche |
57 |
|
198 |
gduche |
58 |
//Constructeur de la classe
|
150 |
gduche |
59 |
Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
|
189 |
gduche |
60 |
setLayout(new FitLayout());
|
150 |
gduche |
61 |
|
197 |
gduche |
62 |
identite = new TabItem("Identité");
|
|
|
63 |
identite.setLayout(new TableLayout(2));
|
|
|
64 |
identite.setScrollMode(Scroll.AUTO);
|
189 |
gduche |
65 |
|
197 |
gduche |
66 |
fsIdentite = new FieldSet();
|
|
|
67 |
fsIdentite.setLayout(new FormLayout());
|
|
|
68 |
|
|
|
69 |
|
|
|
70 |
fsContact = new FieldSet();
|
|
|
71 |
fsContact.setLayout(new FormLayout());
|
|
|
72 |
|
|
|
73 |
this.add(identite);
|
|
|
74 |
|
198 |
gduche |
75 |
//TODO : ajouter adresse
|
|
|
76 |
//TODO : ajouter info naturaliste
|
|
|
77 |
|
150 |
gduche |
78 |
}
|
|
|
79 |
|
|
|
80 |
public void afficherDetailPersonne(Personne personne) {
|
|
|
81 |
if (personne != null) {
|
198 |
gduche |
82 |
|
|
|
83 |
|
|
|
84 |
//MAJ Identité : Configurer les fieldSet
|
197 |
gduche |
85 |
identite.removeAll();
|
150 |
gduche |
86 |
|
197 |
gduche |
87 |
fsIdentite.setHeading("Identité");
|
|
|
88 |
fsIdentite.setWidth("350px");
|
183 |
gduche |
89 |
|
197 |
gduche |
90 |
fsContact.setHeading("Contact");
|
|
|
91 |
fsContact.setWidth("350px");
|
183 |
gduche |
92 |
|
197 |
gduche |
93 |
identite.add(fsIdentite);
|
|
|
94 |
|
198 |
gduche |
95 |
//La personne peut avoir un logo
|
197 |
gduche |
96 |
String logoUrl = (String) personne.obtenirValeurChamp("truk_logo");
|
198 |
gduche |
97 |
|
197 |
gduche |
98 |
if ((logoUrl!=null)&&(!logoUrl.trim().equals(""))) {
|
198 |
gduche |
99 |
//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité
|
197 |
gduche |
100 |
Image img = new Image();
|
|
|
101 |
img.setUrl(logoUrl);
|
|
|
102 |
img.setTitle("logo-personne");
|
198 |
gduche |
103 |
|
|
|
104 |
// FIXME : pour avoir un affichage correct, je force la redimension à 300px. Idéalement, ce serait un max-height qu'il faudrait.
|
|
|
105 |
// FIXME : L'image devrait se mettre sur deux lignes au lieu d'une, ca décale tout ...
|
|
|
106 |
img.setHeight("300px");
|
|
|
107 |
|
197 |
gduche |
108 |
identite.add(img);
|
189 |
gduche |
109 |
|
197 |
gduche |
110 |
} else {
|
198 |
gduche |
111 |
//Sinon, on doit mettre une case vide pour garder une présentation en colonne de fsIdentite & fsContact
|
197 |
gduche |
112 |
identite.add(new Label());
|
189 |
gduche |
113 |
}
|
150 |
gduche |
114 |
|
197 |
gduche |
115 |
identite.add(fsContact);
|
198 |
gduche |
116 |
|
183 |
gduche |
117 |
|
|
|
118 |
|
189 |
gduche |
119 |
|
197 |
gduche |
120 |
fsIdentite.removeAll();
|
|
|
121 |
fsContact.removeAll();
|
|
|
122 |
//Ajout des champs Identité
|
|
|
123 |
|
|
|
124 |
|
|
|
125 |
|
|
|
126 |
// TODO: projet
|
|
|
127 |
|
|
|
128 |
// nom complet
|
|
|
129 |
Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet");
|
|
|
130 |
ajouterTextFieldNonEditable(fsIdentite,"Nom", nomComplet);
|
|
|
131 |
|
|
|
132 |
|
|
|
133 |
// TODO : nom autre
|
|
|
134 |
|
|
|
135 |
// abreviation
|
|
|
136 |
Object abreviation = personne.obtenirValeurChamp("abreviation");
|
|
|
137 |
ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation);
|
|
|
138 |
|
|
|
139 |
// date naissance
|
|
|
140 |
Object dateNaissance = personne.obtenirValeurChamp("date_naissance");
|
|
|
141 |
ajouterTextFieldNonEditable(fsIdentite, "Date de naissance", dateNaissance);
|
|
|
142 |
|
|
|
143 |
// lieu naissance
|
|
|
144 |
Object lieuNaissance = personne.obtenirValeurChamp("lieu_naissance");
|
|
|
145 |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de naissance", lieuNaissance);
|
|
|
146 |
|
|
|
147 |
// date deces
|
|
|
148 |
Object dateDeces = personne.obtenirValeurChamp("date_deces");
|
|
|
149 |
ajouterTextFieldNonEditable(fsIdentite, "Date de décès", dateDeces);
|
|
|
150 |
|
|
|
151 |
// lieu deces
|
|
|
152 |
Object lieuDeces = personne.obtenirValeurChamp("lieu_deces");
|
|
|
153 |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces);
|
|
|
154 |
|
|
|
155 |
|
|
|
156 |
|
|
|
157 |
//CONTACT
|
|
|
158 |
|
198 |
gduche |
159 |
//FIXME : courriel est un champ TRUK
|
|
|
160 |
// on doit afficher N entrées
|
197 |
gduche |
161 |
String courriel = (String) personne.obtenirValeurChamp("truk_courriel");
|
|
|
162 |
Hyperlink lnkCourriel = new Hyperlink();
|
|
|
163 |
lnkCourriel.setHTML("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b><a href=\"mailto:" + courriel + "\">" + courriel + "</a>");
|
|
|
164 |
fsContact.add(lnkCourriel);
|
|
|
165 |
|
|
|
166 |
fsContact.addText("<br >");
|
|
|
167 |
|
198 |
gduche |
168 |
|
|
|
169 |
/*
|
|
|
170 |
* Adresses :
|
197 |
gduche |
171 |
String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
|
|
|
172 |
ajouterTextFieldNonEditable(fsContact, "Adresse", adresse01);
|
|
|
173 |
|
|
|
174 |
|
|
|
175 |
String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
|
|
|
176 |
ajouterTextFieldNonEditable(fsContact, "", adresse02);
|
|
|
177 |
|
|
|
178 |
String boitePostale = (String) personne.obtenirValeurChamp("bp");
|
|
|
179 |
ajouterTextFieldNonEditable(fsContact, "Boite Postale", boitePostale);
|
|
|
180 |
|
|
|
181 |
String codePostal = (String) personne.obtenirValeurChamp("code_postal");
|
|
|
182 |
ajouterTextFieldNonEditable(fsContact, "Code postal", codePostal);
|
|
|
183 |
|
|
|
184 |
String ville = (String) personne.obtenirValeurChamp("ville");
|
|
|
185 |
ajouterTextFieldNonEditable(fsContact, "Ville", ville);
|
|
|
186 |
|
|
|
187 |
String region = (String) personne.obtenirValeurChamp("region");
|
|
|
188 |
ajouterTextFieldNonEditable(fsContact, "Région", region);
|
|
|
189 |
|
|
|
190 |
String pays = (String) personne.obtenirValeurChamp("pays");
|
|
|
191 |
ajouterTextFieldNonEditable(fsContact, "Pays", pays);
|
|
|
192 |
|
198 |
gduche |
193 |
fsContact.addText("<br >"); */
|
197 |
gduche |
194 |
|
|
|
195 |
|
|
|
196 |
|
150 |
gduche |
197 |
layout();
|
197 |
gduche |
198 |
}
|
|
|
199 |
}
|
|
|
200 |
|
|
|
201 |
public void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue) {
|
|
|
202 |
|
|
|
203 |
if ((tfValue!=null)&&(!tfValue.toString().trim().equals(""))) {
|
189 |
gduche |
204 |
|
197 |
gduche |
205 |
TextField tf = new TextField();
|
|
|
206 |
|
|
|
207 |
tf.setFieldLabel(tfLabel);
|
|
|
208 |
if ((tfLabel==null)||("".equals(tfLabel))) {
|
|
|
209 |
tf.setHideLabel(true);
|
|
|
210 |
tf.setStyleAttribute("margin", "0 0 0 105px");
|
|
|
211 |
}
|
|
|
212 |
tf.setValue(tfValue);
|
|
|
213 |
|
|
|
214 |
// Non éditable : on empêche l'évènement par défaut
|
|
|
215 |
tf.addKeyListener(new KeyListener() {
|
|
|
216 |
|
|
|
217 |
public void componentKeyPress(ComponentEvent ev) {
|
|
|
218 |
ev.stopEvent();
|
|
|
219 |
}
|
|
|
220 |
});
|
|
|
221 |
|
|
|
222 |
//Ajout au fieldSet
|
|
|
223 |
fs.add(tf);
|
150 |
gduche |
224 |
}
|
|
|
225 |
}
|
197 |
gduche |
226 |
|
183 |
gduche |
227 |
public void rafraichir(Object nouvelleDonnees) {
|
|
|
228 |
if (nouvelleDonnees instanceof Personne) {
|
|
|
229 |
afficherDetailPersonne((Personne) nouvelleDonnees);
|
150 |
gduche |
230 |
} else if (nouvelleDonnees instanceof StructureListe) {
|
|
|
231 |
StructureListe listeInstitutions = (StructureListe) nouvelleDonnees;
|
|
|
232 |
// Test pour savoir si la liste contient des éléments
|
|
|
233 |
if (listeInstitutions.size() == 0) {
|
183 |
gduche |
234 |
afficherDetailPersonne(null);
|
150 |
gduche |
235 |
}
|
183 |
gduche |
236 |
}
|
150 |
gduche |
237 |
}
|
|
|
238 |
|
197 |
gduche |
239 |
}
|