Subversion Repositories eFlore/Applications.coel

Rev

Rev 1513 | Rev 1661 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
637 jp_milcent 1
package org.tela_botanica.client.vues;
2
 
639 jp_milcent 3
import java.util.Iterator;
687 jp_milcent 4
import java.util.List;
639 jp_milcent 5
 
980 jpm 6
import org.tela_botanica.client.ComposantClass;
637 jp_milcent 7
import org.tela_botanica.client.Mediateur;
687 jp_milcent 8
import org.tela_botanica.client.RegistreId;
980 jpm 9
import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;
1239 cyprien 10
import org.tela_botanica.client.composants.InfoLogger;
907 jpm 11
import org.tela_botanica.client.configuration.Configuration;
637 jp_milcent 12
import org.tela_botanica.client.i18n.Constantes;
1076 jpm 13
import org.tela_botanica.client.i18n.ErrorMessages;
637 jp_milcent 14
import org.tela_botanica.client.images.Images;
687 jp_milcent 15
import org.tela_botanica.client.interfaces.Rafraichissable;
639 jp_milcent 16
import org.tela_botanica.client.modeles.Valeur;
17
import org.tela_botanica.client.modeles.ValeurListe;
703 jp_milcent 18
import org.tela_botanica.client.modeles.aDonneeListe;
1262 cyprien 19
import org.tela_botanica.client.util.Debug;
637 jp_milcent 20
 
687 jp_milcent 21
import com.extjs.gxt.ui.client.Registry;
637 jp_milcent 22
import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
703 jp_milcent 23
import com.extjs.gxt.ui.client.Style.SortDir;
639 jp_milcent 24
import com.extjs.gxt.ui.client.event.BaseEvent;
637 jp_milcent 25
import com.extjs.gxt.ui.client.event.ButtonEvent;
639 jp_milcent 26
import com.extjs.gxt.ui.client.event.ComponentEvent;
27
import com.extjs.gxt.ui.client.event.Events;
28
import com.extjs.gxt.ui.client.event.Listener;
637 jp_milcent 29
import com.extjs.gxt.ui.client.event.SelectionListener;
703 jp_milcent 30
import com.extjs.gxt.ui.client.store.ListStore;
1164 jpm 31
import com.extjs.gxt.ui.client.widget.Info;
637 jp_milcent 32
import com.extjs.gxt.ui.client.widget.LayoutContainer;
33
import com.extjs.gxt.ui.client.widget.TabItem;
934 jpm 34
import com.extjs.gxt.ui.client.widget.button.Button;
637 jp_milcent 35
import com.extjs.gxt.ui.client.widget.button.ButtonBar;
639 jp_milcent 36
import com.extjs.gxt.ui.client.widget.form.CheckBox;
37
import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;
703 jp_milcent 38
import com.extjs.gxt.ui.client.widget.form.ComboBox;
639 jp_milcent 39
import com.extjs.gxt.ui.client.widget.form.Field;
637 jp_milcent 40
import com.extjs.gxt.ui.client.widget.form.FormPanel;
639 jp_milcent 41
import com.extjs.gxt.ui.client.widget.form.Radio;
42
import com.extjs.gxt.ui.client.widget.form.RadioGroup;
980 jpm 43
import com.extjs.gxt.ui.client.widget.form.TextArea;
44
import com.extjs.gxt.ui.client.widget.form.TextField;
639 jp_milcent 45
import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;
637 jp_milcent 46
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
639 jp_milcent 47
import com.extjs.gxt.ui.client.widget.layout.FormData;
637 jp_milcent 48
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
639 jp_milcent 49
import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;
687 jp_milcent 50
import com.google.gwt.core.client.GWT;
637 jp_milcent 51
 
