Rev 1428 | Rev 1526 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
package org.tela_botanica.client.composants;
import java.util.List;
import java.util.Map;
import org.tela_botanica.client.composants.pagination.ChargeurListe;
import org.tela_botanica.client.composants.pagination.Proxy;
import org.tela_botanica.client.composants.pagination.TransformateurJSONaModelData;
import org.tela_botanica.client.interfaces.Rafraichissable;
import org.tela_botanica.client.modeles.Information;
import org.tela_botanica.client.modeles.Valeur;
import org.tela_botanica.client.modeles.collection.Collection;
import org.tela_botanica.client.synchronisation.Sequenceur;
import org.tela_botanica.client.util.Debug;
import org.tela_botanica.client.vues.Formulaire;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.FieldEvent;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.util.Size;
import com.extjs.gxt.ui.client.util.Util;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.VerticalPanel;
import com.extjs.gxt.ui.client.widget.form.ComboBox;
import com.extjs.gxt.ui.client.widget.layout.AbsoluteLayout;
import com.extjs.gxt.ui.client.widget.layout.AnchorLayout;
import com.extjs.gxt.ui.client.widget.layout.BoxLayout;
import com.extjs.gxt.ui.client.widget.layout.FitLayout;
import com.extjs.gxt.ui.client.widget.layout.FlowLayout;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
import com.extjs.gxt.ui.client.data.BaseModelData;
import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.LoadEvent;
import com.extjs.gxt.ui.client.data.Loader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.ModelType;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.google.gwt.user.client.rpc.AsyncCallback;
public class ChampComboBoxRechercheTempsReelPaginable extends LayoutContainer implements Rafraichissable {
//-------------//
// ATTRIBUTS //
//-------------//
private ListStore<ModelData> store = null;
private ComboBox<ModelData> combo = null;
private Proxy<?> proxy = null;
private TransformateurJSONaModelData<PagingLoadResult<ModelData>> reader = null;
private ChargeurListe<PagingLoadResult<ModelData>> loader = null;
private int start = 0;
private int limit = 10;
private int largeur = 370;
private BasePagingLoadConfig plc = null;
private ModelType modeltype = null;
private String displayName = "";
private String recherche = "";
private String champValeurInitiale = "";
private String valeurInitiale = "";
//-------------//
// METHODES //
//-------------//
/*--------------
Constructeur
--------------*/
public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modeltype, String displayName) {
this.modeltype = modeltype;
this.proxy = proxy;
this.displayName = displayName;
plc = new BasePagingLoadConfig();
plc.setLimit(limit);
plc.setOffset(start);
reader = new TransformateurJSONaModelData<PagingLoadResult<ModelData>>(modeltype);
loader = new ChargeurListe<PagingLoadResult<ModelData>>(proxy, reader, this);
loader.setLimit(plc.getLimit());
loader.setOffset(plc.getOffset());
loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() {
public void handleEvent(LoadEvent be) {
be.<ModelData> getConfig().set("start", be.<ModelData> getConfig().get("offset"));
}
});
loader.addListener(Loader.Load, new Listener<LoadEvent>() {
public void handleEvent(LoadEvent be) {
}
});
loader.addListener(Loader.LoadException, new Listener<LoadEvent>() {
public void handleEvent(LoadEvent be) {
}
});
combo = new ComboBox<ModelData>();
combo.setWidth(largeur);
this.setWidth(largeur);
combo.setDisplayField(displayName);
combo.setHideTrigger(false);
combo.setPageSize(plc.getLimit());
store = new ListStore<ModelData>(loader);
combo.setStore(store);
loader.load(plc, recherche, false);
combo.addListener(Events.KeyUp, new Listener<FieldEvent>() {
public void handleEvent(FieldEvent fe) {
// on vérifie que les touches enfoncées ne sont pas les flèches du clavier
if (!fe.isNavKeyPress()) {
recherche = combo.getRawValue();
plc.setLimit(limit); plc.setOffset(start);
loader.setLimit(limit); loader.setOffset(start);
loader.load(plc, recherche, false);
}
}
});
this.add(combo);
}
/*------------
Accesseurs
------------*/
public ComboBox<ModelData> getCombo()
{
return this.combo;
}
public ModelData getValeur()
{
if (combo.getSelection() != null && combo.getSelection().size() > 0) return combo.getSelection().get(0);
else return null;
}
public ListStore<?> getStore()
{
return combo.getStore();
}
public void setWidth(int largeur)
{
this.largeur = largeur;
this.combo.setWidth(largeur);
}
public void setWidth(int tailleLabel, int largeurTotale)
{
this.setWidth(largeurTotale);
this.largeur = largeurTotale;
this.combo.setWidth(largeurTotale - tailleLabel);
FormLayout fl = new FormLayout();
fl.setLabelWidth(tailleLabel);
fl.setDefaultWidth(largeurTotale - tailleLabel);
this.setLayout(fl);
this.layout();
}
/*-----------------------------
Gestion du contenu du champ
-----------------------------*/
public List<ModelData> collecterValeursDuChamp()
{
return combo.getSelection();
}
public void peuplerChamp(List<ModelData> selection)
{
combo.setSelection(selection);
}
public void chargerValeurInitiale(String valeurInitiale, String champ)
{
this.valeurInitiale = valeurInitiale;
this.champValeurInitiale = champ;
loader.load(plc, valeurInitiale, true);
}
/*-----------------------------
Rafraichir
-----------------------------*/
public void rafraichir(Object nouvellesDonnees) {
if (nouvellesDonnees instanceof Information) {
Information info = (Information) nouvellesDonnees;
if (info.getType().equals("selectionnerValeurCombo")) {
if (combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) {
Debug.log("ERREUR. Modele non trouvé.");
Debug.log("Recherché : ["+champValeurInitiale+"]="+valeurInitiale);
Debug.log("Le magasin contient "+combo.getStore().getCount()+" éléments. Les propriétés des modèles sont :");
for (int i=0; i<combo.getStore().getCount(); i++) {
Debug.log(combo.getStore().getAt(i).getProperties().toString());
}
}
else combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale));
}
}
}
/*----------------
Méthode privées
-----------------*/
}