package com.sencha.gxt.explorer.client.grid; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.google.gwt.cell.client.AbstractCell; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.core.client.GWT; import com.google.gwt.core.client.Scheduler; import com.google.gwt.core.client.Scheduler.ScheduledCommand; import com.google.gwt.editor.client.Editor.Path; import com.google.gwt.i18n.client.NumberFormat; import com.google.gwt.safehtml.shared.SafeHtml; import com.google.gwt.safehtml.shared.SafeHtmlBuilder; import com.google.gwt.safehtml.shared.SafeHtmlUtils; import com.google.gwt.user.client.ui.HasHorizontalAlignment; 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.NumberCell; import com.sencha.gxt.core.client.IdentityValueProvider; import com.sencha.gxt.core.client.ValueProvider; import com.sencha.gxt.data.shared.ListStore; import com.sencha.gxt.data.shared.ModelKeyProvider; import com.sencha.gxt.data.shared.PropertyAccess; import com.sencha.gxt.examples.resources.client.TestData; import com.sencha.gxt.examples.resources.client.model.Task; import com.sencha.gxt.explorer.client.model.Example.Detail; import com.sencha.gxt.widget.core.client.FramedPanel; 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.GroupSummaryView; import com.sencha.gxt.widget.core.client.grid.SummaryColumnConfig; import com.sencha.gxt.widget.core.client.grid.SummaryRenderer; import com.sencha.gxt.widget.core.client.grid.SummaryType; public class LiveGroupSummaryExample implements EntryPoint, IsWidget { interface TaskProperties extends PropertyAccess
{ @Path("id") ModelKeyProvider
key(); ValueProvider
description(); ValueProvider
project(); ValueProvider
due(); ValueProvider
estimate(); ValueProvider
rate(); } @Override public Widget asWidget() { List
tasks = TestData.getTasks(); TaskProperties properties = GWT.create(TaskProperties.class); final ListStore
store = new ListStore
(properties.key()); store.addAll(tasks); SummaryColumnConfig
desc = new SummaryColumnConfig
(properties.description(), 65, "Task"); desc.setSummaryType(new SummaryType.CountSummaryType()); desc.setSummaryRenderer(new SummaryRenderer
() { @Override public SafeHtml render(Number value, Map
, Number> data) { return SafeHtmlUtils.fromTrustedString(value.intValue() > 1 ? "(" + value.intValue() + " Tasks)" : "(1 Task)"); } }); final SummaryColumnConfig
project = new SummaryColumnConfig
(properties.project(), 55, "Project"); SummaryColumnConfig
due = new SummaryColumnConfig
(properties.due(), 20, "Due"); SummaryColumnConfig
estimate = new SummaryColumnConfig
(properties.estimate(), 20, "Estimate"); estimate.setSummaryType(new SummaryType.SumSummaryType
()); estimate.setSummaryRenderer(new SummaryRenderer
() { @Override public SafeHtml render(Number value, Map
, Number> data) { return SafeHtmlUtils.fromTrustedString(value + " hours"); } }); estimate.setCell(new AbstractCell
() { @Override public void render(com.google.gwt.cell.client.Cell.Context context, Double value, SafeHtmlBuilder sb) { sb.appendHtmlConstant(value + " hours"); } }); SummaryColumnConfig
rate = new SummaryColumnConfig
(properties.rate(), 20, "Rate"); rate.setAlignment(HasHorizontalAlignment.ALIGN_RIGHT); rate.setCell(new NumberCell
(NumberFormat.getCurrencyFormat())); rate.setSummaryType(new SummaryType.AvgSummaryType
()); rate.setSummaryFormat(NumberFormat.getCurrencyFormat()); SummaryColumnConfig
cost = new SummaryColumnConfig
(new IdentityValueProvider
(), 20, "Cost"); cost.setColumnClassName("cost"); cost.setAlignment(HasHorizontalAlignment.ALIGN_RIGHT); cost.setCell(new AbstractCell
() { @Override public void render(com.google.gwt.cell.client.Cell.Context context, Task value, SafeHtmlBuilder sb) { sb.appendHtmlConstant(NumberFormat.getCurrencyFormat().format(value.getRate() * value.getEstimate())); } }); cost.setSummaryFormat(NumberFormat.getCurrencyFormat()); cost.setSummaryType(new SummaryType
() { @Override public Double calculate(List
m, ValueProvider
valueProvider) { double value = 0; for (int i = 0; i < m.size(); i++) { Task t = m.get(i); value = value + (t.getRate() * t.getEstimate()); } return value; } }); List
> cfgs = new ArrayList
>(); cfgs.add(desc); cfgs.add(project); cfgs.add(due); cfgs.add(estimate); cfgs.add(rate); cfgs.add(cost); ColumnModel
cm = new ColumnModel
(cfgs); final GroupSummaryView
summary = new GroupSummaryView
(); summary.setForceFit(true); summary.setShowGroupedColumn(false); Grid
grid = new Grid
(store, cm); grid.setBorders(true); grid.setView(summary); grid.getView().setShowDirtyCells(false); Scheduler.get().scheduleFinally(new ScheduledCommand() { @Override public void execute() { summary.groupBy(project); } }); FramedPanel panel = new FramedPanel(); panel.setHeadingHtml("Sponsored Projects"); panel.setSize("800", "450"); panel.add(grid); panel.addStyleName("margin-10"); panel.setCollapsible(true); return panel; } @Override public void onModuleLoad() { RootPanel.get().add(this); } }