Rev 1259 | 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.ComposantClass;import org.tela_botanica.client.Mediateur;import org.tela_botanica.client.RegistreId;import org.tela_botanica.client.composants.ChampComboBoxListeValeurs;import org.tela_botanica.client.composants.InfoLogger;import org.tela_botanica.client.configuration.Configuration;import org.tela_botanica.client.i18n.Constantes;import org.tela_botanica.client.i18n.ErrorMessages;import org.tela_botanica.client.images.Images;import org.tela_botanica.client.interfaces.Rafraichissable;import org.tela_botanica.client.modeles.Valeur;import org.tela_botanica.client.modeles.ValeurListe;import org.tela_botanica.client.modeles.aDonneeListe;import org.tela_botanica.client.util.Debug;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.Info;import com.extjs.gxt.ui.client.widget.LayoutContainer;import com.extjs.gxt.ui.client.widget.TabItem;import com.extjs.gxt.ui.client.widget.button.Button;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.TextArea;import com.extjs.gxt.ui.client.widget.form.TextField;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;public abstract class Formulaire extends LayoutContainer implements Rafraichissable {public static final String MODE_AJOUTER = "AJOUT";public static final String MODE_MODIFIER = "MODIF";public Constantes i18nC = null;public ErrorMessages i18nM = null;public Mediateur mediateur = null;public Configuration config = null;public String mode = null;public int tabIndex = 100;public FormPanel panneauFormulaire = null;public ButtonBar barreOutilsValidation = null;public String menuIdCourant = null;public static Boolean clicBoutonvalidation = false;public 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;i18nM = Mediateur.i18nM;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());panneauFormulaire.setPadding(0);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);}public SelectionListener<ButtonEvent> creerEcouteurValidation() {SelectionListener<ButtonEvent> ecouteur = new SelectionListener<ButtonEvent>() {public void componentSelected(ButtonEvent ce) {String code = ((Button) ce.getComponent()).getData("code");if (code.equals(FormulaireBarreValidation.CODE_BOUTON_VALIDER)) {if (mediateur.getUtilisateur().isIdentifie()) {clicBoutonvalidation = true;soumettreFormulaire();} else {InfoLogger.display(i18nC.modeAnonyme(), i18nC.identificationNecessaire());}} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_APPLIQUER)) {if (mediateur.getUtilisateur().isIdentifie()) {soumettreFormulaire();} else {InfoLogger.display(i18nC.modeAnonyme(), i18nC.identificationNecessaire());}} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_ANNULER)) {mediateur.clicMenu(menuIdCourant);} else if (code.equals(FormulaireBarreValidation.CODE_BOUTON_REINITIALISER)) {reinitialiserFormulaire();}}};return ecouteur;}public abstract boolean verifierFormulaire();public abstract boolean soumettreFormulaire();public abstract void reinitialiserFormulaire();public TabItem creerOnglet(String nom, String id) {TabItem onglet = new TabItem();onglet.setId(id);onglet.setText(nom);FormulaireOnglet.parametrer(onglet);return onglet;}public void controlerFermeture() {if (clicBoutonvalidation) {fermerFormulaire();}}public 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*/public 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*/public 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;}public 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);}}public 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.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);}}public static Listener<BaseEvent> creerEcouteurChampObligatoire() {return new Listener<BaseEvent>() {public void handleEvent(BaseEvent be) {Field<?> champ = null;boolean etreVide = true;if (be.getSource() instanceof TextField<?>) {champ = (TextField<?>) be.getSource();etreVide = (champ.getRawValue().isEmpty()) ? true : false;} else if (be.getSource() instanceof TextArea) {champ = (TextArea) be.getSource();etreVide = (champ.getRawValue().isEmpty()) ? true : false;} else if (be.getSource() instanceof ChampComboBoxListeValeurs) {champ = (ChampComboBoxListeValeurs) be.getSource();etreVide = (champ.getValue() == null) ? true : false;} else if (be.getSource() instanceof ComboBox<?>) {champ = (ComboBox<?>) be.getSource();etreVide = (champ.getValue() == null) ? true : false;}champ.removeStyleName(ComposantClass.OBLIGATOIRE);champ.removeStyleName(ComposantClass.OBLIGATOIRE_OK);if (etreVide == false) {champ.addStyleName(ComposantClass.OBLIGATOIRE_OK);} else {champ.addStyleName(ComposantClass.OBLIGATOIRE);}}};}}