Rev 1881 | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;
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.vues.Formulaire;
import com.extjs.gxt.ui.client.Registry;
import com.extjs.gxt.ui.client.Style.SortDir;
import com.extjs.gxt.ui.client.store.ListStore;
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.Validator;
import com.google.gwt.core.client.GWT;
public class ChampComboBoxListeValeurs extends ComboBox<Valeur> implements Rafraichissable {
private Configuration config = null;
private Mediateur mediateur = null;
private String listeValeursCode = null;
private String nomChampATrier = null;
private String valeurDefautId = null;
public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste) {
initialiserChampComboBox(labelDuChamp, codeDeLaliste, 0);
}
public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste, int tabIndex) {
initialiserChampComboBox(labelDuChamp, codeDeLaliste, tabIndex);
}
public ChampComboBoxListeValeurs(String labelDuChamp, ValeurListe listeDeValeurs, int tabIndex) {
initialiserChampComboBox(labelDuChamp, null, tabIndex);
rafraichir(listeDeValeurs);
}
private void initialiserChampComboBox(String labelDuChamp, String codeDeLaliste, int tabIndex) {
config = (Configuration) Registry.get(RegistreId.CONFIG);
mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
setForceSelection(true);
setTriggerAction(TriggerAction.ALL);
setDisplayField("nom");
setStore(new ListStore<Valeur>());
setEditable(false);
setTabIndex(tabIndex);
if (labelDuChamp == null) {
setLabelSeparator("");
} else {
setFieldLabel(labelDuChamp);
}
setValidator(new Validator() {
public String validate(Field<?> field, String value) {
String retour = null;
if (field.getRawValue().equals("")) {
field.setValue(null);
} else if (getStore().findModel("nom", field.getRawValue()) == null) {
String contenuBrut = field.getRawValue();
field.setValue(null);
field.setRawValue(contenuBrut);
retour = Mediateur.i18nC.selectionnerValeurOuNull();
}
return retour;
}
});
if (codeDeLaliste != null) {
setListeCode(codeDeLaliste);
mediateur.obtenirListeValeurEtRafraichir(this, getListeCode(), null);
}
}
public String getListeCode() {
return listeValeursCode;
}
public void setListeCode(String code) {
listeValeursCode = code;
}
public String getValeur() {
String valeur = "";
if (getValue() != null) {
valeur = getValue().getId();
}
return valeur;
}
public void peupler(String valeur) {
if (valeur.matches("[0-9]+")) {
valeurDefautId = valeur;
actualiserValeurParDefaut();
} else {
setRawValue(valeur);
}
}
public String getTrie() {
String champATrier = "nom";
if (nomChampATrier != null) {
champATrier = nomChampATrier;
}
return champATrier;
}
/**
* Définit le nom du champ selon lequel trier, et si trierJusteApres vaut true, trie
* @param champATrier
*/
public void setTrie(String champATrier, boolean trierJusteApres) {
nomChampATrier = champATrier;
if (trierJusteApres) {
trier();
}
}
/**
* Définit le nom du champ selon lequel trier, et trie juste après
* @param champATrier
*/
public void setTrie(String champATrier) {
setTrie(champATrier, true);
}
public void actualiserValeurParDefaut() {
if (valeurDefautId != null && getStore() != null) {
setValue(getStore().findModel("id_valeur", valeurDefautId));
}
}
/**
* Trie le contenu de la comboboîte selon le nomChampATrier défini. S'il n'y en a aucun, échoue silencieusement (niark niark)
*/
public void trier() {
if (! this.nomChampATrier.isEmpty()) {
this.getStore().sort(this.nomChampATrier, SortDir.ASC);
}
}
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof ValeurListe) {
ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {
Formulaire.rafraichirComboBox(listeValeurs, this, getTrie());
actualiserValeurParDefaut();
}
} else {
GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
}
}
}