Subversion Repositories eFlore/Applications.coel

Rev

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

Rev 781 Rev 782
1
package org.tela_botanica.client.vues;
1
package org.tela_botanica.client.vues;
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.i18n.Constantes;
8
import org.tela_botanica.client.i18n.Constantes;
9
import org.tela_botanica.client.images.Images;
9
import org.tela_botanica.client.images.Images;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.interfaces.Rafraichissable;
11
import org.tela_botanica.client.modeles.Configuration;
11
import org.tela_botanica.client.modeles.Configuration;
12
import org.tela_botanica.client.modeles.Valeur;
12
import org.tela_botanica.client.modeles.Valeur;
13
import org.tela_botanica.client.modeles.ValeurListe;
13
import org.tela_botanica.client.modeles.ValeurListe;
14
import org.tela_botanica.client.modeles.aDonneeListe;
14
import org.tela_botanica.client.modeles.aDonneeListe;
15
 
15
 
16
import com.extjs.gxt.ui.client.Registry;
16
import com.extjs.gxt.ui.client.Registry;
17
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
17
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
18
import com.extjs.gxt.ui.client.Style.SortDir;
18
import com.extjs.gxt.ui.client.Style.SortDir;
19
import com.extjs.gxt.ui.client.event.BaseEvent;
19
import com.extjs.gxt.ui.client.event.BaseEvent;
20
import com.extjs.gxt.ui.client.event.ButtonEvent;
20
import com.extjs.gxt.ui.client.event.ButtonEvent;
21
import com.extjs.gxt.ui.client.event.ComponentEvent;
21
import com.extjs.gxt.ui.client.event.ComponentEvent;
22
import com.extjs.gxt.ui.client.event.Events;
22
import com.extjs.gxt.ui.client.event.Events;
23
import com.extjs.gxt.ui.client.event.Listener;
23
import com.extjs.gxt.ui.client.event.Listener;
24
import com.extjs.gxt.ui.client.event.SelectionListener;
24
import com.extjs.gxt.ui.client.event.SelectionListener;
25
import com.extjs.gxt.ui.client.store.ListStore;
25
import com.extjs.gxt.ui.client.store.ListStore;
26
import com.extjs.gxt.ui.client.widget.LayoutContainer;
26
import com.extjs.gxt.ui.client.widget.LayoutContainer;
27
import com.extjs.gxt.ui.client.widget.TabItem;
27
import com.extjs.gxt.ui.client.widget.TabItem;
28
import com.extjs.gxt.ui.client.widget.TabPanel;
28
import com.extjs.gxt.ui.client.widget.TabPanel;
29
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
29
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
30
import com.extjs.gxt.ui.client.widget.form.CheckBox;
30
import com.extjs.gxt.ui.client.widget.form.CheckBox;
31
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
31
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
32
import com.extjs.gxt.ui.client.widget.form.ComboBox;
32
import com.extjs.gxt.ui.client.widget.form.ComboBox;
33
import com.extjs.gxt.ui.client.widget.form.Field;
33
import com.extjs.gxt.ui.client.widget.form.Field;
34
import com.extjs.gxt.ui.client.widget.form.FormPanel;
34
import com.extjs.gxt.ui.client.widget.form.FormPanel;
35
import com.extjs.gxt.ui.client.widget.form.Radio;
35
import com.extjs.gxt.ui.client.widget.form.Radio;
36
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
36
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
37
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
37
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
38
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
38
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
39
import com.extjs.gxt.ui.client.widget.layout.FormData;
39
import com.extjs.gxt.ui.client.widget.layout.FormData;
40
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
40
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
41
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
41
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
42
import com.google.gwt.core.client.GWT;
42
import com.google.gwt.core.client.GWT;
43
 
43
 
