New file |
0,0 → 1,193 |
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.aDonnee; |
import org.tela_botanica.client.util.Debug; |
import org.tela_botanica.client.composants.GrilleParametrable; |
|
import com.extjs.gxt.ui.client.Style.SortDir; |
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.PagingLoadConfig; |
import com.extjs.gxt.ui.client.data.PagingLoadResult; |
import com.extjs.gxt.ui.client.event.Events; |
import com.extjs.gxt.ui.client.event.GridEvent; |
import com.extjs.gxt.ui.client.event.Listener; |
import com.extjs.gxt.ui.client.store.ListStore; |
import com.extjs.gxt.ui.client.store.Store; |
import com.extjs.gxt.ui.client.store.StoreEvent; |
import com.extjs.gxt.ui.client.widget.ContentPanel; |
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig; |
import com.extjs.gxt.ui.client.widget.grid.ColumnModel; |
import com.extjs.gxt.ui.client.widget.grid.EditorGrid; |
import com.extjs.gxt.ui.client.widget.grid.GridSelectionModel; |
import com.extjs.gxt.ui.client.widget.grid.RowNumberer; |
import com.extjs.gxt.ui.client.widget.layout.FitLayout; |
import com.extjs.gxt.ui.client.widget.toolbar.PagingToolBar; |
|
public class GrillePaginable<D extends ModelData> extends ContentPanel implements Rafraichissable, GrilleParametrable<D> { |
|
//-------------// |
// ATTRIBUTS // |
//-------------// |
|
// Pagination |
private int start = 0; |
private int limit = 50; |
|
// Récupération, stockage et pagination des données |
private ModelType modelType = null; |
private Proxy<D> proxy = null; |
private TransformateurJSONaModelData<PagingLoadResult<D>> reader = null; |
private ChargeurListe<PagingLoadResult<D>> loader = null; |
private ListStore<D> storeGrille = null; |
|
// Elements graphiques |
EditorGrid<D> grillePersonne = null; |
List<ColumnConfig> colonnes = null; |
ColumnModel modeleDeColonnes = null; |
|
//-------------// |
// METHODES // |
//-------------// |
|
/*-------------- |
Constructeur |
--------------*/ |
|
public GrillePaginable(ModelType modeltype, Proxy<D> proxy, List<ColumnConfig> colonnes, ColumnModel modeleDeColonnes) { |
|
// Récupération des paramètres |
this.modelType = modeltype; |
this.proxy = proxy; |
this.colonnes = colonnes; |
this.modeleDeColonnes = modeleDeColonnes; |
|
// Formatage du conteneur; |
this.setLayout(new FitLayout()); |
|
// Création des objets pour la récupération et la pagination des données |
BasePagingLoadConfig plc = new BasePagingLoadConfig(); |
plc.setLimit(limit); |
plc.setOffset(start); |
|
reader = new TransformateurJSONaModelData<PagingLoadResult<D>>(modelType); |
|
loader = new ChargeurListe<PagingLoadResult<D>>(proxy, reader, this); |
loader.setLimit(plc.getLimit()); |
loader.setOffset(plc.getOffset()); |
|
loader.addListener(Loader.BeforeLoad, new Listener<LoadEvent>() { |
public void handleEvent(LoadEvent be) { |
|
} |
}); |
|
// Création de la grille |
creerGrille(); |
} |
|
|
/*------------ |
Accesseurs |
------------*/ |
|
public EditorGrid<D> getGrille() { |
return grillePersonne; |
} |
|
public ListStore<D> getStore() { |
return storeGrille; |
} |
|
public D getSelection() { |
return grillePersonne.getSelectionModel().getSelectedItem(); |
} |
|
|
/*----------------------------- |
Rafraichir |
-----------------------------*/ |
|
public void rafraichir(Object nouvellesDonnees) { |
|
} |
|
|
/*---------------- |
Méthode privées |
-----------------*/ |
|
private void creerGrille() { |
|
final PagingToolBar toolBar = new PagingToolBar(this.limit); |
toolBar.bind(loader); |
this.setBottomComponent(toolBar); |
|
storeGrille = new ListStore<D>(loader); |
|
storeGrille.addListener(Store.Add, new Listener<StoreEvent<D>>() { |
public void handleEvent(StoreEvent<D> ce) { |
|
} |
}); |
storeGrille.addListener(Store.Remove, new Listener<StoreEvent<D>>() { |
public void handleEvent(StoreEvent<D> ce) { |
|
} |
}); |
storeGrille.addListener(Store.Update, new Listener<StoreEvent<D>>() { |
public void handleEvent(StoreEvent<D> ce) { |
|
} |
}); |
|
RowNumberer pluginLigneNumero = new RowNumberer(); |
|
GridSelectionModel<D> modeleDeSelection = new GridSelectionModel<D>(); |
|
grillePersonne = new EditorGrid<D>(storeGrille, modeleDeColonnes); |
grillePersonne.setHeight("100%"); |
grillePersonne.setBorders(true); |
grillePersonne.setSelectionModel(modeleDeSelection); |
grillePersonne.addPlugin(pluginLigneNumero); |
grillePersonne.getView().setForceFit(true); |
grillePersonne.setAutoExpandColumn("fmt_nom_complet"); |
grillePersonne.setStripeRows(true); |
grillePersonne.setBorders(true); |
|
grillePersonne.setStateful(true); |
|
grillePersonne.addListener(Events.Attach, new Listener<GridEvent<D>>() { |
public void handleEvent(GridEvent<D> be) { |
PagingLoadConfig config = new BasePagingLoadConfig(); |
config.setOffset(0); |
config.setLimit(50); |
|
Map<String, Object> state = grillePersonne.getState(); |
if (state.containsKey("offset")) { |
int offset = (Integer)state.get("offset"); |
int limit = (Integer)state.get("limit"); |
config.setOffset(offset); |
config.setLimit(limit); |
} |
if (state.containsKey("sortField")) { |
config.setSortField((String)state.get("sortField")); |
config.setSortDir(SortDir.valueOf((String)state.get("sortDir"))); |
} |
loader.load(config); |
} |
}); |
|
this.add(grillePersonne); |
} |
} |