Subversion Repositories eFlore/Applications.coel

Rev

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