44
public abstract class Formulaire extends LayoutContainer implements Rafraichissable {
44
public abstract class Formulaire extends LayoutContainer implements Rafraichissable {
45
 
45
 
46
	public static final String MODE_AJOUTER = "AJOUT";
46
	public static final String MODE_AJOUTER = "AJOUT";
47
	public static final String MODE_MODIFIER = "MODIF";
47
	public static final String MODE_MODIFIER = "MODIF";
48
	
48
	
49
	protected Constantes i18nC = null;
49
	protected Constantes i18nC = null;
50
	protected Mediateur mediateur = null;
50
	protected Mediateur mediateur = null;
51
	protected Configuration config = null;
51
	protected Configuration config = null;
52
	
52
	
53
	protected String mode = null;
53
	protected String mode = null;
54
	protected int tabIndex = 100;
54
	protected int tabIndex = 100;
55
	
55
	
56
	protected FormPanel panneauFormulaire = null;
56
	protected FormPanel panneauFormulaire = null;
57
	protected ButtonBar barreOutilsValidation = null;
57
	protected ButtonBar barreOutilsValidation = null;
58
		
58
		
59
	protected String menuIdCourant = null;
59
	protected String menuIdCourant = null;
60
	protected static Boolean clicBoutonvalidation = false;
60
	protected static Boolean clicBoutonvalidation = false;
61
 
61
 
62
	public FormPanel getFormulaire() {
62
	public FormPanel getFormulaire() {
63
		return panneauFormulaire;
63
		return panneauFormulaire;
64
	}
64
	}
65
	
65
	
66
	public void initialiserFormulaire(Mediateur mediateurCourrant, String modeDeCreation, String idMenuCourrant) {
66
	public void initialiserFormulaire(Mediateur mediateurCourrant, String modeDeCreation, String idMenuCourrant) {
67
		// Initialisation de variables
67
		// Initialisation de variables
68
		mode = modeDeCreation;
68
		mode = modeDeCreation;
69
		mediateur = mediateurCourrant;
69
		mediateur = mediateurCourrant;
70
		i18nC = Mediateur.i18nC;
70
		i18nC = Mediateur.i18nC;
71
		menuIdCourant = idMenuCourrant;
71
		menuIdCourant = idMenuCourrant;
72
		config = (Configuration) Registry.get(RegistreId.CONFIG);
72
		config = (Configuration) Registry.get(RegistreId.CONFIG);
73
		
73
		
74
		// Iniatilisation du layoutContainer
74
		// Iniatilisation du layoutContainer
75
		setLayout(new FitLayout());
75
		setLayout(new FitLayout());
76
		setBorders(false);
76
		setBorders(false);
77
		
77
		
78
		// Création du panneau du FORMULAIRE GÉNÉRAL
78
		// Création du panneau du FORMULAIRE GÉNÉRAL
79
		panneauFormulaire = new FormPanel();
79
		panneauFormulaire = new FormPanel();
80
		panneauFormulaire.setBodyBorder(false);
80
		panneauFormulaire.setBodyBorder(false);
81
		panneauFormulaire.setFrame(true);
81
		panneauFormulaire.setFrame(true);
82
 		panneauFormulaire.setCollapsible(false);
82
 		panneauFormulaire.setCollapsible(false);
83
		panneauFormulaire.setButtonAlign(HorizontalAlignment.CENTER);  
83
		panneauFormulaire.setButtonAlign(HorizontalAlignment.CENTER);  
84
		panneauFormulaire.setLayout(new FitLayout());
84
		panneauFormulaire.setLayout(new FitLayout());
85
 
85
 
86
		if (modeDeCreation.equals(MODE_AJOUTER)) {
86
		if (modeDeCreation.equals(MODE_AJOUTER)) {
87
			panneauFormulaire.setIcon(Images.ICONES.formAjouter());
87
			panneauFormulaire.setIcon(Images.ICONES.formAjouter());
88
		} else if (modeDeCreation.equals(MODE_AJOUTER)) {
88
		} else if (modeDeCreation.equals(MODE_AJOUTER)) {
89
			panneauFormulaire.setIcon(Images.ICONES.formModifier());
89
			panneauFormulaire.setIcon(Images.ICONES.formModifier());
90
		}
90
		}
91
		
91
		
92
		barreOutilsValidation = new FormulaireBarreValidation(creerEcouteurValidation());
92
		barreOutilsValidation = new FormulaireBarreValidation(creerEcouteurValidation());
93
		panneauFormulaire.setBottomComponent(barreOutilsValidation);
93
		panneauFormulaire.setBottomComponent(barreOutilsValidation);
94
		
94
		
95
		add(panneauFormulaire);
95
		add(panneauFormulaire);
96
	}
96
	}
97
	
97
	
98
	protected abstract SelectionListener<ButtonEvent> creerEcouteurValidation();
98
	protected abstract SelectionListener<ButtonEvent> creerEcouteurValidation();
99
	
99
	
100
	protected abstract void soumettreFormulaire(Rafraichissable vueARafraichir);
100
	protected abstract void soumettreFormulaire();
101
		
101
	
102
	protected TabItem creerOnglet(String nom, String id) {
102
	protected TabItem creerOnglet(String nom, String id) {
103
		TabItem onglet = new TabItem();
103
		TabItem onglet = new TabItem();
104
		onglet.setId(id);
104
		onglet.setId(id);
105
		onglet.setText(nom);
105
		onglet.setText(nom);
106
		FormulaireOnglet.parametrer(onglet);
106
		FormulaireOnglet.parametrer(onglet);
107
		return onglet;
107
		return onglet;
108
	}
108
	}
109
 
109
 
110
	protected void verifierApresRafraichissement() {
110
	protected void controlerFermetureApresRafraichissement() {
111
		// Si le bouton Valider a été cliqué, nous affichons la liste des structures
111
		// Si le bouton Valider a été cliqué, nous affichons la liste des structures
112
		if (clicBoutonvalidation) {
112
		if (clicBoutonvalidation) {
113
			mediateur.clicMenu(menuIdCourant);
-
 
114
			clicBoutonvalidation = false;
113
			fermerFormulaire();
115
		}
114
		}
-
 
115
	}
-
 
116
	
-
 
117
	protected void fermerFormulaire() {
-
 
118
		clicBoutonvalidation = false;
-
 
119
		panneauFormulaire.setEnabled(false);
-
 
120
		mediateur.clicMenu(menuIdCourant);
116
	}
121
	}
117
	
122
	
118
	/** Méthode simplifiant la création de FormLayout.
123
	/** Méthode simplifiant la création de FormLayout.
119
	 * Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.
124
	 * Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.
120
	 * 
125
	 * 
121
	 * @param labelWidth largeur des labels. 
126
	 * @param labelWidth largeur des labels. 
122
	 * @param labelAlign alignement des labels
127
	 * @param labelAlign alignement des labels
123
	 * @return
128
	 * @return
124
	 */
129
	 */
125
	protected static FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
130
	protected static FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
126
		FormLayout formLayout = new FormLayout();
131
		FormLayout formLayout = new FormLayout();
127
		if (labelWidth != null) {
132
		if (labelWidth != null) {
128
			formLayout.setLabelWidth(labelWidth);
133
			formLayout.setLabelWidth(labelWidth);
129
		}
134
		}
130
		if (labelAlign != null) {
135
		if (labelAlign != null) {
131
			formLayout.setLabelAlign(labelAlign);
136
			formLayout.setLabelAlign(labelAlign);
132
		}
137
		}
133
		return formLayout;
138
		return formLayout;
134
	}
139
	}
