Subversion Repositories eFlore/Applications.coel

Rev

Rev 1318 | Rev 1415 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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