Rev 872 | Rev 912 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.vues;import java.util.Iterator;import java.util.List;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.i18n.Constantes;import org.tela_botanica.client.images.Images;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Configuration;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;import org.tela_botanica.client.modeles.aDonneeListe;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.Style.HorizontalAlignment;import com.extjs.gxt.ui.client.Style.SortDir;import com.extjs.gxt.ui.client.event.BaseEvent;import com.extjs.gxt.ui.client.event.ButtonEvent;import com.extjs.gxt.ui.client.event.ComponentEvent;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.Listener;import com.extjs.gxt.ui.client.event.SelectionListener;import com.extjs.gxt.ui.client.store.ListStore;import com.extjs.gxt.ui.client.widget.LayoutContainer;import com.extjs.gxt.ui.client.widget.Slider;import com.extjs.gxt.ui.client.widget.TabItem;import com.extjs.gxt.ui.client.widget.TabPanel;import com.extjs.gxt.ui.client.widget.button.ButtonBar;import com.extjs.gxt.ui.client.widget.form.CheckBox;import com.extjs.gxt.ui.client.widget.form.CheckBoxGroup;import com.extjs.gxt.ui.client.widget.form.ComboBox;import com.extjs.gxt.ui.client.widget.form.Field;import com.extjs.gxt.ui.client.widget.form.FormPanel;import com.extjs.gxt.ui.client.widget.form.Radio;import com.extjs.gxt.ui.client.widget.form.RadioGroup;import com.extjs.gxt.ui.client.widget.form.SliderField;import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign;import com.extjs.gxt.ui.client.widget.layout.FitLayout;import com.extjs.gxt.ui.client.widget.layout.FormData;import com.extjs.gxt.ui.client.widget.layout.FormLayout;import com.extjs.gxt.ui.client.widget.tips.ToolTipConfig;import com.google.gwt.core.client.GWT;import com.google.gwt.json.client.JSONObject;public abstract class Formulaire extends LayoutContainer implements Rafraichissable {public static final String MODE_AJOUTER = "AJOUT";public static final String MODE_MODIFIER = "MODIF";protected Constantes i18nC = null;protected Mediateur mediateur = null;protected Configuration config = null;protected String mode = null;protected int tabIndex = 100;protected FormPanel panneauFormulaire = null;protected ButtonBar barreOutilsValidation = null;protected String menuIdCourant = null;protected static Boolean clicBoutonvalidation = false;protected Rafraichissable vueExterneARafraichirApresValidation = null;public FormPanel getFormulaire() {return panneauFormulaire;}public void initialiserFormulaire(Mediateur mediateurCourrant, String modeDeCreation, String idMenuCourrant) {// Initialisation de variablesmode = modeDeCreation;mediateur = mediateurCourrant;i18nC = Mediateur.i18nC;menuIdCourant = idMenuCourrant;config = (Configuration) Registry.get(RegistreId.CONFIG);// Iniatilisation du layoutContainersetLayout(new FitLayout());setBorders(false);// Création du panneau du FORMULAIRE GÉNÉRALpanneauFormulaire = new FormPanel();panneauFormulaire.setBodyBorder(false);panneauFormulaire.setFrame(true);panneauFormulaire.setCollapsible(false);panneauFormulaire.setButtonAlign(HorizontalAlignment.CENTER);panneauFormulaire.setLayout(new FitLayout());if (modeDeCreation.equals(MODE_AJOUTER)) {panneauFormulaire.setIcon(Images.ICONES.formAjouter());} else if (modeDeCreation.equals(MODE_AJOUTER)) {panneauFormulaire.setIcon(Images.ICONES.formModifier());}barreOutilsValidation = new FormulaireBarreValidation(creerEcouteurValidation());panneauFormulaire.setBottomComponent(barreOutilsValidation);add(panneauFormulaire);}protected abstract SelectionListener<ButtonEvent> creerEcouteurValidation();protected abstract boolean verifierFormulaire();protected abstract boolean soumettreFormulaire();protected TabItem creerOnglet(String nom, String id) {TabItem onglet = new TabItem();onglet.setId(id);onglet.setText(nom);FormulaireOnglet.parametrer(onglet);return onglet;}protected void controlerFermetureApresRafraichissement() {// Si le bouton Valider a été cliqué, nous affichons la liste des structuresif (clicBoutonvalidation) {fermerFormulaire();}}protected void fermerFormulaire() {clicBoutonvalidation = false;panneauFormulaire.setEnabled(false);mediateur.clicMenu(menuIdCourant);}/** Méthode simplifiant la création de FormLayout.* Chacun des paramètres peut prendre la valeur null pour utiliser la valeur par défaut.** @param labelWidth largeur des labels.* @param labelAlign alignement des labels* @return*/protected static FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {FormLayout formLayout = new FormLayout();if (labelWidth != null) {formLayout.setLabelWidth(labelWidth);}if (labelAlign != null) {formLayout.setLabelAlign(labelAlign);}return formLayout;}/** Méthode simplifiant la création de bouton radio oui/non** @param listeNom nom de la liste de valeur* @return*/protected RadioGroup creerChoixUniqueRadioGroupe(String groupeNom, String listeNom) {groupeNom += "_grp";// NOTE : il semblerait qu'il faille aussi utiliser setName() pour éviter tout problème...RadioGroup radioGroup = new RadioGroup(groupeNom);radioGroup.setName(groupeNom);if (listeNom.equals("ouiNon")) {ValeurListe ouiNonListe = new ValeurListe();ouiNonListe.ajouter(new Valeur("1", i18nC.oui(), "NULL", "NULL"));ouiNonListe.ajouter(new Valeur("0", i18nC.non(), "NULL", "NULL"));creerChoixUniqueBoutonRadio(radioGroup, ouiNonListe);}return radioGroup;}protected void creerChoixUniqueBoutonRadio(RadioGroup radioGroupe, ValeurListe listeValeurs) {for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {Valeur val = listeValeurs.get(it.next());Radio radioBtn = new Radio();radioBtn.setName(radioGroupe.getName().replace("_grp", ""));radioBtn.setId(val.getId()+"_"+radioBtn.getName());radioBtn.setBoxLabel(val.getNom());radioBtn.setValueAttribute(val.getId());radioBtn.addListener(Events.Change, new Listener<ComponentEvent>() {public void handleEvent(ComponentEvent be) {//Window.alert(((Radio) be.component).getName());afficherChampSupplementaire(((Radio) be.getComponent()));}});if (! val.getDescription().equals("NULL")) {radioBtn.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));}radioGroupe.add(radioBtn);}}protected void afficherChampSupplementaire(Radio radioBtn) {GWT.log("Vous devez redéfinir la méthode afficherChampSupplementaire(Radio radioBtn) dans votre classe formulaire.", null);};/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.* Apelle un service retournant la liste des valeurs représentant les cases à cocher.* Ajoute ou pas un champ "Autre".** @return ContentPanel le panneau contenant les cases à cocher*/public static LayoutContainer creerChoixMultipleCp() {LayoutContainer conteneur = new LayoutContainer();conteneur.setLayout(creerFormLayout(650, LabelAlign.TOP));return conteneur;}/** Méthode simplifiant la création de choix multiple sous forme de case à cocher.* Apelle un service retournant la liste des valeurs représentant les cases à cocher.* Ajoute ou pas un champ "Autre".** @param cp panneau conteant le groupe de case à cocher* @param cacGroup le groupe de case à cocher* @param listeValeurs la liste de valeurs à transformer en case à cocher* @param boolAutreChp booléen indiquant si oui ou non le champ autre doit apparaître* @return*/public static void creerChoixMultipleCac(LayoutContainer cp, final CheckBoxGroup cacGroupe, ValeurListe listeValeurs, final Field<String> autreChp) {cp.addListener(Events.Hide, new Listener<BaseEvent>() {public void handleEvent(BaseEvent be) {cacGroupe.reset();autreChp.setValue("");}});cacGroupe.setAutoWidth(true);cacGroupe.setStyleAttribute("padding", "3px");cacGroupe.setData("liste_id", listeValeurs.getId());for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) {Valeur val = listeValeurs.get(it.next());String nom = val.get("nom");CheckBox cac = new CheckBox();cac.setId("val-"+val.getId());cac.setData("id", val.getId());cac.setBoxLabel(nom);if (! val.getDescription().equals("NULL")) {cac.setToolTip(new ToolTipConfig(val.getNom(), val.getDescription()));}cacGroupe.add(cac);}cp.add(cacGroupe);if (autreChp != null) {// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écransLayoutContainer conteneur = new LayoutContainer();conteneur.setLayout(creerFormLayout(50, LabelAlign.TOP));autreChp.setId("autre-"+listeValeurs.getId());autreChp.setFieldLabel("Autre");autreChp.setLabelStyle("font-weight:normal;");conteneur.add(autreChp, new FormData(500, 0));cp.add(conteneur);}cp.layout();}@SuppressWarnings({"unchecked"})public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ComboBox combo) {rafraichirComboBox(listeValeurs, combo, "nom");}@SuppressWarnings({"unchecked"})public static void rafraichirComboBox(aDonneeListe<?> listeValeurs, ComboBox combo, String champATrier) {List<?> liste = listeValeurs.toList();if (liste.size() > 0) {ListStore store = combo.getStore();store.removeAll();store.add(liste);store.sort(champATrier, SortDir.ASC);combo.setStore(store);}}}