Subversion Repositories eFlore/Applications.coel

Rev

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