Subversion Repositories eFlore/Applications.coel

Rev

Rev 1354 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
839 jpm 1
package org.tela_botanica.client.composants;
2
 
3
import java.util.Iterator;
954 jpm 4
import java.util.List;
839 jpm 5
 
6
import org.tela_botanica.client.Mediateur;
7
import org.tela_botanica.client.RegistreId;
907 jpm 8
import org.tela_botanica.client.configuration.Configuration;
839 jpm 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.Valeur;
11
import org.tela_botanica.client.modeles.ValeurListe;
954 jpm 12
import org.tela_botanica.client.modeles.aDonnee;
1354 cyprien 13
import org.tela_botanica.client.util.Debug;
954 jpm 14
import org.tela_botanica.client.util.UtilString;
839 jpm 15
 
16
import com.extjs.gxt.ui.client.Registry;
17
import com.extjs.gxt.ui.client.event.BaseEvent;
18
import com.extjs.gxt.ui.client.event.Events;
19
import com.extjs.gxt.ui.client.event.Listener;
20
import com.extjs.gxt.ui.client.widget.LayoutContainer;
21
import com.extjs.gxt.ui.client.widget.form.CheckBox;
22
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
23
import com.extjs.gxt.ui.client.widget.form.Field;
1147 gduche 24
import com.extjs.gxt.ui.client.widget.form.LabelField;
1299 cyprien 25
import com.extjs.gxt.ui.client.widget.form.TextArea;
839 jpm 26
import com.extjs.gxt.ui.client.widget.form.TextField;
27
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
1147 gduche 28
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
839 jpm 29
import com.extjs.gxt.ui.client.widget.layout.FormData;
30
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
31
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
32
import com.google.gwt.core.client.GWT;
33
 
