package com.sencha.gxt.explorer.client.grid; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.cell.client.DateCell; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.user.client.ui.IsWidget; import com.google.gwt.user.client.ui.RootPanel; import com.google.gwt.user.client.ui.Widget; import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.examples.resources.client.TestData; import com.sencha.gxt.examples.resources.client.images.ExampleImages; import com.sencha.gxt.examples.resources.client.model.Stock; import com.sencha.gxt.examples.resources.client.model.StockProperties; import com.sencha.gxt.explorer.client.model.Example.Detail; import com.sencha.gxt.widget.core.client.ContentPanel; import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor.DoublePropertyEditor; import com.sencha.gxt.widget.core.client.grid.ColumnConfig; import com.sencha.gxt.widget.core.client.grid.ColumnModel; import com.sencha.gxt.widget.core.client.grid.Grid; import com.sencha.gxt.widget.core.client.grid.filters.BooleanFilter; import com.sencha.gxt.widget.core.client.grid.filters.DateFilter; import com.sencha.gxt.widget.core.client.grid.filters.GridFilters; import com.sencha.gxt.widget.core.client.grid.filters.ListFilter; import com.sencha.gxt.widget.core.client.grid.filters.NumericFilter; import com.sencha.gxt.widget.core.client.grid.filters.StringFilter; public class FilterGridExample implements IsWidget, EntryPoint { private static final StockProperties props = GWT.create(StockProperties.class); @Override public Widget asWidget() { final NumberFormat number = NumberFormat.getFormat("0.00"); ColumnConfig
nameCol = new ColumnConfig
(props.name(), 200, "Company"); ColumnConfig
symbolCol = new ColumnConfig
(props.symbol(), 100, "Symbol"); ColumnConfig
lastCol = new ColumnConfig
(props.last(), 75, "Last"); ColumnConfig
changeCol = new ColumnConfig
(props.change(), 100, "Change"); changeCol.setCell(new AbstractCell
() { @Override public void render(Context context, Double value, SafeHtmlBuilder sb) { String style = "style='color: " + (value < 0 ? "red" : "green") + "'"; String v = number.format(value); sb.appendHtmlConstant("
" + v + "
"); } }); ColumnConfig
lastTransCol = new ColumnConfig
(props.lastTrans(), 100, "Last Updated"); lastTransCol.setCell(new DateCell(DateTimeFormat.getFormat("MM/dd/yyyy"))); ColumnConfig
splitCol = new ColumnConfig
(props.split(), 75, "Split"); splitCol.setCell(new AbstractCell
() { @Override public void render(Context context, Boolean value, SafeHtmlBuilder sb) { sb.appendHtmlConstant(value ? "Yes" : "No"); } }); ColumnConfig
typeCol = new ColumnConfig
(props.industry(), 75, "Type"); List
> l = new ArrayList
>(); l.add(nameCol); l.add(symbolCol); l.add(lastCol); l.add(changeCol); l.add(lastTransCol); l.add(splitCol); l.add(typeCol); ColumnModel
cm = new ColumnModel
(l); ListStore
store = new ListStore
(props.key()); store.addAll(TestData.getStocks()); ContentPanel cp = new ContentPanel(); cp.setHeadingText("Filter Grid"); cp.getHeader().setIcon(ExampleImages.INSTANCE.table()); cp.setPixelSize(700, 300); cp.addStyleName("margin-10"); final Grid
grid = new Grid
(store, cm); grid.getView().setAutoExpandColumn(nameCol); grid.setBorders(false); grid.setStripeRows(true); grid.setColumnLines(true); ListStore
typeStore = new ListStore
(new ModelKeyProvider
() { @Override public String getKey(String item) { return item; } }); typeStore.add("Auto"); typeStore.add("Media"); typeStore.add("Medical"); typeStore.add("Tech"); NumericFilter
lastFilter = new NumericFilter
(props.last(), new DoublePropertyEditor()); StringFilter
nameFilter = new StringFilter
(props.name()); DateFilter
dateFilter = new DateFilter
(props.lastTrans()); BooleanFilter
booleanFilter = new BooleanFilter
(props.split()); ListFilter
listFilter = new ListFilter
(props.industry(), typeStore); GridFilters
filters = new GridFilters
(); filters.initPlugin(grid); filters.setLocal(true); filters.addFilter(lastFilter); filters.addFilter(nameFilter); filters.addFilter(dateFilter); filters.addFilter(booleanFilter); filters.addFilter(listFilter); cp.setWidget(grid); return cp; } @Override public void onModuleLoad() { RootPanel.get().add(asWidget()); } }