Grid with buttons

Esto en un ejemplo que viene el la pagina de sencha.com con algo mas de miga

en la parte del view debemos tener algo como esto

public void getListado(final ClickHandler handlerEdit, final ClickHandler handlerDelete,
final ConjuntoServicios servicios,
boolean bReadOnly) {

cp = new ContentPanel();

List configs = new ArrayList();

// A�adimos las columnas.
ColumnConfig clmncnfgID = new ColumnConfig(«id», «Id», 100);
clmncnfgID.setHidden(true);
configs.add(clmncnfgID);

ColumnConfig clmncnfgSeccion = new ColumnConfig(«id_1», servicios.getConstants().cmn_nombre(), 200);
configs.add(clmncnfgSeccion);

ColumnConfig clmncnfgCodigo = new ColumnConfig(«id_2», servicios.getConstants().cmn_codigo(), 200);
configs.add(clmncnfgCodigo);

//añadimos el boton el colum render
// en este caso tenemos dos botones una de bajada y otro de subida
GridCellRenderer buttonDownRenderer = new GridCellRenderer() {
public Object render(final BaseModel model, String property, ColumnData config, final int rowIndex,
final int colIndex, ListStore store, final Grid grid) {

init = true;
grid.addListener(Events.ColumnResize, new Listener() {

public void handleEvent(GridEvent be) {

for (int i = 0; i < be.getGrid().getStore().getCount(); i++) { if (be.getGrid().getView().getWidget(i, be.getColIndex()) != null ){ // && be.getGrid().getView().getWidget(i, be.getColIndex()) instanceof BoxComponent) { //((BoxComponent) be.getGrid().getView().getWidget(i, be.getColIndex())).setWidth(be.getWidth() – 10); } } } }); Button bntDown = new Button(); bntDown.addSelectionListener( new SelectionListener() {
@Override
public void componentSelected(ButtonEvent ce) {
GridEvent gridEvent = new GridEvent(grid);
gridEvent.setModel(model);

//este es el evento que mando por boton que recojo en el presenter
grid.fireEvent(Events.Deactivate, gridEvent);
}
});

bntDown.setWidth(17);
bntDown.setHeight(17);
bntDown.setIconStyle(«icon_bajar»);

return bntDown;
}
};

//segundo boton
GridCellRenderer buttonUpRenderer = new GridCellRenderer() {
public Object render(final BaseModel model, String property, ColumnData config, final int rowIndex,
final int colIndex, ListStore store, final Grid grid) {
if (!init) {
init = true;

}

Button bntUp = new Button();
bntUp.addSelectionListener( new SelectionListener() {
@Override
public void componentSelected(ButtonEvent ce) {
GridEvent gridEvent = new GridEvent(grid);
gridEvent.setModel(model);
//evento que se lanza desde el view
grid.fireEvent(Events.TwinTriggerClick, gridEvent);
}
});
bntUp.setWidth(17);
bntUp.setHeight(17);
bntUp.setIconStyle(«icon_subir»);

return bntUp;
}
};

ColumnConfig columordenBajar= new ColumnConfig(«in_orden», «», 30);
columordenBajar.setRenderer(buttonDownRenderer);
configs.add(columordenBajar);

ColumnConfig columordenSubir= new ColumnConfig(«id_version», «», 30);
columordenSubir.setRenderer(buttonUpRenderer);
configs.add(columordenSubir);

ColumnConfig clmncnfgEditar = new ColumnConfig(«idEditar», «», 80);
configs.add(clmncnfgEditar);

ColumnConfig clmncnfgEliminar = new ColumnConfig(«idEliminar», «», 80);
configs.add(clmncnfgEliminar);

GridCellRenderer accionesEditarRenderer = new GridCellRenderer() {

@Override
public Object render(final BaseModel model, final String property, ColumnData config,
final int rowIndex, final int colIndex, final ListStore store,
final Grid grid) {

Anchor enlaceEditar = new Anchor(«Editar», «#»);
if (handlerEdit!=null) enlaceEditar.addClickHandler(handlerEdit);
return enlaceEditar;
}};
clmncnfgEditar.setAlignment(HorizontalAlignment.CENTER);
clmncnfgEditar.setRenderer(accionesEditarRenderer);

// Renderer de eliminar,
GridCellRenderer accionesEliminarRenderer = new GridCellRenderer() {

@Override
public Object render(final BaseModel model, final String property, ColumnData config,
final int rowIndex, final int colIndex, final ListStore store,
final Grid grid) {

Anchor enlaceEliminar = new Anchor(«Eliminar», «#»);
if (handlerDelete!=null) enlaceEliminar.addClickHandler(handlerDelete);
return enlaceEliminar;
}};

clmncnfgEliminar.setAlignment(HorizontalAlignment.CENTER);
clmncnfgEliminar.setRenderer(accionesEliminarRenderer);

grid = new Grid(new GroupingStore(), new ColumnModel(configs));
grid.setBorders(false);
//gridCompositeSecciones.setLoadMask(true);
grid.setAutoExpandColumn(«no_garantia»);
grid.setAutoExpandMax(1500);

grid.addListener(Events.ViewReady, Tools.configAutoHeightListener(this.grid, this.cp));
grid.addListener(Events.ColumnResize, Tools.configAutoHeightListener(this.grid, this.cp));
grid.getColumnModel().addListener(Events.HiddenChange, Tools.configAutoHeightListener(this.grid, this.cp));
grid.getStore().addListener(Store.Add, Tools.configAutoHeightListener(this.grid, this.cp));

Tools.maskEmptyGrid(grid, CasiopeaMessages.INSTANCE.grid_vacio_pulse_anadir());

en la parte del presenter en el bind() o donde declares los botones
como los eventos eran del grid aunque generados por los botoenes por eso tenemos que mandar el grid entero

this.display.getGrid().addListener(Events.Deactivate, new Listenert(){

@Override
public void handleEvent(GridEvent
be) {

actualizarSeccionOrden(-1,be.getModel(),be.getGrid().getStore().getCount());

}

});

this.display.getGrid().addListener(Events.TwinTriggerClick, new Listener(){

@Override
public void handleEvent(GridEvent
be) {

actualizarSeccionOrden(+1,be.getModel(),be.getGrid().getStore().getCount());

}

});

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *