New file |
0,0 → 1,414 |
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 org.tela_botanica.client.util.Debug; |
|
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 saisis |
|
String 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) { |
surAjoutValeur(true); |
} |
}); |
colonneConteneur.add(ajouterBouton, new ColumnData(largeurBouton)); |
|
principalLayout.add(champRecapitulatif); |
principalLayout.add(colonneConteneur); |
add(principalLayout); |
} |
|
private void surAjoutValeur(boolean validerChamp) { |
String valeurChamp = ""; |
if (estComboBox) { |
if (champValeurCombo.getValue() != null) { |
valeurChamp = champValeurCombo.getValue().getId(); |
} |
} else { |
valeurChamp = champValeurTxt.getValue(); |
} |
|
if ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut)) { |
if(validerChamp) { |
MessageBox.alert(titreErreur, valeurVideMsg, null); |
} |
} else if (valeurs.get(valeurChamp) != null) { |
if(validerChamp) { |
MessageBox.alert(titreErreur, valeurIdentiqueMsg, null); |
} |
} else { |
if (validationMasque != null && !valeurChamp.matches(validationMasque)) { |
if(validerChamp) { |
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); |
} |
} |
} |
} |
|
//TODO: la fonction est valide et la fonction surAjoutValeur ont beaucoup en commun |
// voir si on peut les factoriser (ou déplacer les alertes dans les classes appelantes) |
public boolean estValide(boolean autoriserVide) { |
boolean valide = true; |
String valeurChamp = ""; |
if (estComboBox) { |
if (champValeurCombo.getValue() != null) { |
valeurChamp = champValeurCombo.getValue().getId(); |
} |
} else { |
valeurChamp = champValeurTxt.getValue(); |
} |
|
if ((valeurChamp == null) || valeurChamp.trim().equals("") || valeurChamp.trim().equals(valeurParDefaut)) { |
if(!autoriserVide) { |
valide = false; |
} |
} else if (valeurs.get(valeurChamp) != null) { |
if(!autoriserVide) { |
valide = false; |
} |
} else { |
if (validationMasque != null && !valeurChamp.matches(validationMasque)) { |
valide = false; |
} 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("")) { |
valide = false; |
} |
} |
} |
} |
return valide; |
} |
|
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 principal |
principalLayout.add(colonneLayout); |
|
// Ajout de la valeur au champ récapitulatif des valeurs ajoutées |
ajouterValeurAuRecapitulatif(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 texteValeur = ""; |
if (estComboBox) { |
// comme c'est le nom de la valeur qui est passée en paramètre, |
// on doit récupérer son id |
ListStore<Valeur> valeurs = champValeurCombo.getStore(); |
Valeur objetValeur = valeurs.findModel("nom", texte); |
|
if (objetValeur != null) { |
texteValeur = objetValeur.getId(); |
} else { |
texteValeur = texte; |
} |
} else { |
texteValeur = texte; |
} |
|
String texteRecapitulatif = champRecapitulatif.getValue(); |
texteRecapitulatif = texteRecapitulatif.replace(texteValeur + aDonnee.SEPARATEUR_VALEURS, ""); |
champRecapitulatif.setValue(texteRecapitulatif); |
} |
} |
|
public String getValeurs() { |
// permet de s'assurer qu'une valeur saisie dans le champ mais non ajoutée par le |
// clic sur le + soit bien prise en compte |
surAjoutValeur(false); |
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); |
} |
} |
Property changes: |
Added: svn:mergeinfo |
Merged /branches/v1.1-aramon/src/org/tela_botanica/client/composants/ChampMultiValeurs.java:r1383-1511 |
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampMultiValeurs.java:r1136-1367 |
Merged /trunk/src/org/tela_botanica/client/composants/ChampMultiValeurs.java:r11-664,1209-1382 |