Subversion Repositories eFlore/Applications.coel

Rev

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