687 jp_milcent 52
public abstract class Formulaire extends LayoutContainer implements Rafraichissable {
637 jp_milcent 53
 
54
	public static final String MODE_AJOUTER = "AJOUT";
55
	public static final String MODE_MODIFIER = "MODIF";
56
 
934 jpm 57
	public Constantes i18nC = null;
1076 jpm 58
	public ErrorMessages i18nM = null;
934 jpm 59
	public Mediateur mediateur = null;
60
	public Configuration config = null;
687 jp_milcent 61
 
934 jpm 62
	public String mode = null;
63
	public int tabIndex = 100;
637 jp_milcent 64
 
934 jpm 65
	public FormPanel panneauFormulaire = null;
66
	public ButtonBar barreOutilsValidation = null;
775 jpm 67
 
934 jpm 68
	public String menuIdCourant = null;
69
	public static Boolean clicBoutonvalidation = false;
70
	public Rafraichissable vueExterneARafraichirApresValidation = null;
775 jpm 71
 
72
	public FormPanel getFormulaire() {
73
		return panneauFormulaire;
74
	}
639 jp_milcent 75
 
648 jp_milcent 76
	public void initialiserFormulaire(Mediateur mediateurCourrant, String modeDeCreation, String idMenuCourrant) {
637 jp_milcent 77
		// Initialisation de variables
78
		mode = modeDeCreation;
79
		mediateur = mediateurCourrant;
80
		i18nC = Mediateur.i18nC;
1077 jpm 81
		i18nM = Mediateur.i18nM;
648 jp_milcent 82
		menuIdCourant = idMenuCourrant;
687 jp_milcent 83
		config = (Configuration) Registry.get(RegistreId.CONFIG);
648 jp_milcent 84
 
637 jp_milcent 85
		// Iniatilisation du layoutContainer
86
		setLayout(new FitLayout());
87
		setBorders(false);
88
 
89
		// Création du panneau du FORMULAIRE GÉNÉRAL
90
		panneauFormulaire = new FormPanel();
91
		panneauFormulaire.setBodyBorder(false);
92
		panneauFormulaire.setFrame(true);
775 jpm 93
 		panneauFormulaire.setCollapsible(false);
637 jp_milcent 94
		panneauFormulaire.setButtonAlign(HorizontalAlignment.CENTER);
95
		panneauFormulaire.setLayout(new FitLayout());
1284 gduche 96
		panneauFormulaire.setPadding(0);
97
 
775 jpm 98
		if (modeDeCreation.equals(MODE_AJOUTER)) {
99
			panneauFormulaire.setIcon(Images.ICONES.formAjouter());
100
		} else if (modeDeCreation.equals(MODE_AJOUTER)) {
101
			panneauFormulaire.setIcon(Images.ICONES.formModifier());
102
		}
639 jp_milcent 103
 
775 jpm 104
		barreOutilsValidation = new FormulaireBarreValidation(creerEcouteurValidation());
105
		panneauFormulaire.setBottomComponent(barreOutilsValidation);
648 jp_milcent 106
 
107
		add(panneauFormulaire);
637 jp_milcent 108
	}
109
 
934 jpm 110
	public SelectionListener<ButtonEvent> creerEcouteurValidation() {
111
		SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {
112
			public void componentSelected(ButtonEvent ce) {
1292 cyprien 113
 
934 jpm 114
				String code = ((Button) ce.getComponent()).getData("code");
115
				if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {
1164 jpm 116
					if (mediateur.getUtilisateur().isIdentifie()) {
1239 cyprien 117
						clicBoutonvalidation = true;
1164 jpm 118
						soumettreFormulaire();
1239 cyprien 119
 
1164 jpm 120
					} else {
1239 cyprien 121
						InfoLogger.display(i18nC.modeAnonyme(), i18nC.identificationNecessaire());
1164 jpm 122
					}
934 jpm 123
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {
1164 jpm 124
					if (mediateur.getUtilisateur().isIdentifie()) {
125
						soumettreFormulaire();
126
					} else {
1239 cyprien 127
						InfoLogger.display(i18nC.modeAnonyme(), i18nC.identificationNecessaire());
1164 jpm 128
					}
934 jpm 129
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {
1613 aurelien 130
					fermerFormulaire();
934 jpm 131
				} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {
132
					reinitialiserFormulaire();
133
				}
134
			}
135
		};
136
 
137
		return ecouteur;
138
	}
637 jp_milcent 139
 
934 jpm 140
	public abstract boolean verifierFormulaire();
787 jpm 141
 
934 jpm 142
	public abstract boolean soumettreFormulaire();
782 jpm 143
 
934 jpm 144
	public abstract void reinitialiserFormulaire();
145
 
146
	public TabItem creerOnglet(String nom, String id) {
637 jp_milcent 147
		TabItem onglet = new TabItem();
148
		onglet.setId(id);
149
		onglet.setText(nom);
687 jp_milcent 150
		FormulaireOnglet.parametrer(onglet);
637 jp_milcent 151
		return onglet;
152
	}
639 jp_milcent 153
 
1239 cyprien 154
	public void controlerFermeture() {
639 jp_milcent 155
		if (clicBoutonvalidation) {
782 jpm 156
			fermerFormulaire();
1239 cyprien 157
		}
639 jp_milcent 158
	}
159
 
934 jpm 160
	public void fermerFormulaire() {
782 jpm 161
		clicBoutonvalidation = false;
162
		panneauFormulaire.setEnabled(false);
1613 aurelien 163
		surFermetureFormulaire();
164
		//mediateur.clicMenu(menuIdCourant);
782 jpm 165
	}
166
 
1613 aurelien 167
	public void surFermetureFormulaire() {
168
		// A surcharger si jamais une action spécifique doit être entreprise
169
	}
170
 
639 jp_milcent 171
	/** Méthode simplifiant la création de FormLayout.
172
	 * Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.
173
	 *
174
	 * @param labelWidth largeur des labels.
175
	 * @param labelAlign alignement des labels
176
	 * @return
177
	 */
912 jpm 178
	public static FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {
639 jp_milcent 179
		FormLayout formLayout = new FormLayout();
180
		if (labelWidth != null) {
181
			formLayout.setLabelWidth(labelWidth);
182
		}
183
		if (labelAlign != null) {
184
			formLayout.setLabelAlign(labelAlign);
185
		}
186
		return formLayout;
187
	}
188
 
189
	/** Méthode simplifiant la création de bouton radio oui/non
190
	 *
191
	 * @param listeNom nom de la liste de valeur
192
	 * @return
193
	 */
934 jpm 194
	public RadioGroup creerChoixUniqueRadioGroupe(String groupeNom, String listeNom) {
639 jp_milcent 195
		groupeNom += "_grp";
196
		// NOTE : il semblerait qu'il faille aussi utiliser setName() pour éviter tout problème...
197
		RadioGroup radioGroup = new RadioGroup(groupeNom);
198
		radioGroup.setName(groupeNom);
199
 
200
		if (listeNom.equals("ouiNon")) {
201
			ValeurListe ouiNonListe = new ValeurListe();
202
			ouiNonListe.ajouter(new Valeur("1", i18nC.oui(), "NULL", "NULL"));
203
			ouiNonListe.ajouter(new Valeur("0", i18nC.non(), "NULL", "NULL"));
204
			creerChoixUniqueBoutonRadio(radioGroup, ouiNonListe);
205
		}
206
 
207
		return radioGroup;
208
	}
209
 
934 jpm 210
	public void creerChoixUniqueBoutonRadio(RadioGroup radioGroupe, ValeurListe listeValeurs) {
639 jp_milcent 211
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
212
			Valeur val = listeValeurs.get(it.next());
213
 
214
			Radio radioBtn = new Radio();
215
			radioBtn.setName(radioGroupe.getName().replace("_grp", ""));
216
			radioBtn.setId(val.getId()+"_"+radioBtn.getName());
217
			radioBtn.setBoxLabel(val.getNom());
218
			radioBtn.setValueAttribute(val.getId());
219
			radioBtn.addListener(Events.Change, new Listener<ComponentEvent>() {
220
 
221
				public void handleEvent(ComponentEvent be) {
222
					//Window.alert(((Radio) be.component).getName());
223
					afficherChampSupplementaire(((Radio) be.getComponent()));
224
				}
225
 
226
			});
227
 
228
			if (! val.getDescription().equals("NULL")) {
229
				radioBtn.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
230
			}
231
			radioGroupe.add(radioBtn);
232
		}
233
	}
234
 
934 jpm 235
	public void afficherChampSupplementaire(Radio radioBtn) {
775 jpm 236
		GWT.log("Vous devez redéfinir la méthode afficherChampSupplementaire(Radio radioBtn) dans votre classe formulaire.", null);
237
	};
639 jp_milcent 238
 
239
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
240
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
241
	 * Ajoute ou pas un champ "Autre".
242
	 *
243
	 * @return ContentPanel le panneau contenant les cases à cocher
244
	 */
831 jpm 245
	public static LayoutContainer creerChoixMultipleCp() {
639 jp_milcent 246
		LayoutContainer conteneur = new LayoutContainer();
247
		conteneur.setLayout(creerFormLayout(650, LabelAlign.TOP));
248
		return conteneur;
249
	}
250
 
251
	/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.
252
	 * Apelle un service retournant la liste des valeurs représentant les cases à cocher.
253
	 * Ajoute ou pas un champ "Autre".
254
	 *
255
	 * @param cp panneau conteant le groupe de case à cocher
256
	 * @param cacGroup le groupe de case à cocher
257
	 * @param listeValeurs la liste de valeurs à transformer en case à cocher
258
	 * @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître
259
	 * @return
260
	 */
831 jpm 261
	public static void creerChoixMultipleCac(LayoutContainer cp, final CheckBoxGroup cacGroupe, ValeurListe listeValeurs, final Field<String> autreChp) {
639 jp_milcent 262
		cp.addListener(Events.Hide, new Listener<BaseEvent>() {
263
			public void handleEvent(BaseEvent be) {
264
				cacGroupe.reset();
265
				autreChp.setValue("");
266
			}
267
 
268
		});
269
 
270
		cacGroupe.setAutoWidth(true);
271
		cacGroupe.setStyleAttribute("padding", "3px");
272
		cacGroupe.setData("liste_id", listeValeurs.getId());
273
		for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {
274
			Valeur val = listeValeurs.get(it.next());
275
			String nom =  val.get("nom");
276
			CheckBox cac = new CheckBox();
277
			cac.setId("val-"+val.getId());
278
			cac.setData("id", val.getId());
279
			cac.setBoxLabel(nom);
280
			if (! val.getDescription().equals("NULL")) {
281
				cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));
282
			}
283
			cacGroupe.add(cac);
284
		}
285
		cp.add(cacGroupe);
286
 
287
		if (autreChp != null) {
288
			// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écrans
289
			LayoutContainer conteneur = new LayoutContainer();
290
			conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));
