New file |
0,0 → 1,347 |
package org.tela_botanica.client.composants; |
|
import java.util.HashMap; |
|
import org.tela_botanica.client.Mediateur; |
import org.tela_botanica.client.RegistreId; |
import org.tela_botanica.client.composants.pagination.Proxy; |
import org.tela_botanica.client.composants.pagination.ProxyValeur; |
import org.tela_botanica.client.images.Images; |
import org.tela_botanica.client.interfaces.Rafraichissable; |
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.Registry; |
import com.extjs.gxt.ui.client.data.ModelData; |
import com.extjs.gxt.ui.client.data.ModelType; |
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 ChampMultiValeursPaginable extends LayoutContainer implements Rafraichissable { |
//TODO : changer le champRecapitulatif par une hashMap |
//TODO : autoriser la modification des champs saisis |
|
//-------------// |
// ATTRIBUTS // |
//-------------// |
|
Mediateur mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR); |
|
String idChampCache = null; |
String titreErreur = null; |
String valeurVideMsg = null; |
String valeurIdentiqueMsg = null; |
String valeurNonValideMsg = null; |
String valeurParDefaut = ""; |
String validationMasque = null; |
String exempleValidation = null; |
boolean champValeurEstComboBox = false; |
|
// Elements pour le champ 'valeurs' |
Field<String> champValeurTxt = null; |
ChampComboBoxRechercheTempsReelPaginable champValeurComboBox = null; |
HiddenField<String> champRecapitulatif = null; |
HashMap<String, LayoutContainer> valeurs = null; |
|
// Elements pour gérer le type de valeurs que contient le champ |
Proxy proxyChampValeur = null; |
ModelType modeltypeChampValeur = null; |
String displayNameChampValeur = "nom"; |
|
// Elements pour l'UI |
LayoutContainer principalLayout = null; |
LayoutContainer colonneConteneur = null; |
ColumnData colonneChampValeur = null; |
ColumnData colonneBoutonAjouter = null; |
Button ajouterBouton = null; |
int largeurTotale = 500; |
int largeurBouton = 20; |
int largeurChampValeur = 200; |
String boutonSupprimerLabel = ""; |
String nomLabelChampTxt = ""; |
|
|
//-------------// |
// METHODES // |
//-------------// |
|
/*-------------- |
Constructeur |
--------------*/ |
// Usage : Si champValeurEstComboBox est FAUX alors modeltype, proxy et displayName doivent être à Null. |
// Sinon ils doivent impérativement être non nuls. |
public ChampMultiValeursPaginable(String label, int largeurTotale, boolean champValeurEstComboBox, ModelType modeltype, Proxy proxy, String displayName) { |
this.champValeurEstComboBox = champValeurEstComboBox; |
|
if (champValeurEstComboBox) { |
if ((proxy == null) || (modeltype == null) || (displayName == null)) { |
MessageBox.alert("[ERREUR]","Constructeur de ChampMultiValeursPaginable - paramètre Null",null); |
} |
else { |
this.proxyChampValeur = proxy; |
this.modeltypeChampValeur = modeltype; |
this.displayNameChampValeur = displayName; |
} |
} |
|
initialiserChampMultiValeursPaginable(label, largeurTotale); |
} |
|
/*------------ |
Accesseurs |
------------*/ |
|
//------------// |
// Get //------------------------------------------------------------ |
|
public ChampComboBoxRechercheTempsReelPaginable getChampValeurComboBox() { |
if (champValeurEstComboBox) return this.champValeurComboBox; |
else return null; |
} |
|
public Field getChampValeurTxt() { |
if (!champValeurEstComboBox) return this.champValeurTxt; |
else return null; |
} |
|
public String getLabel() { |
return this.nomLabelChampTxt; |
} |
|
public String getValeurs() { |
String texteRecapitulatif = ""; |
if (champRecapitulatif.getValue() != null) { |
texteRecapitulatif = champRecapitulatif.getValue(); |
texteRecapitulatif = texteRecapitulatif.replaceAll("(.*)"+aDonnee.SEPARATEUR_VALEURS+"$", "$1"); |
} |
return texteRecapitulatif; |
} |
|
//------------// |
// Set //------------------------------------------------------------ |
|
public void setLabel(String label) { |
if (label == null) { |
label = ""; |
} |
nomLabelChampTxt = label; |
} |
|
public void setLargeurTotale(int largeur) { |
this.largeurTotale = largeur; |
largeurChampValeur = largeurTotale - largeurBouton; |
} |
|
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; |
} |
|
/*------------------ |
Méthodes publiques |
-------------------*/ |
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 rafraichir(Object nouvellesDonnees) { |
|
} |
|
/*------------------- |
Méthodes protégées |
--------------------*/ |
protected void ajouterValeur(final String texte, final String strValeur, final String id) { |
//Implémenté dans classe inférieure |
} |
|
protected 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(largeurChampValeur)); |
|
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(); |
} |
|
protected void reinitialiserChamp() { |
if (champValeurEstComboBox) { |
champValeurComboBox.getCombo().clear(); |
} else { |
champValeurTxt.setValue(valeurParDefaut); |
} |
} |
|
protected void actualiserLayoutGlobal() { |
layout(); |
} |
|
protected void ajouterValeurAuRecapitulatif(String texte) { |
String texteRecapitulatif = ""; |
if (champRecapitulatif.getValue() != null) { |
texteRecapitulatif = champRecapitulatif.getValue(); |
} |
texteRecapitulatif += texte + aDonnee.SEPARATEUR_VALEURS; |
champRecapitulatif.setValue(texteRecapitulatif); |
} |
|
protected void supprimerValeurDuRecapitulatif(String texte) { |
if (champRecapitulatif.getValue() != null) { |
String texteRecapitulatif = champRecapitulatif.getValue(); |
texteRecapitulatif = texteRecapitulatif.replace(texte + aDonnee.SEPARATEUR_VALEURS, ""); |
champRecapitulatif.setValue(texteRecapitulatif); |
} |
} |
|
protected 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(); |
initialiserChampMultiValeursPaginable(nomLabelChampTxt, largeurTotale); |
} |
|
/*------------------ |
Méthodes privées |
-------------------*/ |
private void initialiserChampMultiValeursPaginable(String label, int largeurTotale) { |
setLabel(label); |
setLargeurTotale(largeurTotale); |
|
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()); |
|
/* Creation du champ Valeur */ |
LabelField label = new LabelField(nomLabelChampTxt + ":"); |
label.setWidth("95%"); |
principalLayout.add(label); |
|
colonneConteneur = new LayoutContainer(); |
colonneConteneur.setLayout(new ColumnLayout()); |
colonneChampValeur = new ColumnData(largeurChampValeur); |
|
if (champValeurEstComboBox) { |
champValeurComboBox = new ChampComboBoxRechercheTempsReelPaginable(proxyChampValeur, modeltypeChampValeur, displayNameChampValeur); |
champValeurComboBox.setWidth(largeurChampValeur); |
champValeurComboBox.getCombo().setEmptyText("Valeur..."); |
colonneConteneur.add(champValeurComboBox, colonneChampValeur); |
} else { |
champValeurTxt = new TextField<String>(); |
champValeurTxt.setWidth(largeurChampValeur); |
champValeurTxt.setEmptyText("Valeur..."); |
colonneConteneur.add(champValeurTxt, colonneChampValeur); |
} |
|
/* Creation du bouton Ajouter */ |
ajouterBouton = new Button(); |
ajouterBouton.setWidth(largeurBouton); |
ajouterBouton.setIcon(Images.ICONES.ajouter()); |
ajouterBouton.addSelectionListener(new SelectionListener<ButtonEvent>() { |
public void componentSelected(ButtonEvent ce) { |
// récupération de la valeur du champ "Valeur" |
String valeurChamp = ""; |
if (champValeurEstComboBox) { |
if (champValeurComboBox.getValeur() != null) { |
valeurChamp = (new Valeur(champValeurComboBox.getValeur())).getNom(); |
} |
} else { |
valeurChamp = champValeurTxt.getValue(); |
} |
// validation de la valeur avant ajout |
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 { |
ajouterValeur(valeurChamp); |
} |
} |
} |
}); |
colonneBoutonAjouter = new ColumnData(largeurBouton); |
colonneConteneur.add(ajouterBouton, colonneBoutonAjouter); |
|
principalLayout.add(champRecapitulatif); |
principalLayout.add(colonneConteneur); |
add(principalLayout); |
} |
} |
Property changes: |
Added: svn:mergeinfo |
Merged /branches/v1.1-aramon/src/org/tela_botanica/client/composants/ChampMultiValeursPaginable.java:r1383-1511 |
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampMultiValeursPaginable.java:r1136-1208,1292-1367 |