Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
665 jp_milcent 1
package org.tela_botanica.client.composants;
2
 
3
import java.util.HashMap;
4
 
691 jp_milcent 5
import org.tela_botanica.client.Mediateur;
665 jp_milcent 6
import org.tela_botanica.client.images.Images;
7
 
8
import com.extjs.gxt.ui.client.event.ButtonEvent;
9
import com.extjs.gxt.ui.client.event.SelectionListener;
10
import com.extjs.gxt.ui.client.widget.LayoutContainer;
11
import com.extjs.gxt.ui.client.widget.MessageBox;
12
import com.extjs.gxt.ui.client.widget.Text;
13
import com.extjs.gxt.ui.client.widget.button.Button;
14
import com.extjs.gxt.ui.client.widget.form.HiddenField;
15
import com.extjs.gxt.ui.client.widget.form.LabelField;
16
import com.extjs.gxt.ui.client.widget.form.TextField;
17
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
18
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
19
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
20
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
21
import com.google.gwt.core.client.GWT;
22
 
23
public class ChampMultiValeurs extends LayoutContainer {
24
	String idChampCache = null;
25
 
26
	String nomLabelChampTxt = "";
27
 
28
	String titreErreur = null;
29
	String valeurVideMsg = null;
30
	String valeurIdentiqueMsg = null;
694 gduche 31
	String valeurNonValideMsg = null;
32
 
693 gduche 33
	String valeurParDefaut = "";
694 gduche 34
	String validation = null;
35
	String exempleValidation = null;
700 gduche 36
	String boutonSupprimerLabel = "";
665 jp_milcent 37
 
38
	LayoutContainer principalLayout = null;
39
	TextField<String> champTexte = null;
40
	HiddenField<String> champRecapitulatif = null;
41
	HashMap<String, LayoutContainer> valeurs = null;
42
 
43
	int largeurTotale = 420;
44
	int largeurBouton = 20;
45
	int largeurChamp = 0;
46
 
47
	public ChampMultiValeurs() {
48
		initialiserChampMultiValeur(null, 0);
49
	}
50
 
51
	public ChampMultiValeurs(String label) {
52
		initialiserChampMultiValeur(label, 0);
53
	}
54
 
55
	public ChampMultiValeurs(String label, int largeurTotale) {
56
		initialiserChampMultiValeur(label, largeurTotale);
57
	}
58
 
59
	public void setLabel(String label) {
60
		if (label == null) {
61
			label = "";
62
		}
63
		nomLabelChampTxt = label;
64
	}
65
 
66
	public void setLargeur(int largeur) {
67
		if (largeur != 0 && largeur > 20) {
68
			largeurTotale = largeur;
69
		}
70
		largeurChamp = largeurTotale - largeurBouton;
71
	}
72
 
694 gduche 73
	public void setValidation (String validation, String exempleValidation)	{
74
		this.validation = validation;
75
		this.exempleValidation = exempleValidation;
76
 
77
		this.valeurNonValideMsg = Mediateur.i18nM.valeurNonValideMsg(exempleValidation);
78
	}
79
 
693 gduche 80
	public void setValeurParDefaut(String valeur)	{
81
		this.valeurParDefaut = valeur;
82
		champTexte.setValue(valeur);
83
	}
84
 
700 gduche 85
	public void setValeurBoutonSupprimer(String valeur)	{
86
		this.boutonSupprimerLabel = valeur;
87
	}
88
 
665 jp_milcent 89
	private void initialiserChampMultiValeur(String label, int largeur) {
90
		setLabel(label);
91
		setLargeur(largeur);
92
 
691 jp_milcent 93
		titreErreur = Mediateur.i18nC.erreurSaisieTitre();
94
		valeurVideMsg = Mediateur.i18nC.demanderValeur();
95
		valeurIdentiqueMsg = Mediateur.i18nC.valeurDejaPresente();
665 jp_milcent 96
 
97
		valeurs = new HashMap<String, LayoutContainer>();
98
		champRecapitulatif = new HiddenField<String>();
99
		champRecapitulatif.setValue("");
100
 
101
		setLayout(new FormLayout());
102
 
103
		creerChampMultiValeurs();
104
	}
105
 
106
	private void creerChampMultiValeurs() {
107
		principalLayout = new LayoutContainer();
108
		principalLayout.setLayout(new RowLayout());
109
 
110
		LabelField label = new LabelField(nomLabelChampTxt + ":");
111
		label.setWidth(largeurChamp);
112
		principalLayout.add(label);
113
 
114
		LayoutContainer colonneLayout = new LayoutContainer();
115
		colonneLayout.setLayout(new ColumnLayout());
116
 
117
		champTexte = new TextField<String>();
118
		colonneLayout.add(champTexte, new ColumnData(largeurChamp));
119
 
120
		Button ajouterBouton = new Button();
121
		ajouterBouton.setIcon(Images.ICONES.ajouter());
122
		ajouterBouton.addSelectionListener(
123
			new SelectionListener<ButtonEvent>() {
124
				public void componentSelected(ButtonEvent ce) {
125
					String valeurChampTxt = (String) champTexte.getValue();
693 gduche 126
					if ((valeurChampTxt == null) || valeurChampTxt.trim().equals("") || valeurChampTxt.trim().equals(valeurParDefaut))	{
665 jp_milcent 127
						MessageBox.alert(titreErreur, valeurVideMsg, null);
128
					} else if (valeurs.get(valeurChampTxt) != null){
129
						MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);
130
					} else {
694 gduche 131
						if (validation!=null && !valeurChampTxt.matches(validation)) 	{
132
							MessageBox.alert(titreErreur, valeurNonValideMsg, null);
133
						} else {
134
							ajouterValeur(valeurChampTxt);
135
						}
665 jp_milcent 136
					}
137
				}
138
			});
139
		colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));
