Subversion Repositories eFlore/Applications.coel

Rev

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