Rev 1448 | Rev 1513 | 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.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 ////-------------//// Paginationprivate int start = 0;private int limit = 50;// Récupération, stockage et pagination des donnéesprivate 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 graphiquesEditorGrid<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ètresthis.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éesBasePagingLoadConfig 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 grillecreerGrille();}/*------------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);}}