/**
* Sencha GXT 3.0.0b - Sencha for GWT
* Copyright(c) 2007-2012, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
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.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.DateTimeFormat.PredefinedFormat;
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.cell.core.client.PropertyDisplayCell;
import com.sencha.gxt.data.shared.ListStore;
import com.sencha.gxt.examples.resources.client.TestData;
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.FramedPanel;
import com.sencha.gxt.widget.core.client.form.NumberPropertyEditor.DoublePropertyEditor;
import com.sencha.gxt.widget.core.client.grid.AggregationNumberSummaryRenderer;
import com.sencha.gxt.widget.core.client.grid.AggregationRowConfig;
import com.sencha.gxt.widget.core.client.grid.AggregationSafeHtmlRenderer;
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.HeaderGroupConfig;
import com.sencha.gxt.widget.core.client.grid.SummaryType.AvgSummaryType;
import com.sencha.gxt.widget.core.client.grid.SummaryType.MaxSummaryType;
import com.sencha.gxt.widget.core.client.grid.SummaryType.MinSummaryType;
@Detail(name = "Aggregation Grid", icon = "aggregationrowgrid", category = "Grid", classes = {Stock.class, StockProperties.class})
public class AggregationGridExample implements IsWidget, EntryPoint {
@Override
public Widget asWidget() {
StockProperties props = GWT.create(StockProperties.class);
final NumberFormat numberFormat = NumberFormat.getFormat("0.00");
final NumberFormat currency = NumberFormat.getCurrencyFormat();
List<ColumnConfig<Stock, ?>> configs = new ArrayList<ColumnConfig<Stock, ?>>();
ColumnConfig<Stock, String> nameColumn = new ColumnConfig<Stock, String>(props.name(), 200, "Company");
configs.add(nameColumn);
ColumnConfig<Stock, String> symbolColumn = new ColumnConfig<Stock, String>(props.symbol(), 100, "Symbol");
configs.add(symbolColumn);
ColumnConfig<Stock, Double> lastColumn = new ColumnConfig<Stock, Double>(props.last(), 100, "Last");
lastColumn.setCell(new PropertyDisplayCell<Double>(new DoublePropertyEditor(currency)));
configs.add(lastColumn);
ColumnConfig<Stock, Double> changeColumn = new ColumnConfig<Stock, Double>(props.change(), 100, "Change");
changeColumn.setCell(new PropertyDisplayCell<Double>(new DoublePropertyEditor(numberFormat)) {
@Override
public void render(com.google.gwt.cell.client.Cell.Context context, Double value, SafeHtmlBuilder sb) {
String style = value < 0 ? "red" : "green";
sb.appendHtmlConstant("<span style='color:" + style + "'>");
super.render(context, value, sb);
sb.appendHtmlConstant("</span>");
}
});
configs.add(changeColumn);
ColumnConfig<Stock, Date> dateColumn = new ColumnConfig<Stock, Date>(props.lastTrans(), 100, "Date");
dateColumn.setCell(new DateCell(DateTimeFormat.getFormat(PredefinedFormat.DATE_SHORT)));
configs.add(dateColumn);
final ListStore<Stock> store = new ListStore<Stock>(props.key());
store.addAll(TestData.getStocks());
ColumnModel<Stock> cm = new ColumnModel<Stock>(configs);
cm.addHeaderGroup(0, 0, new HeaderGroupConfig("Stock Information", 1, 2));
cm.addHeaderGroup(0, 2, new HeaderGroupConfig("Stock Performance", 1, 2));
AggregationRowConfig<Stock> averages = new AggregationRowConfig<Stock>();
averages.setRenderer(nameColumn, new AggregationSafeHtmlRenderer<Stock>("Average"));
averages.setRenderer(lastColumn, new AggregationNumberSummaryRenderer<Stock, Number>(currency,
new AvgSummaryType<Number>()));
averages.setRenderer(changeColumn, new AggregationNumberSummaryRenderer<Stock, Number>(numberFormat,
new AvgSummaryType<Number>()));
cm.addAggregationRow(averages);
AggregationRowConfig<Stock> max = new AggregationRowConfig<Stock>();
max.setRenderer(nameColumn, new AggregationSafeHtmlRenderer<Stock>("Maximum"));
max.setRenderer(lastColumn, new AggregationNumberSummaryRenderer<Stock, Number>(currency,
new MaxSummaryType<Number>()));
max.setRenderer(changeColumn, new AggregationNumberSummaryRenderer<Stock, Number>(numberFormat,
new MaxSummaryType<Number>()));
cm.addAggregationRow(max);
AggregationRowConfig<Stock> min = new AggregationRowConfig<Stock>();
min.setRenderer(nameColumn, new AggregationSafeHtmlRenderer<Stock>("Minimum"));
min.setRenderer(lastColumn, new AggregationNumberSummaryRenderer<Stock, Number>(currency,
new MinSummaryType<Number>()));
min.setRenderer(changeColumn, new AggregationNumberSummaryRenderer<Stock, Number>(numberFormat,
new MinSummaryType<Number>()));
cm.addAggregationRow(min);
FramedPanel cp = new FramedPanel();
cp.setCollapsible(true);
cp.setAnimCollapse(false);
cp.setHeadingText("Aggregation Rows");
cp.setPixelSize(600, 350);
cp.addStyleName("margin-10");
Grid<Stock> grid = new Grid<Stock>(store, cm);
grid.setBorders(true);
grid.getView().setAutoExpandColumn(nameColumn);
cp.add(grid);
return cp;
}
@Override
public void onModuleLoad() {
RootPanel.get().add(asWidget());
}
}