135
	
140
	
136
	/** Méthode simplifiant la création de bouton radio oui/non
141
	/** Méthode simplifiant la création de bouton radio oui/non
137
	 * 
142
	 * 
138
	 * @param listeNom nom de la liste de valeur
143
	 * @param listeNom nom de la liste de valeur
139
	 * @return
144
	 * @return
140
	 */
145
	 */
141
	protected RadioGroup creerChoixUniqueRadioGroupe(String groupeNom, String listeNom) {
146
	protected RadioGroup creerChoixUniqueRadioGroupe(String groupeNom, String listeNom) {
142
		groupeNom += "_grp";
147
		groupeNom += "_grp";
143
		// NOTE : il semblerait qu'il faille aussi utiliser setName() pour éviter tout problème...
148
		// NOTE : il semblerait qu'il faille aussi utiliser setName() pour éviter tout problème...
144
		RadioGroup radioGroup = new RadioGroup(groupeNom);
149
		RadioGroup radioGroup = new RadioGroup(groupeNom);
145
		radioGroup.setName(groupeNom);
150
		radioGroup.setName(groupeNom);
146
 
151
 
147
		if (listeNom.equals("ouiNon")) {
152
		if (listeNom.equals("ouiNon")) {
148
			ValeurListe ouiNonListe = new ValeurListe();
153
			ValeurListe ouiNonListe = new ValeurListe();
149
			ouiNonListe.ajouter(new Valeur("1", i18nC.oui(), "NULL", "NULL"));
154
			ouiNonListe.ajouter(new Valeur("1", i18nC.oui(), "NULL", "NULL"));
150
			ouiNonListe.ajouter(new Valeur("0", i18nC.non(), "NULL", "NULL"));
155
			ouiNonListe.ajouter(new Valeur("0", i18nC.non(), "NULL", "NULL"));
151
			creerChoixUniqueBoutonRadio(radioGroup, ouiNonListe);
156
			creerChoixUniqueBoutonRadio(radioGroup, ouiNonListe);
152
		}
157
		}
153
		
158
		
154
		return radioGroup;
159
		return radioGroup;
155
	}
160
	}
