Subversion Repositories eFlore/Applications.coel

Rev

Rev 1417 | Rev 1468 | Go to most recent revision | 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;
1329 cyprien 4
import java.util.Map;
1287 cyprien 5
 
6
import org.tela_botanica.client.composants.pagination.ChargeurListe;
7
import org.tela_botanica.client.composants.pagination.Proxy;
8
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData;
1428 cyprien 9
import org.tela_botanica.client.interfaces.Rafraichissable;
10
import org.tela_botanica.client.modeles.Information;
1287 cyprien 11
import org.tela_botanica.client.modeles.Valeur;
1428 cyprien 12
import org.tela_botanica.client.modeles.collection.Collection;
13
import org.tela_botanica.client.synchronisation.Sequenceur;
1287 cyprien 14
import org.tela_botanica.client.util.Debug;
1428 cyprien 15
import org.tela_botanica.client.vues.Formulaire;
1287 cyprien 16
 
17
import com.extjs.gxt.ui.client.event.BaseEvent;
18
import com.extjs.gxt.ui.client.event.Events;
1428 cyprien 19
import com.extjs.gxt.ui.client.event.FieldEvent;
1287 cyprien 20
import com.extjs.gxt.ui.client.event.Listener;
21
import com.extjs.gxt.ui.client.store.ListStore;
1329 cyprien 22
import com.extjs.gxt.ui.client.util.Size;
23
import com.extjs.gxt.ui.client.util.Util;
1287 cyprien 24
import com.extjs.gxt.ui.client.widget.LayoutContainer;
25
import com.extjs.gxt.ui.client.widget.VerticalPanel;
26
import com.extjs.gxt.ui.client.widget.form.ComboBox;
1369 cyprien 27
import com.extjs.gxt.ui.client.widget.layout.AbsoluteLayout;
28
import com.extjs.gxt.ui.client.widget.layout.AnchorLayout;
29
import com.extjs.gxt.ui.client.widget.layout.BoxLayout;
30
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
31
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
1329 cyprien 32
import com.extjs.gxt.ui.client.widget.layout.FormData;
33
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
1287 cyprien 34
 
1329 cyprien 35
import com.extjs.gxt.ui.client.data.BaseModelData;
1287 cyprien 36
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
37
import com.extjs.gxt.ui.client.data.LoadEvent;
38
import com.extjs.gxt.ui.client.data.Loader;
39
import com.extjs.gxt.ui.client.data.ModelData;
40
import com.extjs.gxt.ui.client.data.ModelType;
41
import com.extjs.gxt.ui.client.data.PagingLoadResult;
1428 cyprien 42
import com.google.gwt.user.client.rpc.AsyncCallback;
1287 cyprien 43
 
1428 cyprien 44
public class ChampComboBoxRechercheTempsReelPaginable extends LayoutContainer implements Rafraichissable {
1287 cyprien 45
 
46
	  //-------------//
47
	 //  ATTRIBUTS	//
48
	//-------------//
49
 
50
	private ListStore<ModelData> store = null;
51
	private ComboBox<ModelData> combo = null;
52
 
53
	private Proxy<?> proxy = null;
1428 cyprien 54
	private AsyncCallback callback = null;
1287 cyprien 55
	private TransformateurJSONaModelData<PagingLoadResult<ModelData>> reader = null;
56
	private ChargeurListe<PagingLoadResult<ModelData>> loader = null;
57
 
58
	private int start = 0;
59
	private int limit = 10;
1369 cyprien 60
	private int largeur = 370;
1287 cyprien 61
 
62
	private BasePagingLoadConfig plc = null;
63
	private ModelType modeltype = null;
64
	private String displayName = "";
1329 cyprien 65
	private String recherche = "";
1287 cyprien 66
 
1428 cyprien 67
	private String champValeurInitiale = "";
68
	private String valeurInitiale = "";
69
 
1287 cyprien 70
	  //-------------//
71
	 //   METHODES	//
72
	//-------------//
73
 
74
	/*--------------
75
	  Constructeur
76
	--------------*/
1428 cyprien 77
 
1287 cyprien 78
	public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modeltype, String displayName) {
79
 
80
		this.modeltype = modeltype;
81
		this.proxy = proxy;
82
		this.displayName = displayName;
83
 
84
		plc = new BasePagingLoadConfig();
85
		plc.setLimit(limit);
86
		plc.setOffset(start);
87
 
88
		reader = new TransformateurJSONaModelData<PagingLoadResult<ModelData>>(modeltype);
89
 
1428 cyprien 90
		loader = new ChargeurListe<PagingLoadResult<ModelData>>(proxy, reader, this);
1287 cyprien 91
        loader.setLimit(plc.getLimit());
92
        loader.setOffset(plc.getOffset());
93
 
94
		loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
95
			public void handleEvent(LoadEvent be) {
96
				be.<ModelData> getConfig().set("start", be.<ModelData> getConfig().get("offset"));
97
			}
98
		});
