Subversion Repositories eFlore/Applications.coel

Rev

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