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
 
5
import org.tela_botanica.client.images.Images;
6
 
7
import com.extjs.gxt.ui.client.event.ButtonEvent;
8
import com.extjs.gxt.ui.client.event.SelectionListener;
9
import com.extjs.gxt.ui.client.widget.LayoutContainer;
10
import com.extjs.gxt.ui.client.widget.MessageBox;
11
import com.extjs.gxt.ui.client.widget.Text;
12
import com.extjs.gxt.ui.client.widget.button.Button;
13
import com.extjs.gxt.ui.client.widget.form.HiddenField;
14
import com.extjs.gxt.ui.client.widget.form.LabelField;
15
import com.extjs.gxt.ui.client.widget.form.TextField;
16
import com.extjs.gxt.ui.client.widget.layout.ColumnData;
17
import com.extjs.gxt.ui.client.widget.layout.ColumnLayout;
18
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
19
import com.extjs.gxt.ui.client.widget.layout.RowLayout;
20
import com.google.gwt.core.client.GWT;
21
 
22
public class ChampMultiValeurs extends LayoutContainer {
23
	String idChampCache = null;
24
 
25
	String nomLabelChampTxt = "";
26
 
27
	String titreErreur = null;
28
	String valeurVideMsg = null;
29
	String valeurIdentiqueMsg = null;
30
 
31
	LayoutContainer principalLayout = null;
32
	TextField<String> champTexte = null;
33
	HiddenField<String> champRecapitulatif = null;
34
	HashMap<String, LayoutContainer> valeurs = null;
35
 
36
	int largeurTotale = 420;
37
	int largeurBouton = 20;
38
	int largeurChamp = 0;
39
 
40
	public ChampMultiValeurs() {
41
		initialiserChampMultiValeur(null, 0);
42
	}
43
 
44
	public ChampMultiValeurs(String label) {
45
		initialiserChampMultiValeur(label, 0);
46
	}
47
 
48
	public ChampMultiValeurs(String label, int largeurTotale) {
49
		initialiserChampMultiValeur(label, largeurTotale);
50
	}
51
 
52
	public void setLabel(String label) {
53
		if (label == null) {
54
			label = "";
55
		}
56
		nomLabelChampTxt = label;
57
	}
58
 
59
	public void setLargeur(int largeur) {
60
		if (largeur != 0 && largeur > 20) {
61
			largeurTotale = largeur;
62
		}
63
		largeurChamp = largeurTotale - largeurBouton;
64
	}
65
 
66
	private void initialiserChampMultiValeur(String label, int largeur) {
67
		setLabel(label);
68
		setLargeur(largeur);
69
 
70
		titreErreur = "Erreur de saisie";
71
		valeurVideMsg = "Vous devez saisir une valeur";
72
		valeurIdentiqueMsg = "La valeur saisi est déjà présente dans la liste";
73
 
74
		valeurs = new HashMap<String, LayoutContainer>();
75
		champRecapitulatif = new HiddenField<String>();
76
		champRecapitulatif.setValue("");
77
 
78
		setLayout(new FormLayout());
79
 
80
		creerChampMultiValeurs();
81
	}
82
 
83
	private void creerChampMultiValeurs() {
84
		principalLayout = new LayoutContainer();
85
		principalLayout.setLayout(new RowLayout());
86
 
87
		LabelField label = new LabelField(nomLabelChampTxt + ":");
88
		label.setWidth(largeurChamp);
89
		principalLayout.add(label);
90
 
91
		LayoutContainer colonneLayout = new LayoutContainer();
92
		colonneLayout.setLayout(new ColumnLayout());
93
 
94
		champTexte = new TextField<String>();
95
		colonneLayout.add(champTexte, new ColumnData(largeurChamp));
96
 
97
		Button ajouterBouton = new Button();
98
		ajouterBouton.setIcon(Images.ICONES.ajouter());
99
		ajouterBouton.addSelectionListener(
100
			new SelectionListener<ButtonEvent>() {
101
				public void componentSelected(ButtonEvent ce) {
102
					String valeurChampTxt = (String) champTexte.getValue();
103
					if ((valeurChampTxt == null) || (valeurChampTxt.trim().equals("")))	{
104
						MessageBox.alert(titreErreur, valeurVideMsg, null);
105
					} else if (valeurs.get(valeurChampTxt) != null){
106
						MessageBox.alert(titreErreur, valeurIdentiqueMsg, null);
107
					} else {
108
						ajouterValeur(valeurChampTxt);
109
					}
110
				}
111
			});
112
		colonneLayout.add(ajouterBouton, new ColumnData(largeurBouton));
113
 
114
		principalLayout.add(champRecapitulatif);
115
		principalLayout.add(colonneLayout);
116
		add(principalLayout);
117
	}
118
 
119
	private void ajouterValeur(final String texte) 	{
120
		LayoutContainer colonneLayout = new LayoutContainer();
121
		colonneLayout.setLayout(new ColumnLayout());
122
		valeurs.put(texte, colonneLayout);
123
 
124
		Text champTxt = new Text();
125
		champTxt.setText(texte);
126
		colonneLayout.add(champTxt, new ColumnData(largeurChamp));
127
 
128
		Button supprimerBouton = new Button();
129
		supprimerBouton.setIcon(Images.ICONES.supprimer());
130
		supprimerBouton.setData("valeur", texte);
131
		supprimerBouton.addSelectionListener(new SelectionListener<ButtonEvent>() {
132
			public void componentSelected(ButtonEvent ce) {
133
				String valeur = ce.getComponent().getData("valeur");
134
				LayoutContainer valeurLayout = valeurs.get(valeur);
135
				principalLayout.remove(valeurLayout);
136
 
137
				valeurs.remove(valeur);
138
 
139
				supprimerValeurAuRecapitulatif(valeur);
140
 
141
				actualiserLayoutGlobal();
142
			}
143
		});
144
		colonneLayout.add(supprimerBouton, new ColumnData(largeurBouton));
145
 
146
		// Ajout du layout de la valeur au layout principal
147
		principalLayout.add(colonneLayout);
148
 
149
		// Ajout de la valeur au champ récapitulatif des valeurs ajoutées
150
		ajouterValeurAuRecapitulatif(texte);
151
 
152
		actualiserLayoutGlobal();
153
	}
154
 
155
	private void actualiserLayoutGlobal() {
156
		GWT.log("Valeurs : "+getValeurs(), null);
157
		layout();
158
	}
159
 
160
	private void ajouterValeurAuRecapitulatif(String texte) {
161
		String texteRecapitulatif = "";
162
		if (champRecapitulatif.getValue() != null)	{
163
			texteRecapitulatif = champRecapitulatif.getValue();
164
		}
165
		texteRecapitulatif += texte + ";;";
166
		champRecapitulatif.setValue(texteRecapitulatif);
167
	}
168
 
169
	private void supprimerValeurAuRecapitulatif(String texte) {
170
		if (champRecapitulatif.getValue() != null)	{
171
			String texteRecapitulatif = champRecapitulatif.getValue();
172
			texteRecapitulatif = texteRecapitulatif.replace(texte + ";;", "");
173
			champRecapitulatif.setValue(texteRecapitulatif);
174
		}
175
	}
176
 
177
	public String getValeurs() {
178
		String texteRecapitulatif = "";
179
		if (champRecapitulatif.getValue() != null) {
180
			texteRecapitulatif = champRecapitulatif.getValue();
181
			texteRecapitulatif = texteRecapitulatif.replaceAll("(.*);;$", "$1");
182
		}
183
		return texteRecapitulatif;
184
	}
669 jp_milcent 185
 
186
	public void peupler(String chaineExistante) {
187
		if (chaineExistante != null) {
188
			String[] valeurs = chaineExistante.split(";;");
189
			for (int i = 0; i < valeurs.length; i++) {
190
				ajouterValeur(valeurs[i]);
191
			}
192
		}
193
	}
665 jp_milcent 194
}