New file |
0,0 → 1,211 |
package org.tela_botanica.client.composants; |
|
import java.util.List; |
|
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.util.Debug; |
|
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.widget.LayoutContainer; |
import com.extjs.gxt.ui.client.widget.form.ComboBox; |
import com.extjs.gxt.ui.client.widget.layout.FormLayout; |
|
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; |
|
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 = ""; |
private boolean valeurInitialeAffectee = false; |
|
//-------------// |
// METHODES // |
//-------------// |
|
/*-------------- |
Constructeur |
--------------*/ |
public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modelType, String displayName, int taillePage) { |
initialiserChamp(proxy, modelType, displayName); |
} |
|
public ChampComboBoxRechercheTempsReelPaginable(Proxy<?> proxy, ModelType modelType, String displayName) { |
initialiserChamp(proxy, modelType, displayName); |
} |
|
private void initialiserChamp(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>>(this.modeltype, null); |
|
loader = new ChargeurListe<PagingLoadResult<ModelData>>(this.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>(); |
this.setWidth(largeur); |
combo.setDisplayField(this.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; |
if(combo.getStore().findModel(champValeurInitiale, valeurInitiale) == null) { |
loader.load(plc, "", true); |
this.getCombo().disable(); |
} else { |
combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale)); |
} |
} |
|
/*----------------------------- |
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) { |
// Si la valeur ne fait pas partie de la première page, on doit charger la liste complète |
// C'est un peu moche mais pour le moment ça marche (les listes ne dépassant pas quelques |
// centaines d'élements), on s'arrete par contre si on a atteint le total d'éléments |
if(!valeurInitialeAffectee && combo.getStore().getCount() < loader.getTotalCount()) { |
loader.load(start, loader.getTotalCount()); |
} else { |
this.getCombo().enable(); |
} |
} else { |
combo.setValue(combo.getStore().findModel(champValeurInitiale, valeurInitiale)); |
valeurInitialeAffectee = true; |
this.getCombo().enable(); |
} |
} |
} |
} |
} |
Property changes: |
Added: svn:mergeinfo |
Merged /branches/v1.0-syrah/src/org/tela_botanica/client/composants/ChampComboBoxRechercheTempsReelPaginable.java:r1136-1208,1292-1367 |
Merged /branches/v1.1-aramon/src/org/tela_botanica/client/composants/ChampComboBoxRechercheTempsReelPaginable.java:r1383-1511 |