140
 
141
		principalLayout.add(champRecapitulatif);
142
		principalLayout.add(colonneLayout);
143
		add(principalLayout);
144
	}
145
 
700 gduche 146
	public void ajouterValeur(final String texte) 	{
665 jp_milcent 147
		LayoutContainer colonneLayout = new LayoutContainer();
148
		colonneLayout.setLayout(new ColumnLayout());
149
		valeurs.put(texte, colonneLayout);
150
 
151
		Text champTxt = new Text();
152
		champTxt.setText(texte);
153
		colonneLayout.add(champTxt, new ColumnData(largeurChamp));
154
 
155
		Button supprimerBouton = new Button();
156
		supprimerBouton.setIcon(Images.ICONES.supprimer());
700 gduche 157
		supprimerBouton.setText(boutonSupprimerLabel);
665 jp_milcent 158
		supprimerBouton.setData("valeur", texte);
159
		supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
160
			public void componentSelected(ButtonEvent ce) {
161
				String valeur = ce.getComponent().getData("valeur");
162
				LayoutContainer valeurLayout = valeurs.get(valeur);
163
				principalLayout.remove(valeurLayout);
164
 
165
				valeurs.remove(valeur);
166
 
700 gduche 167
				supprimerValeurDuRecapitulatif(valeur);
665 jp_milcent 168
 
169
				actualiserLayoutGlobal();
170
			}
171
		});
172
		colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));
173
 
174
		// Ajout du layout de la valeur au layout principal
175
		principalLayout.add(colonneLayout);
176
 
177
		// Ajout de la valeur au champ récapitulatif des valeurs ajoutées
178
		ajouterValeurAuRecapitulatif(texte);
693 gduche 179
		reinitialiserChamp();
665 jp_milcent 180
		actualiserLayoutGlobal();
181
	}
182
 
693 gduche 183
	private void reinitialiserChamp()	{
184
		champTexte.setValue(valeurParDefaut);
185
	}
186
 
665 jp_milcent 187
	private void actualiserLayoutGlobal() {
188
		GWT.log("Valeurs : "+getValeurs(), null);
189
		layout();
190
	}
191
 
700 gduche 192
	public void ajouterValeurAuRecapitulatif(String texte) {
665 jp_milcent 193
		String texteRecapitulatif = "";
194
		if (champRecapitulatif.getValue() != null)	{
195
			texteRecapitulatif = champRecapitulatif.getValue();
196
		}
197
		texteRecapitulatif += texte + ";;";
198
		champRecapitulatif.setValue(texteRecapitulatif);
199
	}
200
 
700 gduche 201
	public void supprimerValeurDuRecapitulatif(String texte) {
665 jp_milcent 202
		if (champRecapitulatif.getValue() != null)	{
203
			String texteRecapitulatif = champRecapitulatif.getValue();
204
			texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");
205
			champRecapitulatif.setValue(texteRecapitulatif);
206
		}
207
	}
208
 
209
	public String getValeurs() {
210
		String texteRecapitulatif = "";
211
		if (champRecapitulatif.getValue() != null) {
212
			texteRecapitulatif = champRecapitulatif.getValue();
213
			texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");
214
		}
215
		return texteRecapitulatif;
216
	}
669 jp_milcent 217
 
218
	public void peupler(String chaineExistante) {
691 jp_milcent 219
		if (chaineExistante != null && !chaineExistante.trim().equals("")) {
669 jp_milcent 220
			String[] valeurs = chaineExistante.split(";;");
221
			for (int i = 0; i < valeurs.length; i++) {
222
				ajouterValeur(valeurs[i]);
223
			}
224
		}
225
	}
665 jp_milcent 226
}