Rev 1341 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;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.configuration.Configuration;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.aDonnee;import org.tela_botanica.client.util.Debug;import org.tela_botanica.client.util.UtilString;import com.extjs.gxt.ui.client.Registry;import com.extjs.gxt.ui.client.event.BaseEvent;import com.extjs.gxt.ui.client.event.Events;import com.extjs.gxt.ui.client.event.Listener;import com.extjs.gxt.ui.client.widget.LayoutContainer;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.Field;import com.extjs.gxt.ui.client.widget.form.LabelField;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.FlowLayout;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 class ChampCaseACocher extends LayoutContainer implements Rafraichissable {private Configuration config = null;private Mediateur mediateur = null;private CheckBoxGroup groupeCaseACocher = null;private boolean avoirChampAutre = false;private Field<String> champAutre = null;private String listeValeursCode = null;public ChampCaseACocher(String label, String listeCode, boolean avoirChampAutre) {config = (Configuration) Registry.get(RegistreId.CONFIG);mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);setLayout(creerFormLayout(650, LabelAlign.TOP));groupeCaseACocher = new CheckBoxGroup();setLabel(label);setChampAutre(avoirChampAutre);setListeCode(listeCode);mediateur.obtenirListeValeurEtRafraichir(this, getListeCode());}public String getListeCode() {return listeValeursCode;}public void setListeCode(String code) {listeValeursCode = code;}public void setLabel(String label) {groupeCaseACocher.setFieldLabel(label);}public boolean avoirChampAutre() {return avoirChampAutre;}public void setChampAutre(boolean avoirChamp) {avoirChampAutre = avoirChamp;if (avoirChampAutre) {champAutre = new TextArea();champAutre.setWidth("80%");}}public String getValeur() {String valeur = "";List<CheckBox> liste = groupeCaseACocher.getValues();if (liste != null) {int taille = liste.size();for (int i = 0; i < taille; i++) {CheckBox cac = liste.get(i);if (cac.isEnabled()) {valeur += aDonnee.SEPARATEUR_VALEURS+cac.getData("id");}}}if (avoirChampAutre() && !UtilString.isEmpty(champAutre.getValue())) {valeur += aDonnee.SEPARATEUR_VALEURS+"AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR+champAutre.getValue();}if (!UtilString.isEmpty(valeur)) {valeur = valeur.replaceFirst("^"+aDonnee.SEPARATEUR_VALEURS, "");}return valeur;}public void peupler(String donnees) {String[] valeurs = donnees.split(aDonnee.SEPARATEUR_VALEURS);for (int i = 0; i < valeurs.length; i++) {if (valeurs[i].startsWith("AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR)) {champAutre.setValue(valeurs[i].replaceFirst("^AUTRE"+aDonnee.SEPARATEUR_TYPE_VALEUR, ""));} else {//TODO : check : List<CheckBox> cases = groupeCac.getAll();List<Field<?>> cases = groupeCaseACocher.getAll();for (int j = 0; j < cases.size(); j++) {if (cases.get(j).getId().equals("val-"+valeurs[i])) {((CheckBox) cases.get(j)).setValue(true);}}}}}private FormLayout creerFormLayout(Integer labelWidth, LabelAlign labelAlign) {FormLayout formLayout = new FormLayout();if (labelWidth != null) {formLayout.setLabelWidth(labelWidth);}if (labelAlign != null) {formLayout.setLabelAlign(labelAlign);}return formLayout;}private void creerChoixMultipleCac(ValeurListe listeValeurs) {addListener(Events.Hide, new Listener<BaseEvent>() {public void handleEvent(BaseEvent be) {groupeCaseACocher.reset();if (avoirChampAutre()) {champAutre.setValue("");}}});groupeCaseACocher.setAutoWidth(true);groupeCaseACocher.setStyleAttribute("padding", "3px");groupeCaseACocher.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()));}groupeCaseACocher.add(cac);}add(groupeCaseACocher);LayoutContainer conteneur;if (avoirChampAutre()) {// FIXME : éviter le chevauchement du texte des cases à cocher avec le label "Autre" sur les petits écransconteneur = new LayoutContainer();conteneur.setLayout(new FlowLayout());conteneur.add(new LabelField("Autre : "));champAutre.setLabelStyle("font-weight:normal;");conteneur.add(champAutre, new FormData(500, 0));add(conteneur);}layout();}public void rafraichir(Object nouvellesDonnees) {if (nouvellesDonnees instanceof ValeurListe) {ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {creerChoixMultipleCac(listeValeurs);}} else {GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);}}}