156
	
161
	
157
	protected void creerChoixUniqueBoutonRadio(RadioGroup radioGroupe, ValeurListe listeValeurs) {
162
	protected void creerChoixUniqueBoutonRadio(RadioGroup radioGroupe, ValeurListe listeValeurs) {
158
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
163
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
159
			Valeur val = listeValeurs.get(it.next());
164
			Valeur val = listeValeurs.get(it.next());
160
			
165
			
161
			Radio radioBtn = new Radio();
166
			Radio radioBtn = new Radio();
162
			radioBtn.setName(radioGroupe.getName().replace("_grp", ""));
167
			radioBtn.setName(radioGroupe.getName().replace("_grp", ""));
163
			radioBtn.setId(val.getId()+"_"+radioBtn.getName());
168
			radioBtn.setId(val.getId()+"_"+radioBtn.getName());
164
			radioBtn.setBoxLabel(val.getNom());
169
			radioBtn.setBoxLabel(val.getNom());
165
			radioBtn.setValueAttribute(val.getId());
170
			radioBtn.setValueAttribute(val.getId());
166
			radioBtn.addListener(Events.Change, new Listener<ComponentEvent>() {
171
			radioBtn.addListener(Events.Change, new Listener<ComponentEvent>() {
167
	
172
	
168
				public void handleEvent(ComponentEvent be) {
173
				public void handleEvent(ComponentEvent be) {
169
					//Window.alert(((Radio) be.component).getName());
174
					//Window.alert(((Radio) be.component).getName());
170
					afficherChampSupplementaire(((Radio) be.getComponent()));
175
					afficherChampSupplementaire(((Radio) be.getComponent()));
171
				}
176
				}
172
				
177
				
173
			});
178
			});
174
			
179
			
175
			if (! val.getDescription().equals("NULL")) {
180
			if (! val.getDescription().equals("NULL")) {
176
				radioBtn.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
181
				radioBtn.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
177
			}
182
			}
178
			radioGroupe.add(radioBtn);
183
			radioGroupe.add(radioBtn);
179
		}
184
		}
180
	}
185
	}
181
	
186
	
182
	protected void afficherChampSupplementaire(Radio radioBtn) {
187
	protected void afficherChampSupplementaire(Radio radioBtn) {
183
		GWT.log("Vous devez redéfinir la méthode afficherChampSupplementaire(Radio radioBtn) dans votre classe formulaire.", null);
188
		GWT.log("Vous devez redéfinir la méthode afficherChampSupplementaire(Radio radioBtn) dans votre classe formulaire.", null);
184
	};
189
	};
185
	
190
	
186
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
191
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
187
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
192
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
188
	 * Ajoute ou pas un champ "Autre".
193
	 * Ajoute ou pas un champ "Autre".
189
	 * 
194
	 * 
190
	 * @return ContentPanel le panneau contenant les cases à cocher
195
	 * @return ContentPanel le panneau contenant les cases à cocher
191
	 */
196
	 */
192
	protected LayoutContainer creerChoixMultipleCp() {
197
	protected LayoutContainer creerChoixMultipleCp() {
193
		LayoutContainer conteneur = new LayoutContainer();
198
		LayoutContainer conteneur = new LayoutContainer();
194
		conteneur.setLayout(creerFormLayout(650, LabelAlign.TOP));
199
		conteneur.setLayout(creerFormLayout(650, LabelAlign.TOP));
195
		return conteneur;
200
		return conteneur;
196
	}
201
	}
197
	
202
	
198
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
203
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
199
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
204
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
200
	 * Ajoute ou pas un champ "Autre".
205
	 * Ajoute ou pas un champ "Autre".
201
	 * 
206
	 * 
202
	 * @param cp panneau conteant le groupe de case à cocher
207
	 * @param cp panneau conteant le groupe de case à cocher
