Subversion Repositories eFlore/Applications.coel

Rev

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