291
			autreChp.setFieldLabel("Autre");
292
			autreChp.setLabelStyle("font-weight:normal;");
293
			conteneur.add(autreChp, new FormData(500, 0));
294
 
295
			cp.add(conteneur);
296
		}
297
		cp.layout();
298
	}
687 jp_milcent 299
 
703 jp_milcent 300
	@SuppressWarnings({"unchecked"})
831 jpm 301
	public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ComboBox combo) {
302
		rafraichirComboBox(listeValeurs, combo, "nom");
303
	}
304
 
305
	@SuppressWarnings({"unchecked"})
306
	public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ComboBox combo, String champATrier) {
703 jp_milcent 307
		List<?> liste = listeValeurs.toList();
308
		if (liste.size() > 0) {
831 jpm 309
			ListStore store = combo.getStore();
703 jp_milcent 310
			store.removeAll();
311
			store.add(liste);
831 jpm 312
			store.sort(champATrier, SortDir.ASC);
703 jp_milcent 313
			combo.setStore(store);
314
		}
315
	}
980 jpm 316
 
317
	public static Listener<BaseEvent> creerEcouteurChampObligatoire() {
318
		return new Listener<BaseEvent>() {
319
			public void handleEvent(BaseEvent be) {
320
				Field<?> champ = null;
321
				boolean etreVide = true;
322
				if (be.getSource() instanceof TextField<?>) {
323
					champ = (TextField<?>) be.getSource();
324
					etreVide = (champ.getRawValue().isEmpty()) ? true : false;
325
				} else if (be.getSource() instanceof TextArea) {
326
					champ = (TextArea) be.getSource();
327
					etreVide = (champ.getRawValue().isEmpty()) ? true : false;
328
				} else if (be.getSource() instanceof ChampComboBoxListeValeurs) {
329
					champ = (ChampComboBoxListeValeurs) be.getSource();
330
					etreVide = (champ.getValue() == null) ? true : false;
331
				} else if (be.getSource() instanceof ComboBox<?>) {
332
					champ = (ComboBox<?>) be.getSource();
333
					etreVide = (champ.getValue() == null) ? true : false;
334
				}
335
				champ.removeStyleName(ComposantClass.OBLIGATOIRE);
336
				champ.removeStyleName(ComposantClass.OBLIGATOIRE_OK);
337
				if (etreVide == false) {
338
					champ.addStyleName(ComposantClass.OBLIGATOIRE_OK);
339
				} else {
340
					champ.addStyleName(ComposantClass.OBLIGATOIRE);
341
				}
342
			}
343
		};
344
	}
687 jp_milcent 345
}