Subversion Repositories eFlore/Applications.coel

Rev

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

package org.tela_botanica.client.composants;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.tela_botanica.client.Mediateur;
import org.tela_botanica.client.RegistreId;
import org.tela_botanica.client.images.Images;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Configuration;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.ValeurListe;

import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.ui.Image;

public class ChampMultiValeursMultiTypes extends ChampMultiValeurs implements Rafraichissable{

        private String idListeType;
        private Configuration config = (Configuration) Registry.get(RegistreId.CONFIG);
        
        public ChampMultiValeursMultiTypes() {
                super(true, null, 0);
        }
        
        public ChampMultiValeursMultiTypes(String label) {
                super(true, label, 0);
        }
        
        public ChampMultiValeursMultiTypes(String label, int largeurTotale) {
                super(true, label, largeurTotale);
        }
        
        public void initialiserType(String idListeType, Mediateur mediateur)    {
                this.idListeType = idListeType;
                mediateur.obtenirListeValeurEtRafraichir(this, idListeType);
        }
        
        public ListStore getStore()     {               
                return this.types.getStore();
        }
        
        public void rafraichir(Object nouvellesDonnees) {
                if (nouvellesDonnees instanceof ValeurListe)    {

                        ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
                        
                        // Créer une liste de valeurs
                        List<Valeur> liste = new ArrayList<Valeur>();
                        for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
                                liste.add(listeValeurs.get(it.next()));
                        }
                        
                        if (listeValeurs.getId().equals(config.getListeId(idListeType)))        {
                                
                                ListStore<Valeur> store = getStore();
                                store.removeAll();
                                store.add(liste);
                                types.setStore(store);
                        }
                                
                }               
        }
        
        public void ajouterValeur(final String texte, final String type, final String id)       {
                
                LayoutContainer colonneLayout = new LayoutContainer();
                colonneLayout.setLayout(new ColumnLayout());
                valeurs.put(id + "##" + texte, colonneLayout);
                
                Text champTxt = new Text();
                champTxt.setText(type + ": ");
                
                int largeurType = type.length() * 10;
                colonneLayout.add(champTxt, new ColumnData(largeurType));
                
                Text champTxt2 = new Text();
                champTxt2.setText(texte);
                colonneLayout.add(champTxt2, new ColumnData(largeurTotale - largeurType - largeurBouton));
                
                Button supprimerBouton = new Button();
                supprimerBouton.setIcon(Images.ICONES.supprimer());
                supprimerBouton.setText(boutonSupprimerLabel);
                supprimerBouton.setData("valeur", id + "##" + texte);
                supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
                        public void componentSelected(ButtonEvent ce) {
                                String valeur = ce.getComponent().getData("valeur");
                                LayoutContainer valeurLayout = valeurs.get(valeur);
                                principalLayout.remove(valeurLayout);
                                
                                valeurs.remove(valeur);
                                
                                supprimerValeurDuRecapitulatif(valeur);
                                
                                actualiserLayoutGlobal();
                        }
                });
                colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));
                
                // Ajout du layout de la valeur au layout principal
                principalLayout.add(colonneLayout);
                
                // Ajout de la valeur au champ récapitulatif des valeurs ajoutées
                ajouterValeurAuRecapitulatif(texte, id);
                reinitialiserChamp();
                actualiserLayoutGlobal();
        }
        
        public void reinitialiserChamp()        {
                champTexte.setValue(valeurParDefaut);
                types.reset();
        }
        
        public void ajouterValeurAuRecapitulatif(String texte, String id) {
                String texteRecapitulatif = "";
                if (champRecapitulatif.getValue() != null)      {
                        texteRecapitulatif = champRecapitulatif.getValue();
                }
                texteRecapitulatif += id + "##" + texte + ";;";
                champRecapitulatif.setValue(texteRecapitulatif);
        }
        
        public void peupler(String chaineExistante) {
                if (valeurs.size()>0)   {
                        reinitialiser();
                }
                if (chaineExistante != null && !chaineExistante.trim().equals("")) {
                        String[] valeurs = chaineExistante.split(";;");
                        for (int i = 0; i < valeurs.length; i++) {
                                String[] idEtValeur = valeurs[i].split("##");
                                String id = idEtValeur[0];
                                String valeur = idEtValeur[1];
                                
                                ListStore<Valeur> store = types.getStore();
                                Valeur objetValeur = store.findModel("id_valeur",id);
                                String texte = "";
                                if (objetValeur!=null)  {
                                        texte = objetValeur.getNom();
                                } else {
                                        texte = id;
                                }
                                ajouterValeur(valeur, texte, id);
                        }
                }
        }
}