New file |
0,0 → 1,373 |
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 variables |
mode = modeDeCreation; |
mediateur = mediateurCourrant; |
i18nC = Mediateur.i18nC; |
i18nM = Mediateur.i18nM; |
menuIdCourant = idMenuCourrant; |
config = (Configuration) Registry.get(RegistreId.CONFIG); |
|
// Iniatilisation du layoutContainer |
setLayout(new FitLayout()); |
setBorders(false); |
|
// Création du panneau du FORMULAIRE GÉNÉRAL |
panneauFormulaire = 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)) { |
fermerFormulaire(); |
} |
} |
}; |
|
return ecouteur; |
} |
|
public abstract boolean verifierFormulaire(); |
|
public abstract boolean soumettreFormulaire(); |
|
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); |
surFermetureFormulaire(); |
//mediateur.clicMenu(menuIdCourant); |
} |
|
public void surFermetureFormulaire() { |
// A surcharger si jamais une action spécifique doit être entreprise |
} |
|
/** 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 écrans |
LayoutContainer 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); |
} |
} |
}; |
} |
|
public static ValeurListe trierListeOuiNonEnPartie(ValeurListe listeValeurs) { |
ValeurListe listeValeursTriees = new ValeurListe(); |
Valeur valeurOui = null; |
Valeur valeurNon = null; |
Valeur valeurEnpartie = null; |
String idValeurOui = null; |
String idValeurNon = null; |
String idValeurEnpartie = null; |
for (Iterator<String> it = listeValeurs.keySet().iterator(); it.hasNext();) { |
String strId = it.next(); |
Valeur valeurDeLaListe = listeValeurs.get(strId); |
//Window.alert(strId+" "+valeurDeLaListe.getNom()); |
if(valeurDeLaListe.getNom().equals("Oui")) { |
idValeurOui = strId; |
valeurOui = valeurDeLaListe; |
} |
if(valeurDeLaListe.getNom().equals("Non")) { |
idValeurNon = strId; |
valeurNon = valeurDeLaListe; |
} |
if(valeurDeLaListe.getNom().equals("En partie")) { |
idValeurEnpartie = strId; |
valeurEnpartie = valeurDeLaListe; |
} |
} |
listeValeursTriees.put(idValeurOui, valeurOui); |
listeValeursTriees.put(idValeurNon, valeurNon); |
listeValeursTriees.put(idValeurEnpartie, valeurEnpartie); |
|
return listeValeursTriees; |
} |
} |
Property changes: |
Added: svn:mergeinfo |
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/vues/Formulaire.java:r1136-1368 |
Merged /trunk/src/org/tela_botanica/client/vues/Formulaire.java:r11-636,649-686,1209-1382 |
Merged /branches/v1.1-aramon/src/org/tela_botanica/client/vues/Formulaire.java:r1383-1511 |