Subversion Repositories eFlore/Applications.coel

Rev

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

Rev Author Line No. Line
1287 cyprien 1
package org.tela_botanica.client.composants;
2
 
3
import java.util.List;
4
 
5
import org.tela_botanica.client.composants.pagination.ChargeurListe;
6
import org.tela_botanica.client.composants.pagination.Proxy;
7
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData;
1428 cyprien 8
import org.tela_botanica.client.interfaces.Rafraichissable;
9
import org.tela_botanica.client.modeles.Information;
1287 cyprien 10
import org.tela_botanica.client.util.Debug;
11
 
12
import com.extjs.gxt.ui.client.event.Events;
1428 cyprien 13
import com.extjs.gxt.ui.client.event.FieldEvent;
1287 cyprien 14
import com.extjs.gxt.ui.client.event.Listener;
15
import com.extjs.gxt.ui.client.store.ListStore;
16
import com.extjs.gxt.ui.client.widget.LayoutContainer;
17
import com.extjs.gxt.ui.client.widget.form.ComboBox;
1329 cyprien 18
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
1287 cyprien 19
 
20
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
21
import com.extjs.gxt.ui.client.data.LoadEvent;
22
import com.extjs.gxt.ui.client.data.Loader;
23
import com.extjs.gxt.ui.client.data.ModelData;
24
import com.extjs.gxt.ui.client.data.ModelType;
25
import com.extjs.gxt.ui.client.data.PagingLoadResult;
26
 
1428 cyprien 27
public class ChampComboBoxRechercheTempsReelPaginable extends LayoutContainer implements Rafraichissable {
1287 cyprien 28
 
29
	  //-------------//
30
	 //  ATTRIBUTS	//
31
	//-------------//
32
 
33
	private ListStore<ModelData> store = null;
34
	private ComboBox<ModelData> combo = null;
35
 
36
	private Proxy<?> proxy = null;
37
	private TransformateurJSONaModelData<PagingLoadResult<ModelData>> reader = null;
38
	private ChargeurListe<PagingLoadResult<ModelData>> loader = null;
39
 
40
	private int start = 0;
41
	private int limit = 10;
1369 cyprien 42
	private int largeur = 370;
1287 cyprien 43
 
44
	private BasePagingLoadConfig plc = null;
45
	private ModelType modeltype = null;
46
	private String displayName = "";
1329 cyprien 47
	private String recherche = "";
1287 cyprien 48
 
1428 cyprien 49
	private String champValeurInitiale = "";
50
	private String valeurInitiale = "";
1596 aurelien 51
	private boolean valeurInitialeAffectee = false;
1428 cyprien 52
 
1287 cyprien 53
	  //-------------//
54
	 //   METHODES	//
55
	//-------------//
56
 
57
	/*--------------
58
	  Constructeur
59
	--------------*/
1596 aurelien 60
	public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modelType, String displayName, int taillePage) {
61
		initialiserChamp(proxy, modelType, displayName);
62
	}
1428 cyprien 63
 
1526 jpm 64
	public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modelType, String displayName) {
1596 aurelien 65
		initialiserChamp(proxy, modelType, displayName);
66
	}
67
 
68
	private void initialiserChamp(Proxy<?> proxy, ModelType modelType, String displayName) {
1526 jpm 69
		this.modeltype = modelType;
1287 cyprien 70
		this.proxy = proxy;
71
		this.displayName = displayName;
72
 
73
		plc = new BasePagingLoadConfig();
74
		plc.setLimit(limit);
75
		plc.setOffset(start);
76
 
1526 jpm 77
		reader = new TransformateurJSONaModelData<PagingLoadResult<ModelData>>(this.modeltype, null);
1287 cyprien 78
 
1526 jpm 79
		loader = new ChargeurListe<PagingLoadResult<ModelData>>(this.proxy, reader, this);
1287 cyprien 80
        loader.setLimit(plc.getLimit());
81
        loader.setOffset(plc.getOffset());
82
 
83
		loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
84
			public void handleEvent(LoadEvent be) {
85
				be.<ModelData> getConfig().set("start", be.<ModelData> getConfig().get("offset"));
1526 jpm 86
			}
1287 cyprien 87
		});
88
 
89
		loader.addListener(Loader.Load, new Listener<LoadEvent>() {
90
			public void handleEvent(LoadEvent be) {
91
 
1526 jpm 92
		    }
1287 cyprien 93
		});
94
 
95
		loader.addListener(Loader.LoadException, new Listener<LoadEvent>() {
96
			public void handleEvent(LoadEvent be) {
97
 
1526 jpm 98
		    }
1287 cyprien 99
		});
100
 
1369 cyprien 101
		combo = new ComboBox<ModelData>();
