New file |
0,0 → 1,300 |
package org.tela_botanica.client.vues; |
|
|
|
import java.util.HashMap; |
import java.util.Iterator; |
|
|
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
import org.tela_botanica.client.modeles.Personne; |
import org.tela_botanica.client.modeles.StructureListe; |
|
import com.extjs.gxt.ui.client.Registry; |
import com.extjs.gxt.ui.client.Style.Scroll; |
import com.extjs.gxt.ui.client.event.ComponentEvent; |
import com.extjs.gxt.ui.client.event.KeyListener; |
import com.extjs.gxt.ui.client.util.Params; |
import com.extjs.gxt.ui.client.widget.ContentPanel; |
import com.extjs.gxt.ui.client.widget.Html; |
import com.extjs.gxt.ui.client.widget.LayoutContainer; |
import com.extjs.gxt.ui.client.widget.TabItem; |
import com.extjs.gxt.ui.client.widget.TabPanel; |
import com.extjs.gxt.ui.client.widget.form.Field; |
import com.extjs.gxt.ui.client.widget.form.FieldSet; |
import com.extjs.gxt.ui.client.widget.form.TextArea; |
import com.extjs.gxt.ui.client.widget.form.TextField; |
import com.extjs.gxt.ui.client.widget.layout.CenterLayout; |
import com.extjs.gxt.ui.client.widget.layout.FitLayout; |
import com.extjs.gxt.ui.client.widget.layout.FlowLayout; |
import com.extjs.gxt.ui.client.widget.layout.FormLayout; |
import com.extjs.gxt.ui.client.widget.layout.TableLayout; |
import com.google.gwt.dom.client.LinkElement; |
import com.google.gwt.dom.client.NodeList; |
import com.google.gwt.user.client.Window; |
import com.google.gwt.user.client.ui.Hyperlink; |
import com.google.gwt.user.client.ui.Image; |
import com.google.gwt.user.client.ui.Label; |
import com.google.gwt.user.client.ui.Panel; |
import com.google.gwt.user.client.ui.SimplePanel; |
import com.google.gwt.user.client.ui.TextBox; |
import com.google.gwt.user.client.ui.Widget; |
import com.google.gwt.user.client.ui.HTMLTable.CellFormatter; |
|
public class PersonneDetailPanneauVue extends TabPanel implements Rafraichissable { |
|
// Le panneau détail se compose de formulaires tabulés |
|
// Onglet 1 : identite & contact |
private TabItem tabIdentite; |
|
private ContentPanel panneauIdentite; |
private ContentPanel panneauImage; |
|
private FieldSet fsIdentite; |
private FieldSet fsContact; |
|
// Onglet 2 : Adresses |
private TabItem tabAdresse; |
private FieldSet fsAdressePerso; |
// contient : adresse perso / adresse pro |
|
// Onglet 3 : Informations naturalistes |
private TabItem tabInfosNat; |
|
// > Se baser sur la présentation thunderBird |
|
|
public PersonneDetailPanneauVue() { |
|
//Constructeur de la classe |
Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this); |
setLayout(new FitLayout()); |
|
tabIdentite = new TabItem("Identité"); |
TableLayout tLayout = new TableLayout(2); |
tabIdentite.setLayout(tLayout); |
tabIdentite.setScrollMode(Scroll.AUTO); |
|
panneauIdentite = new ContentPanel(); |
panneauIdentite.setWidth("400px"); |
panneauIdentite.setHeaderVisible(false); |
panneauIdentite.setBorders(false); |
panneauIdentite.setBodyBorder(false); |
panneauImage = new ContentPanel(); |
panneauImage.setWidth("350px"); |
panneauImage.setBorders(false); |
panneauImage.setBodyBorder(false); |
panneauImage.setHeaderVisible(false); |
panneauImage.setStyleName("conteneur-image-centre"); |
|
tabIdentite.add(panneauIdentite); |
tabIdentite.add(panneauImage); |
|
fsIdentite = new FieldSet(); |
fsIdentite.setLayout(new FormLayout()); |
|
|
fsContact = new FieldSet(); |
fsContact.setLayout(new FormLayout()); |
|
this.add(tabIdentite); |
|
//Onglet Adresse: |
tabAdresse = new TabItem("Adresse"); |
fsAdressePerso = new FieldSet(); |
fsAdressePerso.setLayout(new FormLayout()); |
|
this.add(tabAdresse); |
|
//Onglet info naturalistes |
tabInfosNat = new TabItem("Informations naturalistes"); |
|
this.add(tabInfosNat); |
|
} |
|
public void afficherDetailPersonne(Personne personne) { |
if (personne != null) { |
|
|
//MAJ Identité : Configurer les fieldSet |
panneauIdentite.removeAll(); |
panneauImage.removeAll(); |
|
fsIdentite.setHeading("Identité"); |
fsIdentite.setWidth("350px"); |
|
fsContact.setHeading("Contact"); |
fsContact.setWidth("350px"); |
|
|
panneauIdentite.add(fsIdentite); |
|
//La personne peut avoir un logo |
String logoUrl = (String) personne.obtenirValeurChamp("truk_logo"); |
|
if ((logoUrl!=null)&&(!logoUrl.trim().equals(""))) { |
//Si c'est le cas, on l'affiche sur la même ligne que fsIdentité |
Image img = new Image(); |
img.setUrl(logoUrl); |
img.setStyleName("logo-personne"); |
|
panneauImage.add(img); |
} |
|
panneauIdentite.add(fsContact); |
|
fsIdentite.removeAll(); |
fsContact.removeAll(); |
fsAdressePerso.removeAll(); |
//Ajout des champs Identité |
|
|
|
// TODO: projet |
|
// nom complet |
Object nomComplet = personne.obtenirValeurChamp("fmt_nom_complet"); |
ajouterTextFieldNonEditable(fsIdentite,"Nom", nomComplet); |
|
|
// TODO : nom autre |
|
// abreviation |
Object abreviation = personne.obtenirValeurChamp("abreviation"); |
ajouterTextFieldNonEditable(fsIdentite, "Abreviation", abreviation); |
|
// date naissance |
Object dateNaissance = personne.obtenirValeurChamp("date_naissance"); |
ajouterTextFieldNonEditable(fsIdentite, "Date de naissance", dateNaissance); |
|
// lieu naissance |
Object lieuNaissance = personne.obtenirValeurChamp("lieu_naissance"); |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de naissance", lieuNaissance); |
|
// date deces |
Object dateDeces = personne.obtenirValeurChamp("date_deces"); |
ajouterTextFieldNonEditable(fsIdentite, "Date de décès", dateDeces); |
|
// lieu deces |
Object lieuDeces = personne.obtenirValeurChamp("lieu_deces"); |
ajouterTextFieldNonEditable(fsIdentite, "Lieu de décès", lieuDeces); |
|
//Description |
String description = (String) personne.obtenirValeurChamp("description"); |
if ((description!=null)&&(!description.trim().equals(""))) { |
TextArea txtDescription = new TextArea(); |
txtDescription.setFieldLabel("Description"); |
txtDescription.setValue(description); |
|
rendreNonEditable(txtDescription); |
|
fsIdentite.add(txtDescription); |
} |
|
|
//CONTACT |
|
// Courriel est un champ TRUK |
// on doit afficher N entrées |
// Voir si le | (pipe) est bien le bon séparateur |
String courriels = (String) personne.obtenirValeurChamp("truk_courriel"); |
String[] tabCourriel = courriels.split("\\|"); |
Html intituleHTML = new Html("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b>"); |
fsContact.add(intituleHTML); |
|
for(int i = 0 ; i < tabCourriel.length ; i++) { |
String courriel = tabCourriel[i]; |
Hyperlink lnkCourriel = new Hyperlink(); |
lnkCourriel.setHTML("<a href=\"mailto:" + courriel + "\">" + courriel + "</a>"); |
fsContact.add(lnkCourriel); |
} |
|
panneauIdentite.add(fsContact); |
|
|
fsAdressePerso.setHeading("Adresse personnelle"); |
|
/* |
* Adresses : |
* */ |
String adresse01 = (String) personne.obtenirValeurChamp("adresse_01"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Adresse", adresse01); |
|
|
String adresse02 = (String) personne.obtenirValeurChamp("adresse_02"); |
ajouterTextFieldNonEditable(fsAdressePerso, "", adresse02); |
|
String boitePostale = (String) personne.obtenirValeurChamp("bp"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Boite Postale", boitePostale); |
|
String codePostal = (String) personne.obtenirValeurChamp("code_postal"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Code postal", codePostal); |
|
String ville = (String) personne.obtenirValeurChamp("ville"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Ville", ville); |
|
String region = (String) personne.obtenirValeurChamp("region"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Région", region); |
|
String pays = (String) personne.obtenirValeurChamp("pays"); |
ajouterTextFieldNonEditable(fsAdressePerso, "Pays", pays); |
|
fsAdressePerso.addText("<br >"); |
fsAdressePerso.setWidth("350px"); |
|
tabAdresse.add(fsAdressePerso); |
tabAdresse.setScrollMode(Scroll.AUTO); |
/* |
*/ |
|
layout(); |
} |
} |
|
private void ajouterTextFieldNonEditable(FieldSet fs, String tfLabel, Object tfValue) { |
|
if ((tfValue!=null)&&(!tfValue.toString().trim().equals(""))) { |
|
TextField tf = new TextField(); |
|
tf.setFieldLabel(tfLabel); |
if ((tfLabel==null)||("".equals(tfLabel))) { |
tf.setHideLabel(true); |
tf.setStyleAttribute("margin", "0 0 0 105px"); |
} |
tf.setValue(tfValue); |
|
// Non éditable : on empêche l'évènement par défaut |
rendreNonEditable(tf); |
|
//Ajout au fieldSet |
fs.add(tf); |
} |
} |
|
private void rendreNonEditable(Field field) { |
|
field.addKeyListener(new KeyListener() { |
public void componentKeyPress(ComponentEvent ev) { |
ev.stopEvent(); |
} |
}); |
} |
|
|
public void rafraichir(Object nouvelleDonnees) { |
if (nouvelleDonnees instanceof Personne) { |
afficherDetailPersonne((Personne) nouvelleDonnees); |
} else if (nouvelleDonnees instanceof StructureListe) { |
StructureListe listeInstitutions = (StructureListe) nouvelleDonnees; |
// Test pour savoir si la liste contient des éléments |
if (listeInstitutions.size() == 0) { |
afficherDetailPersonne(null); |
} |
} |
} |
|
} |