Subversion Repositories eFlore/Applications.coel

Rev

Rev 198 | Rev 215 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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.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.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.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 identite;
        private FieldSet fsIdentite;
        private FieldSet fsContact;
        
        // Onglet 2 : Adresses
        private TabItem tabAdresse;
        private FieldSet fsAdressePerso;
                // contient : adresse perso / adresse pro
        
        //TODO : Onglet Info Naturaliste
        
        // > Se baser sur la présentation thunderBird
        
        
        public PersonneDetailPanneauVue() {
                
                //Constructeur de la classe
                Registry.register(RegistreId.PANNEAU_PERSONNE_DETAIL, this);
                setLayout(new FitLayout());
                
                identite = new TabItem("Identité");
                identite.setLayout(new TableLayout(2));
                identite.setScrollMode(Scroll.AUTO);
                
                /*
                 * NOTES : J'ai utilisé un TableLayout pour avoir une présentation ou l'image, si elle existe, soit placée à droite des informations d'identité.
                 * Cependant, une imagetrop grande bouleverse la mise en page.
                 * Il faut trouver une solution pour fixer ca :
                 *      - par CSS ?
                 *  - utiliser un FlexTable ?
                 *  - utiliser plusieurs panneaux?
                 * */
                
                fsIdentite = new FieldSet();
                fsIdentite.setLayout(new FormLayout());
                
                
                fsContact = new FieldSet();
                fsContact.setLayout(new FormLayout());
                
                this.add(identite);
                
                //Onglet Adresse:
                tabAdresse = new TabItem("Adresses");
                fsAdressePerso = new FieldSet();
                fsAdressePerso.setLayout(new FormLayout());
                
                
                
                //TODO : ajouter info naturaliste
                
        }

        public void afficherDetailPersonne(Personne personne) {
                if (personne != null) {
                        
                        
                        //MAJ Identité : Configurer les fieldSet
                        identite.removeAll();
                        
                        fsIdentite.setHeading("Identité");
                        fsIdentite.setWidth("350px");
                        
                        fsContact.setHeading("Contact");
                        fsContact.setWidth("350px");
                        
                        identite.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");
                                
                                // FIXME : pour avoir un affichage correct, je force la redimension à 300px. Idéalement, ce serait un max-height qu'il faudrait. 
                                // FIXME : L'image devrait se mettre sur deux lignes au lieu d'une, ca décale tout ... 
                                img.setHeight("300px");
                                
                                identite.add(img);
                                
                        }       else    {
                                //Sinon, on doit mettre une case vide pour garder une présentation en colonne de fsIdentite & fsContact
                                identite.add(new Label());
                        }
                        
                        identite.add(fsContact);
                        
                        fsIdentite.removeAll();
                        fsContact.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
                        
                        //FIXME : courriel est un champ TRUK
                        // on doit afficher N entrées
                        String courriel =  (String) personne.obtenirValeurChamp("courriel");
                        Hyperlink lnkCourriel = new Hyperlink();
                        lnkCourriel.setHTML("<b style=\"margin:0 50px 0 0 ; color:black;\">Courriel:</b><a href=\"mailto:" + courriel + "\">" + courriel + "</a>");
                        fsContact.add(lnkCourriel);
                        
                        fsContact.addText("<br >");
                        
                        
                        /*
                         * Adresses :
                        String adresse01 = (String) personne.obtenirValeurChamp("adresse_01");
                        ajouterTextFieldNonEditable(fsContact, "Adresse", adresse01);
                        
                        
                        String adresse02 = (String) personne.obtenirValeurChamp("adresse_02");
                        ajouterTextFieldNonEditable(fsContact, "", adresse02);
                        
                        String boitePostale = (String) personne.obtenirValeurChamp("bp");
                        ajouterTextFieldNonEditable(fsContact, "Boite Postale", boitePostale);
                        
                        String codePostal = (String) personne.obtenirValeurChamp("code_postal");
                        ajouterTextFieldNonEditable(fsContact, "Code postal", codePostal);
                        
                        String ville = (String) personne.obtenirValeurChamp("ville");
                        ajouterTextFieldNonEditable(fsContact, "Ville", ville);
                        
                        String region = (String) personne.obtenirValeurChamp("region");
                        ajouterTextFieldNonEditable(fsContact, "Région", region);
                        
                        String pays = (String) personne.obtenirValeurChamp("pays");
                        ajouterTextFieldNonEditable(fsContact, "Pays", pays);
                        
                        fsContact.addText("<br >");     */
                        
                        
                        
                        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);
                        }
                }
        }

}