102
		this.setWidth(largeur);
1526 jpm 103
		combo.setDisplayField(this.displayName);
1287 cyprien 104
		combo.setHideTrigger(false);
105
		combo.setPageSize(plc.getLimit());
106
        store = new ListStore<ModelData>(loader);
107
        combo.setStore(store);
1428 cyprien 108
        loader.load(plc, recherche, false);
1369 cyprien 109
 
1428 cyprien 110
		combo.addListener(Events.KeyUp, new Listener<FieldEvent>() {
111
			public void handleEvent(FieldEvent fe) {
112
				// on vérifie que les touches enfoncées ne sont pas les flèches du clavier
1468 jpm 113
				if (!fe.isNavKeyPress()) {
1428 cyprien 114
					recherche = combo.getRawValue();
1526 jpm 115
					plc.setLimit(limit);
116
					plc.setOffset(start);
117
					loader.setLimit(limit);
118
					loader.setOffset(start);
1428 cyprien 119
					loader.load(plc, recherche, false);
120
				}
1287 cyprien 121
			}
122
		});
1369 cyprien 123
 
124
		this.add(combo);
1287 cyprien 125
	}
126
 
127
	/*------------
128
	  Accesseurs
129
	------------*/
1526 jpm 130
	public ComboBox<ModelData> getCombo() {
1287 cyprien 131
		return this.combo;
132
	}
133
 
1526 jpm 134
	public ModelData getValeur() {
135
		if (combo.getSelection() != null && combo.getSelection().size() > 0) {
136
			return combo.getSelection().get(0);
137
		} else {
138
			return null;
139
		}
1287 cyprien 140
	}
141
 
1526 jpm 142
	public ListStore<?> getStore() {
1287 cyprien 143
		return combo.getStore();
144
	}
145
 
1526 jpm 146
	public void setWidth(int largeur) {
1287 cyprien 147
		this.largeur = largeur;
148
		this.combo.setWidth(largeur);
149
	}
150
 
1526 jpm 151
	public void setWidth(int tailleLabel, int largeurTotale) {
1369 cyprien 152
		this.setWidth(largeurTotale);
1329 cyprien 153
		this.largeur = largeurTotale;
154
		this.combo.setWidth(largeurTotale - tailleLabel);
155
 
156
		FormLayout fl = new FormLayout();
157
		fl.setLabelWidth(tailleLabel);
1369 cyprien 158
		fl.setDefaultWidth(largeurTotale - tailleLabel);
159
		this.setLayout(fl);
160
 
161
		this.layout();
1329 cyprien 162
	}
1287 cyprien 163
 
164
	/*-----------------------------
165
	  Gestion du contenu du champ
166
	-----------------------------*/
167
 
1526 jpm 168
	public List<ModelData> collecterValeursDuChamp() {
1287 cyprien 169
		return combo.getSelection();
170
	}
171
 
1526 jpm 172
	public void peuplerChamp(List<ModelData> selection) {
1287 cyprien 173
		combo.setSelection(selection);
174
	}
175
 
1526 jpm 176
	public void chargerValeurInitiale(String valeurInitiale, String champ) {
1428 cyprien 177
		this.valeurInitiale = valeurInitiale;
178
		this.champValeurInitiale = champ;
1596 aurelien 179
		if(combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) {
1640 aurelien 180
				loader.load(plc, "", true);
181
				this.getCombo().disable();
1596 aurelien 182
		} else {
183
			combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
184
		}
1428 cyprien 185
	}
186
 
187
	/*-----------------------------
188
	  		Rafraichir
189
	-----------------------------*/
190
	public void rafraichir(Object nouvellesDonnees) {
191
		if (nouvellesDonnees instanceof Information) {
192
			Information info = (Information) nouvellesDonnees;
193
			if (info.getType().equals("selectionnerValeurCombo")) {
1468 jpm 194
				if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) {
1596 aurelien 195
					// Si la valeur ne fait pas partie de la première page, on doit charger la liste complète
1597 aurelien 196
					// C'est un peu moche mais pour le moment ça marche (les listes ne dépassant pas quelques
1640 aurelien 197
					// centaines d'élements), on s'arrete par contre si on a atteint le total d'éléments
198
					if(!valeurInitialeAffectee && combo.getStore().getCount() < loader.getTotalCount()) {
1596 aurelien 199
						loader.load(start, loader.getTotalCount());
1640 aurelien 200
					} else {
201
						this.getCombo().enable();
1468 jpm 202
					}
1526 jpm 203
				} else {
204
					combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
1596 aurelien 205
					valeurInitialeAffectee = true;
206
					this.getCombo().enable();
1468 jpm 207
				}
1428 cyprien 208
			}
209
		}
210
	}
1526 jpm 211
}