Subversion Repositories eFlore/Applications.coel

Rev

Go to most recent revision | Details | 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 = "";
51
 
1287 cyprien 52
	  //-------------//
53
	 //   METHODES	//
54
	//-------------//
55
 
56
	/*--------------
57
	  Constructeur
58
	--------------*/
1428 cyprien 59
 
1526 jpm 60
	public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modelType, String displayName) {
61
		this.modeltype = modelType;
1287 cyprien 62
		this.proxy = proxy;
63
		this.displayName = displayName;
64
 
65
		plc = new BasePagingLoadConfig();
66
		plc.setLimit(limit);
67
		plc.setOffset(start);
68
 
1526 jpm 69
		reader = new TransformateurJSONaModelData<PagingLoadResult<ModelData>>(this.modeltype, null);
1287 cyprien 70
 
1526 jpm 71
		loader = new ChargeurListe<PagingLoadResult<ModelData>>(this.proxy, reader, this);
1287 cyprien 72
        loader.setLimit(plc.getLimit());
73
        loader.setOffset(plc.getOffset());
74
 
75
		loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
76
			public void handleEvent(LoadEvent be) {
77
				be.<ModelData> getConfig().set("start", be.<ModelData> getConfig().get("offset"));
1526 jpm 78
			}
1287 cyprien 79
		});
80
 
81
		loader.addListener(Loader.Load, new Listener<LoadEvent>() {
82
			public void handleEvent(LoadEvent be) {
83
 
1526 jpm 84
		    }
1287 cyprien 85
		});
86
 
87
		loader.addListener(Loader.LoadException, new Listener<LoadEvent>() {
88
			public void handleEvent(LoadEvent be) {
89
 
1526 jpm 90
		    }
1287 cyprien 91
		});
92
 
1369 cyprien 93
		combo = new ComboBox<ModelData>();
94
		this.setWidth(largeur);
1526 jpm 95
		combo.setDisplayField(this.displayName);
1287 cyprien 96
		combo.setHideTrigger(false);
97
		combo.setPageSize(plc.getLimit());
98
        store = new ListStore<ModelData>(loader);
99
        combo.setStore(store);
1428 cyprien 100
        loader.load(plc, recherche, false);
1369 cyprien 101
 
1428 cyprien 102
		combo.addListener(Events.KeyUp, new Listener<FieldEvent>() {
103
			public void handleEvent(FieldEvent fe) {
104
				// on vérifie que les touches enfoncées ne sont pas les flèches du clavier
1468 jpm 105
				if (!fe.isNavKeyPress()) {
1428 cyprien 106
					recherche = combo.getRawValue();
1526 jpm 107
					plc.setLimit(limit);
108
					plc.setOffset(start);
109
					loader.setLimit(limit);
110
					loader.setOffset(start);
1428 cyprien 111
					loader.load(plc, recherche, false);
112
				}
1287 cyprien 113
			}
114
		});
1369 cyprien 115
 
116
		this.add(combo);
1287 cyprien 117
	}
118
 
119
	/*------------
120
	  Accesseurs
121
	------------*/
1526 jpm 122
	public ComboBox<ModelData> getCombo() {
1287 cyprien 123
		return this.combo;
124
	}
125
 
1526 jpm 126
	public ModelData getValeur() {
127
		if (combo.getSelection() != null && combo.getSelection().size() > 0) {
128
			return combo.getSelection().get(0);
129
		} else {
130
			return null;
131
		}
1287 cyprien 132
	}
133
 
1526 jpm 134
	public ListStore<?> getStore() {
1287 cyprien 135
		return combo.getStore();
136
	}
137
 
1526 jpm 138
	public void setWidth(int largeur) {
1287 cyprien 139
		this.largeur = largeur;
140
		this.combo.setWidth(largeur);
141
	}
142
 
1526 jpm 143
	public void setWidth(int tailleLabel, int largeurTotale) {
1369 cyprien 144
		this.setWidth(largeurTotale);
1329 cyprien 145
		this.largeur = largeurTotale;
146
		this.combo.setWidth(largeurTotale - tailleLabel);
147
 
148
		FormLayout fl = new FormLayout();
149
		fl.setLabelWidth(tailleLabel);
1369 cyprien 150
		fl.setDefaultWidth(largeurTotale - tailleLabel);
151
		this.setLayout(fl);
152
 
153
		this.layout();
1329 cyprien 154
	}
1287 cyprien 155
 
156
	/*-----------------------------
157
	  Gestion du contenu du champ
158
	-----------------------------*/
159
 
1526 jpm 160
	public List<ModelData> collecterValeursDuChamp() {
1287 cyprien 161
		return combo.getSelection();
162
	}
163
 
1526 jpm 164
	public void peuplerChamp(List<ModelData> selection) {
1287 cyprien 165
		combo.setSelection(selection);
166
	}
167
 
1526 jpm 168
	public void chargerValeurInitiale(String valeurInitiale, String champ) {
1428 cyprien 169
		this.valeurInitiale = valeurInitiale;
170
		this.champValeurInitiale = champ;
171
 
172
		loader.load(plc, valeurInitiale, true);
173
	}
174
 
175
	/*-----------------------------
176
	  		Rafraichir
177
	-----------------------------*/
178
	public void rafraichir(Object nouvellesDonnees) {
179
		if (nouvellesDonnees instanceof Information) {
180
			Information info = (Information) nouvellesDonnees;
181
			if (info.getType().equals("selectionnerValeurCombo")) {
1468 jpm 182
				if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) {
183
					Debug.log("ERREUR. Modele non trouvé.");
184
					Debug.log("Recherché : ["+champValeurInitiale+"]="+valeurInitiale);
185
					Debug.log("Le magasin contient "+combo.getStore().getCount()+" éléments. Les propriétés des modèles sont :");
1526 jpm 186
					for (int i = 0; i < combo.getStore().getCount(); i++) {
1468 jpm 187
						Debug.log(combo.getStore().getAt(i).getProperties().toString());
188
					}
1526 jpm 189
				} else {
190
					combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
1468 jpm 191
				}
1428 cyprien 192
			}
193
		}
194
	}
1526 jpm 195
}