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 |
}
|