Subversion Repositories eFlore/Applications.coel

Rev

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