Subversion Repositories eFlore/Applications.coel

Rev

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