Rev 1093 | Rev 1415 | 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.Mediateur;import org.tela_botanica.client.images.Images;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.aDonnee;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.FieldEvent;import com.extjs.gxt.ui.client.event.Listener;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.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.ComboBox;import com.extjs.gxt.ui.client.widget.form.Field;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.form.ComboBox.TriggerAction;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.FormLayout;import com.extjs.gxt.ui.client.widget.layout.RowLayout;public class ChampMultiValeurs extends LayoutContainer {//TODO : changer le champRecapitulatif par une hashMap//TODO : autoriser la modification des champs saisisString idChampCache = null;String nomLabelChampTxt = "";String titreErreur = null;String valeurVideMsg = null;String valeurIdentiqueMsg = null;String valeurNonValideMsg = null;String valeurParDefaut = "";String validationMasque = null;String exempleValidation = null;String boutonSupprimerLabel = "";LayoutContainer principalLayout = null;Field<String> champValeurTxt = null;ComboBox<Valeur> champValeurCombo = null;HiddenField<String> champRecapitulatif = null;HashMap<String, LayoutContainer> valeurs = null;ComboBox<Valeur> types = null;int largeurTotale = 420;int largeurBouton = 20;int largeurChamp = 0;int largeurType = 0;boolean estMultiType = false;boolean estComboBox = false;public ChampMultiValeurs() {initialiserChampMultiValeur(null, 0);}public ChampMultiValeurs(String label) {initialiserChampMultiValeur(label, 0);}public ChampMultiValeurs(String label, int largeurTotale) {initialiserChampMultiValeur(label, largeurTotale);}public ChampMultiValeurs(boolean estMultiType, String label, int largeurTotale, int largeurType) {this.estMultiType = estMultiType;initialiserChampMultiValeur(label, largeurTotale);}public ChampMultiValeurs(boolean estCombobox, boolean estMultiType, String label, int largeurTotale, int largeurType) {this.estMultiType = estMultiType;this.estComboBox = estCombobox;setLargeurType(largeurType);initialiserChampMultiValeur(label, largeurTotale);}public ComboBox<Valeur> getTypes() {return this.types;}public void setLabel(String label) {if (label == null) {label = "";}nomLabelChampTxt = label;}public void setLargeurChamp(int largeurMax) {if (largeurMax != 0 && largeurMax > 20) {largeurTotale = largeurMax;}largeurChamp = largeurTotale - largeurBouton;}public void setLargeurType(int largeur) {largeurType = largeur;}public void setValidation (String validation, String exempleValidation) {this.validationMasque = validation;this.exempleValidation = exempleValidation;this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);}public void setValeurParDefaut(String valeur) {this.valeurParDefaut = valeur;champValeurTxt.setValue(valeur);}public void setValeurBoutonSupprimer(String valeur) {this.boutonSupprimerLabel = valeur;}private void initialiserChampMultiValeur(String label, int largeur) {setLabel(label);setLargeurChamp(largeur);titreErreur = Mediateur.i18nC.erreurSaisieTitre();valeurVideMsg = Mediateur.i18nC.demanderValeur();valeurIdentiqueMsg = Mediateur.i18nC.valeurDejaPresente();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("95%");principalLayout.add(label);LayoutContainer colonneConteneur = new LayoutContainer();colonneConteneur.setLayout(new ColumnLayout());if (estMultiType == true) {types = new ComboBox<Valeur>();types.setDisplayField("nom");types.setEmptyText("Choisissez:");types.setStore(new ListStore<Valeur>());types.setTypeAhead(true);types.setTriggerAction(TriggerAction.ALL);types.addListener(Events.Select, new Listener<FieldEvent>() {public void handleEvent(FieldEvent fe) {}});colonneConteneur.add(types, new ColumnData(largeurType));}if (estComboBox) {champValeurCombo = new ComboBox<Valeur>();champValeurCombo.setDisplayField("nom");champValeurCombo.setStore(new ListStore<Valeur>());colonneConteneur.add(champValeurCombo, new ColumnData(largeurChamp));} else {champValeurTxt = new TextField<String>();colonneConteneur.add(champValeurTxt, new ColumnData(largeurChamp));}Button ajouterBouton = new Button();ajouterBouton.setIcon(Images.ICONES.ajouter());ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent ce) {String valeurChamp = "";if (estComboBox) {if (champValeurCombo.getValue() != null) {valeurChamp = champValeurCombo.getValue().getNom();}} else {valeurChamp = champValeurTxt.getValue();}if ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut)) {MessageBox.alert(titreErreur, valeurVideMsg, null);} else if (valeurs.get(valeurChamp) != null){MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);} else {if (validationMasque != null && !valeurChamp.matches(validationMasque)) {MessageBox.alert(titreErreur, valeurNonValideMsg, null);} else {if (estMultiType) {String type = "";String id = "";Valeur valeur = types.getValue();if (valeur != null) {type = valeur.getNom();id = valeur.getId();} else {type = types.getRawValue();id = type;}if (type.trim().equals("")) {MessageBox.alert(Mediateur.i18nM.titreErreurSaisie(), Mediateur.i18nM.typeChampMulti(), null);} else {ajouterValeur(valeurChamp, type, id);}} else {ajouterValeur(valeurChamp);}}}}});colonneConteneur.add(ajouterBouton, new ColumnData(largeurBouton));principalLayout.add(champRecapitulatif);principalLayout.add(colonneConteneur);add(principalLayout);}public void ajouterValeur(final String texte, final String strValeur, final String id) {//Implémenté dans classe inférieure}public 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.setText(boutonSupprimerLabel);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);supprimerValeurDuRecapitulatif(valeur);actualiserLayoutGlobal();}});colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));// Ajout du layout de la valeur au layout principalprincipalLayout.add(colonneLayout);// Ajout de la valeur au champ récapitulatif des valeurs ajoutéesajouterValeurAuRecapitulatif(texte);reinitialiserChamp();actualiserLayoutGlobal();}public void reinitialiserChamp() {if (estComboBox) {champValeurCombo.setValue(champValeurCombo.getStore().findModel("id_valeur", valeurParDefaut));} else {champValeurTxt.setValue(valeurParDefaut);}if (estMultiType) {types.reset();}}public void actualiserLayoutGlobal() {layout();}public void ajouterValeurAuRecapitulatif(String texte) {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();}texteRecapitulatif += texte + aDonnee.SEPARATEUR_VALEURS;champRecapitulatif.setValue(texteRecapitulatif);}public void supprimerValeurDuRecapitulatif(String texte) {if (champRecapitulatif.getValue() != null) {String texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replace(texte + aDonnee.SEPARATEUR_VALEURS, "");champRecapitulatif.setValue(texteRecapitulatif);}}public String getValeurs() {String texteRecapitulatif = "";if (champRecapitulatif.getValue() != null) {texteRecapitulatif = champRecapitulatif.getValue();texteRecapitulatif = texteRecapitulatif.replaceAll("(.*)"+aDonnee.SEPARATEUR_VALEURS+"$", "$1");}return texteRecapitulatif;}public void peupler(String chaineExistante) {if (valeurs.size()>0) {reinitialiser();}if (chaineExistante != null && !chaineExistante.trim().equals("")) {String[] valeurs = chaineExistante.split(aDonnee.SEPARATEUR_VALEURS);for (int i = 0; i < valeurs.length; i++) {ajouterValeur(valeurs[i]);}}}public void reinitialiser() {//TODO : pourrait etre mieux fait si les valeurs étaient enregistrées dans un// layout particulier. Il suffirait alors d'enlever les valeurs de ce layout.principalLayout.removeAll();initialiserChampMultiValeur(nomLabelChampTxt, largeurTotale);}}