34
public class ChampCaseACocher extends LayoutContainer implements Rafraichissable {
35
 
36
	private Configuration config = null;
37
	private Mediateur mediateur = null;
38
 
39
	private CheckBoxGroup groupeCaseACocher = null;
40
	private boolean avoirChampAutre = false;
41
	private Field<String> champAutre = null;
42
 
43
	private String listeValeursCode = null;
44
 
45
	public ChampCaseACocher(String label, String listeCode, boolean avoirChampAutre) {
46
		config = (Configuration) Registry.get(RegistreId.CONFIG);
47
		mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
48
 
49
		setLayout(creerFormLayout(650, LabelAlign.TOP));
50
		groupeCaseACocher = new CheckBoxGroup();
51
		setLabel(label);
52
		setChampAutre(avoirChampAutre);
53
 
54
		setListeCode(listeCode);
55
		mediateur.obtenirListeValeurEtRafraichir(this, getListeCode());
56
	}
57
 
58
	public String getListeCode() {
59
		return listeValeursCode;
60
	}
61
	public void setListeCode(String code) {
62
		listeValeursCode = code;
63
	}
64
 
65
	public void setLabel(String label) {
66
		groupeCaseACocher.setFieldLabel(label);
67
	}
68
 
954 jpm 69
	public boolean avoirChampAutre() {
70
		return avoirChampAutre;
71
	}
839 jpm 72
	public void setChampAutre(boolean avoirChamp) {
73
		avoirChampAutre = avoirChamp;
74
		if (avoirChampAutre) {
1299 cyprien 75
			champAutre = new TextArea();
76
			champAutre.setWidth("80%");
839 jpm 77
		}
78
	}
79
 
954 jpm 80
	public String getValeur() {
81
		String valeur = "";
82
 
83
		List<CheckBox> liste = groupeCaseACocher.getValues();
84
		if (liste != null) {
85
			int taille = liste.size();
86
			for (int i = 0; i < taille; i++) {
87
				CheckBox cac = liste.get(i);
88
				if (cac.isEnabled()) {
89
					valeur += aDonnee.SEPARATEUR_VALEURS+cac.getData("id");
90
				}
91
			}
92
 
93
		}
94
 
95
		if (avoirChampAutre() && !UtilString.isEmpty(champAutre.getValue())) {
955 jpm 96
			valeur += aDonnee.SEPARATEUR_VALEURS+"AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR+champAutre.getValue();
954 jpm 97
		}
98
 
1354 cyprien 99
		if (!UtilString.isEmpty(valeur)) {
100
			valeur = valeur.replaceFirst("^"+aDonnee.SEPARATEUR_VALEURS, "");
954 jpm 101
		}
1354 cyprien 102
 
954 jpm 103
		return valeur;
104
	}
105
 
106
	public void peupler(String donnees) {
107
		String[] valeurs = donnees.split(aDonnee.SEPARATEUR_VALEURS);
108
		for (int i = 0; i < valeurs.length; i++) {
955 jpm 109
			if (valeurs[i].startsWith("AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR)) {
110
				champAutre.setValue(valeurs[i].replaceFirst("^AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR, ""));
954 jpm 111
			} else {
112
				//TODO : check : List<CheckBox> cases = groupeCac.getAll();
113
				List<Field<?>> cases = groupeCaseACocher.getAll();
114
				for (int j = 0; j < cases.size(); j++) {
115
					if (cases.get(j).getId().equals("val-"+valeurs[i])) {
116
						((CheckBox) cases.get(j)).setValue(true);
117
					}
118
				}
119
			}
120
		}
121
	}
122
 
839 jpm 123
	private FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
124
		FormLayout formLayout = new FormLayout();
125
		if (labelWidth != null) {
126
			formLayout.setLabelWidth(labelWidth);
127
		}
128
		if (labelAlign != null) {
129
			formLayout.setLabelAlign(labelAlign);
130
		}
131
		return formLayout;
132
	}
133
 
134
	private void creerChoixMultipleCac(ValeurListe listeValeurs) {
135
		addListener(Events.Hide, new Listener<BaseEvent>() {
136
			public void handleEvent(BaseEvent be) {
137
				groupeCaseACocher.reset();
954 jpm 138
				if (avoirChampAutre()) {
839 jpm 139
					champAutre.setValue("");
140
				}
141
			}
142
		});
143
 
144
		groupeCaseACocher.setAutoWidth(true);
145
		groupeCaseACocher.setStyleAttribute("padding", "3px");
146
		groupeCaseACocher.setData("liste_id", listeValeurs.getId());
147
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
148
			Valeur val = listeValeurs.get(it.next());
149
			String nom =  val.get("nom");
150
			CheckBox cac = new CheckBox();
151
			cac.setId("val-"+val.getId());
152
			cac.setData("id", val.getId());
153
			cac.setBoxLabel(nom);
154
			if (! val.getDescription().equals("NULL")) {
155
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
156
			}
157
			groupeCaseACocher.add(cac);
158
		}
159
		add(groupeCaseACocher);
160
 
1341 cyprien 161
		LayoutContainer conteneur;
954 jpm 162
		if (avoirChampAutre()) {
839 jpm 163
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
1341 cyprien 164
			conteneur = new LayoutContainer();
1147 gduche 165
			conteneur.setLayout(new FlowLayout());
166
			conteneur.add(new LabelField("Autre : "));
1368 cyprien 167
			champAutre.setId("autre-"+listeValeurs.getId());
839 jpm 168
			champAutre.setLabelStyle("font-weight:normal;");
169
			conteneur.add(champAutre, new FormData(500, 0));
170
 
171
			add(conteneur);
172
		}
173
		layout();
174
	}
175
 
176
	public void rafraichir(Object nouvellesDonnees) {
177
		if (nouvellesDonnees instanceof ValeurListe) {
178
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
179
			if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {
180
				creerChoixMultipleCac(listeValeurs);
181
			}
182
		} else {
183
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
184
		}
185
	}
186
 
187
}