/* * Ext GWT - Ext for GWT * Copyright(c) 2007-2009, Ext JS, LLC. * licensing@extjs.com * * http://extjs.com/license */ package com.extjs.gxt.samples.client.examples.grid; import java.util.ArrayList; import java.util.List; import com.extjs.gxt.samples.client.ExampleServiceAsync; import com.extjs.gxt.samples.client.Examples; import com.extjs.gxt.samples.client.examples.model.Post; import com.extjs.gxt.samples.resources.client.Resources; import com.extjs.gxt.ui.client.Registry; import com.extjs.gxt.ui.client.data.BasePagingLoadResult; import com.extjs.gxt.ui.client.data.BasePagingLoader; 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.PagingLoadConfig; import com.extjs.gxt.ui.client.data.PagingLoadResult; import com.extjs.gxt.ui.client.data.PagingLoader; import com.extjs.gxt.ui.client.data.RpcProxy; 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.event.LoadListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.util.DateWrapper; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.grid.BufferView; import com.extjs.gxt.ui.client.widget.grid.CellEditor; 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.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.FlowLayout; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.rpc.AsyncCallback; public class EditableBufferedGridExample extends LayoutContainer { @Override protected void onRender(Element parent, int index) { super.onRender(parent, index); final ExampleServiceAsync service = (ExampleServiceAsync) Registry.get(Examples.SERVICE); FlowLayout layout = new FlowLayout(10); setLayout(layout); RpcProxy<PagingLoadResult<Post>> proxy = new RpcProxy<PagingLoadResult<Post>>() { @Override public void load(Object loadConfig, AsyncCallback<PagingLoadResult<Post>> callback) { service.getPosts((PagingLoadConfig) loadConfig, callback); } }; // loader final PagingLoader<PagingLoadResult<ModelData>> loader = new BasePagingLoader<PagingLoadResult<ModelData>>( proxy); loader.setRemoteSort(true); loader.addListener(Loader.Load, new LoadListener() { @Override public void loaderLoad(LoadEvent le) { BasePagingLoadResult<Post> r = le.<BasePagingLoadResult<Post>> getData(); for (Post p : r.getData()) { if (p.getSubject().equals("")) { p.setSubject(null); } p.setDate(new DateWrapper(p.getDate()).clearTime().asDate()); } } }); ListStore<Post> store = new ListStore<Post>(loader); List<ColumnConfig> columns = new ArrayList<ColumnConfig>(); ColumnConfig column; column = new ColumnConfig("forum", "Forum", 150); column.setEditor(new CellEditor(new TextField<String>())); columns.add(column); column = new ColumnConfig("username", "Username", 100); column.setEditor(new CellEditor(new TextField<String>())); columns.add(column); column = new ColumnConfig("subject", "Subject", 200); column.setEditor(new CellEditor(new TextField<String>())); columns.add(column); ColumnConfig date = new ColumnConfig("date", "Date", 100); date.setDateTimeFormat(DateTimeFormat.getFormat("MM/dd/y")); DateField dateField = new DateField(); dateField.getPropertyEditor().setFormat(DateTimeFormat.getFormat("MM/dd/y")); date.setEditor(new CellEditor(dateField)); columns.add(date); ColumnModel cm = new ColumnModel(columns); EditorGrid<Post> grid = new EditorGrid<Post>(store, cm); grid.addListener(Events.Attach, new Listener<GridEvent<Post>>() { public void handleEvent(GridEvent<Post> be) { loader.load(0, 1000); } }); grid.setTrackMouseOver(false); grid.setLoadMask(true); grid.setBorders(true); grid.setAutoExpandColumn("forum"); grid.setView(new BufferView()); ContentPanel panel = new ContentPanel(); panel.setFrame(true); panel.setCollapsible(true); panel.setAnimCollapse(false); panel.setIcon(Resources.ICONS.table()); panel.setHeading("Editable Buffered Grid (1000 rows)"); panel.setLayout(new FitLayout()); panel.add(grid); panel.setSize(600, 350); add(panel); } }