Subversion Repositories eFlore/Applications.coel

Rev

Rev 1383 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
854 jpm 1
package org.tela_botanica.client.composants;
2
 
3
import org.tela_botanica.client.Mediateur;
4
import org.tela_botanica.client.RegistreId;
907 jpm 5
import org.tela_botanica.client.configuration.Configuration;
854 jpm 6
import org.tela_botanica.client.interfaces.Rafraichissable;
7
import org.tela_botanica.client.modeles.Valeur;
8
import org.tela_botanica.client.modeles.ValeurListe;
9
import org.tela_botanica.client.vues.Formulaire;
10
 
11
import com.extjs.gxt.ui.client.Registry;
1737 mathias 12
import com.extjs.gxt.ui.client.Style.SortDir;
854 jpm 13
import com.extjs.gxt.ui.client.store.ListStore;
14
import com.extjs.gxt.ui.client.widget.form.ComboBox;
858 jpm 15
import com.extjs.gxt.ui.client.widget.form.Field;
16
import com.extjs.gxt.ui.client.widget.form.Validator;
854 jpm 17
import com.google.gwt.core.client.GWT;
18
 
19
public class ChampComboBoxListeValeurs extends ComboBox<Valeur> implements Rafraichissable {
20
	private Configuration config = null;
21
	private Mediateur mediateur = null;
22
 
23
	private String listeValeursCode = null;
24
	private String nomChampATrier = null;
858 jpm 25
	private String valeurDefautId = null;
854 jpm 26
 
27
	public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste) {
858 jpm 28
		initialiserChampComboBox(labelDuChamp, codeDeLaliste, 0);
29
	}
30
 
31
	public ChampComboBoxListeValeurs(String labelDuChamp, String codeDeLaliste, int tabIndex) {
32
		initialiserChampComboBox(labelDuChamp, codeDeLaliste, tabIndex);
33
	}
34
 
862 jpm 35
	public ChampComboBoxListeValeurs(String labelDuChamp, ValeurListe listeDeValeurs, int tabIndex) {
36
		initialiserChampComboBox(labelDuChamp, null, tabIndex);
37
		rafraichir(listeDeValeurs);
38
	}
39
 
858 jpm 40
	private void initialiserChampComboBox(String labelDuChamp, String codeDeLaliste, int tabIndex) {
854 jpm 41
		config = (Configuration) Registry.get(RegistreId.CONFIG);
42
		mediateur = (Mediateur) Registry.get(RegistreId.MEDIATEUR);
43
 
44
		setForceSelection(true);
45
		setTriggerAction(TriggerAction.ALL);
46
		setDisplayField("nom");
47
		setStore(new ListStore<Valeur>());
48
		setEditable(false);
49
 
858 jpm 50
		setTabIndex(tabIndex);
854 jpm 51
 
858 jpm 52
		if (labelDuChamp == null) {
53
			setLabelSeparator("");
54
		} else {
55
			setFieldLabel(labelDuChamp);
56
		}
57
 
58
		setValidator(new Validator() {
59
			public String validate(Field<?> field, String value) {
60
				String retour = null;
61
				if (field.getRawValue().equals("")) {
62
					field.setValue(null);
63
				} else if (getStore().findModel("nom", field.getRawValue()) == null) {
64
					String contenuBrut = field.getRawValue();
65
					field.setValue(null);
66
					field.setRawValue(contenuBrut);
1075 jpm 67
					retour = Mediateur.i18nC.selectionnerValeurOuNull();
1067 gduche 68
 
858 jpm 69
				}
70
				return retour;
71
			}
72
		});
73
 
862 jpm 74
		if (codeDeLaliste != null) {
75
			setListeCode(codeDeLaliste);
1318 gduche 76
			mediateur.obtenirListeValeurEtRafraichir(this, getListeCode(), null);
862 jpm 77
		}
854 jpm 78
	}
79
 
80
	public String getListeCode() {
81
		return listeValeursCode;
82
	}
83
	public void setListeCode(String code) {
84
		listeValeursCode = code;
85
	}
86
 
867 jpm 87
	public String getValeur() {
875 jpm 88
		String valeur = "";
89
		if (getValue() != null) {
90
			valeur = getValue().getId();
91
		}
92
		return valeur;
858 jpm 93
	}
94
 
867 jpm 95
	public void peupler(String valeur) {
96
		if (valeur.matches("[0-9]+")) {
97
			valeurDefautId = valeur;
98
			actualiserValeurParDefaut();
99
		} else {
100
			setRawValue(valeur);
101
		}
102
	}
103
 
854 jpm 104
	public String getTrie() {
105
		String champATrier = "nom";
106
		if (nomChampATrier != null) {
107
			champATrier = nomChampATrier;
108
		}
109
		return champATrier;
110
	}
1737 mathias 111
 
112
	/**
113
	 * Définit le nom du champ selon lequel trier, et si trierJusteApres vaut true, trie
114
	 * @param champATrier
115
	 */
116
	public void setTrie(String champATrier, boolean trierJusteApres) {
854 jpm 117
		nomChampATrier = champATrier;
1737 mathias 118
		if (trierJusteApres) {
119
			trier();
120
		}
854 jpm 121
	}
1737 mathias 122
 
123
	/**
124
	 * Définit le nom du champ selon lequel trier, et trie juste après
125
	 * @param champATrier
126
	 */
127
	public void setTrie(String champATrier) {
128
		setTrie(champATrier, true);
129
	}
854 jpm 130
 
858 jpm 131
	public void actualiserValeurParDefaut() {
132
		if (valeurDefautId != null && getStore() != null) {
133
			setValue(getStore().findModel("id_valeur", valeurDefautId));
134
		}
135
	}
1737 mathias 136
 
137
	/**
138
	 * Trie le contenu de la comboboîte selon le nomChampATrier défini. S'il n'y en a aucun, échoue silencieusement (niark niark)
139
	 */
140
	public void trier() {
141
		if (! this.nomChampATrier.isEmpty()) {
142
			this.getStore().sort(this.nomChampATrier, SortDir.ASC);
143
		}
144
	}
858 jpm 145
 
854 jpm 146
	public void rafraichir(Object nouvellesDonnees) {
147
		if (nouvellesDonnees instanceof ValeurListe) {
148
			ValeurListe listeValeurs = (ValeurListe) nouvellesDonnees;
149
			if (listeValeurs.getId().equals(config.getListeId(getListeCode()))) {
150
				Formulaire.rafraichirComboBox(listeValeurs, this, getTrie());
858 jpm 151
				actualiserValeurParDefaut();
854 jpm 152
			}
153
		} else {
154
			GWT.log(Mediateur.i18nM.erreurRafraichir(nouvellesDonnees.getClass(), this.getClass()), null);
155
		}
156
	}
157
 
158
}