Subversion Repositories eFlore/Applications.coel

Rev

Rev 907 | Go to most recent revision | Details | 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;
4
 
5
import org.tela_botanica.client.Mediateur;
6
import org.tela_botanica.client.RegistreId;
7
import org.tela_botanica.client.interfaces.Rafraichissable;
8
import org.tela_botanica.client.modeles.Configuration;
9
import org.tela_botanica.client.modeles.Valeur;
10
import org.tela_botanica.client.modeles.ValeurListe;
11
 
12
import com.extjs.gxt.ui.client.Registry;
13
import com.extjs.gxt.ui.client.event.BaseEvent;
14
import com.extjs.gxt.ui.client.event.Events;
15
import com.extjs.gxt.ui.client.event.Listener;
16
import com.extjs.gxt.ui.client.widget.LayoutContainer;
17
import com.extjs.gxt.ui.client.widget.form.CheckBox;
18
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
19
import com.extjs.gxt.ui.client.widget.form.Field;
20
import com.extjs.gxt.ui.client.widget.form.TextField;
21
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
22
import com.extjs.gxt.ui.client.widget.layout.FormData;
23
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
24
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
25
import com.google.gwt.core.client.GWT;
26
 
27
public class ChampCaseACocher extends LayoutContainer implements Rafraichissable {
28
 
29
	private Configuration config = null;
30
	private Mediateur mediateur = null;
31
 
32
	private CheckBoxGroup groupeCaseACocher = null;
33
	private boolean avoirChampAutre = false;
34
	private Field<String> champAutre = null;
35
 
36
	private String listeValeursCode = null;
37
 
38
	public ChampCaseACocher(String label, String listeCode, boolean avoirChampAutre) {
39
		config = (Configuration) Registry.get(RegistreId.CONFIG);
40
		mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
41
 
42
		setLayout(creerFormLayout(650, LabelAlign.TOP));
43
		groupeCaseACocher = new CheckBoxGroup();
44
		setLabel(label);
45
		setChampAutre(avoirChampAutre);
46
 
47
		setListeCode(listeCode);
48
		mediateur.obtenirListeValeurEtRafraichir(this, getListeCode());
49
	}
50
 
51
	public String getListeCode() {
52
		return listeValeursCode;
53
	}
54
	public void setListeCode(String code) {
55
		listeValeursCode = code;
56
	}
57
 
58
	public void setLabel(String label) {
59
		groupeCaseACocher.setFieldLabel(label);
60
	}
61
 
62
	public void setChampAutre(boolean avoirChamp) {
63
		avoirChampAutre = avoirChamp;
64
		if (avoirChampAutre) {
65
			champAutre = new TextField<String>();
66
		}
67
	}
68
 
69
	private FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
70
		FormLayout formLayout = new FormLayout();
71
		if (labelWidth != null) {
72
			formLayout.setLabelWidth(labelWidth);
73
		}
74
		if (labelAlign != null) {
75
			formLayout.setLabelAlign(labelAlign);
76
		}
77
		return formLayout;
78
	}
79
 
80
	private void creerChoixMultipleCac(ValeurListe listeValeurs) {
81
		addListener(Events.Hide, new Listener<BaseEvent>() {
82
			public void handleEvent(BaseEvent be) {
83
				groupeCaseACocher.reset();
84
				if (avoirChampAutre) {
85
					champAutre.setValue("");
86
				}
87
			}
88
		});
89
 
90
		groupeCaseACocher.setAutoWidth(true);
91
		groupeCaseACocher.setStyleAttribute("padding", "3px");
92
		groupeCaseACocher.setData("liste_id", listeValeurs.getId());
93
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
94
			Valeur val = listeValeurs.get(it.next());
95
			String nom =  val.get("nom");
96
			CheckBox cac = new CheckBox();
97
			cac.setId("val-"+val.getId());
98
			cac.setData("id", val.getId());
99
			cac.setBoxLabel(nom);
100
			if (! val.getDescription().equals("NULL")) {
101
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
102
			}
103
			groupeCaseACocher.add(cac);
104
		}
105
		add(groupeCaseACocher);
106
 
107
		if (avoirChampAutre) {
108
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
109
			LayoutContainer conteneur = new LayoutContainer();
110
			conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));
111
			champAutre.setId("autre-"+listeValeurs.getId());
112
			champAutre.setFieldLabel("Autre");
113
			champAutre.setLabelStyle("font-weight:normal;");
114
			conteneur.add(champAutre, new FormData(500, 0));
115
 
116
			add(conteneur);
117
		}
118
		layout();
119
	}
120
 
121
	@Override
122
	public void rafraichir(Object nouvellesDonnees) {
123
		if (nouvellesDonnees instanceof ValeurListe) {
124
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
125
			if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {
126
				creerChoixMultipleCac(listeValeurs);
127
			}
128
		} else {
129
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
130
		}
131
	}
132
 
133
}