99
 
100
		loader.addListener(Loader.Load, new Listener<LoadEvent>() {
101
			public void handleEvent(LoadEvent be) {
102
 
103
		    }
104
		});
105
 
106
		loader.addListener(Loader.LoadException, new Listener<LoadEvent>() {
107
			public void handleEvent(LoadEvent be) {
108
 
109
		    }
110
		});
111
 
1369 cyprien 112
		combo = new ComboBox<ModelData>();
1287 cyprien 113
		combo.setWidth(largeur);
1369 cyprien 114
		this.setWidth(largeur);
1287 cyprien 115
		combo.setDisplayField(displayName);
116
		combo.setHideTrigger(false);
117
		combo.setPageSize(plc.getLimit());
118
        store = new ListStore<ModelData>(loader);
119
        combo.setStore(store);
1428 cyprien 120
        loader.load(plc, recherche, false);
1369 cyprien 121
 
1428 cyprien 122
		combo.addListener(Events.KeyUp, new Listener<FieldEvent>() {
1287 cyprien 123
 
1428 cyprien 124
			public void handleEvent(FieldEvent fe) {
125
				// on vérifie que les touches enfoncées ne sont pas les flèches du clavier
126
				if (fe.getKeyCode() <= 38 || fe.getKeyCode() >= 40) {
127
					recherche = combo.getRawValue();
128
					plc.setLimit(limit); plc.setOffset(start);
129
					loader.setLimit(limit); loader.setOffset(start);
130
					loader.load(plc, recherche, false);
131
				}
1287 cyprien 132
			}
133
 
134
		});
1369 cyprien 135
 
136
		this.add(combo);
1287 cyprien 137
	}
138
 
139
	/*------------
140
	  Accesseurs
141
	------------*/
142
	public ComboBox<ModelData> getCombo()
143
	{
144
		return this.combo;
145
	}
146
 
1329 cyprien 147
	public ModelData getValeur()
1287 cyprien 148
	{
1428 cyprien 149
		if (combo.getSelection() != null && combo.getSelection().size() > 0) return combo.getSelection().get(0);
1329 cyprien 150
		else return null;
1287 cyprien 151
	}
152
 
153
	public ListStore<?> getStore()
154
	{
155
		return combo.getStore();
156
	}
157
 
158
	public void setWidth(int largeur)
159
	{
160
		this.largeur = largeur;
161
		this.combo.setWidth(largeur);
162
	}
163
 
1329 cyprien 164
	public void setWidth(int tailleLabel, int largeurTotale)
165
	{
1369 cyprien 166
		this.setWidth(largeurTotale);
1329 cyprien 167
		this.largeur = largeurTotale;
168
		this.combo.setWidth(largeurTotale - tailleLabel);
169
 
170
		FormLayout fl = new FormLayout();
171
		fl.setLabelWidth(tailleLabel);
1369 cyprien 172
		fl.setDefaultWidth(largeurTotale - tailleLabel);
173
		this.setLayout(fl);
174
 
175
		this.layout();
1329 cyprien 176
	}
1287 cyprien 177
 
178
	/*-----------------------------
179
	  Gestion du contenu du champ
180
	-----------------------------*/
181
 
182
	public List<ModelData> collecterValeursDuChamp()
183
	{
184
		return combo.getSelection();
185
	}
186
 
187
	public void peuplerChamp(List<ModelData> selection)
188
	{
189
		combo.setSelection(selection);
190
	}
191
 
1428 cyprien 192
	public void chargerValeurInitiale(String valeurInitiale, String champ)
193
	{
194
		this.valeurInitiale = valeurInitiale;
195
		this.champValeurInitiale = champ;
196
 
197
		loader.load(plc, valeurInitiale, true);
198
	}
199
 
200
	/*-----------------------------
201
	  		Rafraichir
202
	-----------------------------*/
203
	public void rafraichir(Object nouvellesDonnees) {
204
 
205
		if (nouvellesDonnees instanceof Information) {
206
			Information info = (Information) nouvellesDonnees;
207
			if (info.getType().equals("selectionnerValeurCombo")) {
208
				if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) Debug.log("ERREUR. Modele non trouvé");
209
				else combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
210
			}
211
		}
212
	}
1287 cyprien 213
 
214
	/*----------------
215
	  Méthode privées
216
	-----------------*/
1428 cyprien 217
 
218
 
1287 cyprien 219
 
220
}
221
 
222
 
223
 
224