203
	 * @param cacGroup le groupe de case à cocher
208
	 * @param cacGroup le groupe de case à cocher
204
	 * @param listeValeurs la liste de valeurs à transformer en case à cocher
209
	 * @param listeValeurs la liste de valeurs à transformer en case à cocher
205
	 * @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître 
210
	 * @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître 
206
	 * @return
211
	 * @return
207
	 */
212
	 */
208
	protected void creerChoixMultipleCac(LayoutContainer cp, final CheckBoxGroup cacGroupe, ValeurListe listeValeurs, final Field<String> autreChp) {
213
	protected void creerChoixMultipleCac(LayoutContainer cp, final CheckBoxGroup cacGroupe, ValeurListe listeValeurs, final Field<String> autreChp) {
209
		cp.addListener(Events.Hide, new Listener<BaseEvent>() {
214
		cp.addListener(Events.Hide, new Listener<BaseEvent>() {
210
 
215
 
211
			public void handleEvent(BaseEvent be) {
216
			public void handleEvent(BaseEvent be) {
212
				cacGroupe.reset();
217
				cacGroupe.reset();
213
				autreChp.setValue("");
218
				autreChp.setValue("");
214
			}
219
			}
215
			
220
			
216
		});
221
		});
217
		
222
		
218
		cacGroupe.setAutoWidth(true);
223
		cacGroupe.setAutoWidth(true);
219
		cacGroupe.setStyleAttribute("padding", "3px");
224
		cacGroupe.setStyleAttribute("padding", "3px");
220
		cacGroupe.setData("liste_id", listeValeurs.getId());
225
		cacGroupe.setData("liste_id", listeValeurs.getId());
221
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
226
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
222
			Valeur val = listeValeurs.get(it.next());
227
			Valeur val = listeValeurs.get(it.next());
223
			String nom =  val.get("nom");
228
			String nom =  val.get("nom");
224
			CheckBox cac = new CheckBox();
229
			CheckBox cac = new CheckBox();
225
			cac.setId("val-"+val.getId());
230
			cac.setId("val-"+val.getId());
226
			cac.setData("id", val.getId());
231
			cac.setData("id", val.getId());
227
			cac.setBoxLabel(nom);
232
			cac.setBoxLabel(nom);
228
			if (! val.getDescription().equals("NULL")) {
233
			if (! val.getDescription().equals("NULL")) {
229
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
234
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
230
			}
235
			}
231
			cacGroupe.add(cac);
236
			cacGroupe.add(cac);
232
		}
237
		}
233
		cp.add(cacGroupe);
238
		cp.add(cacGroupe);
234
		
239
		
235
		if (autreChp != null) {
240
		if (autreChp != null) {
236
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
241
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
237
			LayoutContainer conteneur = new LayoutContainer();
242
			LayoutContainer conteneur = new LayoutContainer();
238
			conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));
243
			conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));
239
			autreChp.setId("autre-"+listeValeurs.getId());
244
			autreChp.setId("autre-"+listeValeurs.getId());
240
			autreChp.setFieldLabel("Autre");
245
			autreChp.setFieldLabel("Autre");
241
			autreChp.setLabelStyle("font-weight:normal;");
246
			autreChp.setLabelStyle("font-weight:normal;");
242
			conteneur.add(autreChp, new FormData(500, 0));
247
			conteneur.add(autreChp, new FormData(500, 0));
243
			
248
			
244
			cp.add(conteneur);
249
			cp.add(conteneur);
245
		}
250
		}
246
		cp.layout();
251
		cp.layout();
247
	}
252
	}
248
	
253
	
249
	@SuppressWarnings({"unchecked"})
254
	@SuppressWarnings({"unchecked"})
250
	public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ListStore store, ComboBox combo) {
255
	public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ListStore store, ComboBox combo) {
251
		List<?> liste = listeValeurs.toList();
256
		List<?> liste = listeValeurs.toList();
252
		if (liste.size() > 0) {
257
		if (liste.size() > 0) {
253
			store.removeAll();
258
			store.removeAll();
254
			store.add(liste);
259
			store.add(liste);
255
			store.sort("nom", SortDir.ASC);
260
			store.sort("nom", SortDir.ASC);
256
			combo.setStore(store);
261
			combo.setStore(store);
257
		}
262
		}
258
	}
263
	}
259
	
264
	
260
}
265
}