Rev 666 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;
import java.util.HashMap;
import org.tela_botanica.client.images.Images;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.MessageBox;
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.HiddenField;
import com.extjs.gxt.ui.client.widget.form.LabelField;
import com.extjs.gxt.ui.client.widget.form.TextField;
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.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
import com.google.gwt.core.client.GWT;
public class ChampMultiValeurs extends LayoutContainer {
String idChampCache = null;
String nomLabelChampTxt = "";
String titreErreur = null;
String valeurVideMsg = null;
String valeurIdentiqueMsg = null;
LayoutContainer principalLayout = null;
TextField<String> champTexte = null;
HiddenField<String> champRecapitulatif = null;
HashMap<String, LayoutContainer> valeurs = null;
int largeurTotale = 420;
int largeurBouton = 20;
int largeurChamp = 0;
public ChampMultiValeurs() {
initialiserChampMultiValeur(null, 0);
}
public ChampMultiValeurs(String label) {
initialiserChampMultiValeur(label, 0);
}
public ChampMultiValeurs(String label, int largeurTotale) {
initialiserChampMultiValeur(label, largeurTotale);
}
public void setLabel(String label) {
if (label == null) {
label = "";
}
nomLabelChampTxt = label;
}
public void setLargeur(int largeur) {
if (largeur != 0 && largeur > 20) {
largeurTotale = largeur;
}
largeurChamp = largeurTotale - largeurBouton;
}
private void initialiserChampMultiValeur(String label, int largeur) {
setLabel(label);
setLargeur(largeur);
titreErreur = "Erreur de saisie";
valeurVideMsg = "Vous devez saisir une valeur";
valeurIdentiqueMsg = "La valeur saisi est déjà présente dans la liste";
valeurs = new HashMap<String, LayoutContainer>();
champRecapitulatif = new HiddenField<String>();
champRecapitulatif.setValue("");
setLayout(new FormLayout());
creerChampMultiValeurs();
}
private void creerChampMultiValeurs() {
principalLayout = new LayoutContainer();
principalLayout.setLayout(new RowLayout());
LabelField label = new LabelField(nomLabelChampTxt + ":");
label.setWidth(largeurChamp);
principalLayout.add(label);
LayoutContainer colonneLayout = new LayoutContainer();
colonneLayout.setLayout(new ColumnLayout());
champTexte = new TextField<String>();
colonneLayout.add(champTexte, new ColumnData(largeurChamp));
Button ajouterBouton = new Button();
ajouterBouton.setIcon(Images.ICONES.ajouter());
ajouterBouton.addSelectionListener(
new SelectionListener<ButtonEvent>() {
public void componentSelected(ButtonEvent ce) {
String valeurChampTxt = (String) champTexte.getValue();
if ((valeurChampTxt == null) || (valeurChampTxt.trim().equals(""))) {
MessageBox.alert(titreErreur, valeurVideMsg, null);
} else if (valeurs.get(valeurChampTxt) != null){
MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);
} else {
ajouterValeur(valeurChampTxt);
}
}
});
colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));
principalLayout.add(champRecapitulatif);
principalLayout.add(colonneLayout);
add(principalLayout);
}
private void ajouterValeur(final String texte) {
LayoutContainer colonneLayout = new LayoutContainer();
colonneLayout.setLayout(new ColumnLayout());
valeurs.put(texte, colonneLayout);
Text champTxt = new Text();
champTxt.setText(texte);
colonneLayout.add(champTxt, new ColumnData(largeurChamp));
Button supprimerBouton = new Button();
supprimerBouton.setIcon(Images.ICONES.supprimer());
supprimerBouton.setData("valeur", 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);
supprimerValeurAuRecapitulatif(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);
actualiserLayoutGlobal();
}
private void actualiserLayoutGlobal() {
GWT.log("Valeurs : "+getValeurs(), null);
layout();
}
private void ajouterValeurAuRecapitulatif(String texte) {
String texteRecapitulatif = "";
if (champRecapitulatif.getValue() != null) {
texteRecapitulatif = champRecapitulatif.getValue();
}
texteRecapitulatif += texte + ";;";
champRecapitulatif.setValue(texteRecapitulatif);
}
private void supprimerValeurAuRecapitulatif(String texte) {
if (champRecapitulatif.getValue() != null) {
String texteRecapitulatif = champRecapitulatif.getValue();
texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");
champRecapitulatif.setValue(texteRecapitulatif);
}
}
public String getValeurs() {
String texteRecapitulatif = "";
if (champRecapitulatif.getValue() != null) {
texteRecapitulatif = champRecapitulatif.getValue();
texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");
}
return texteRecapitulatif;
}
}