/* * 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.chart; import java.util.ArrayList; import com.extjs.gxt.charts.client.Chart; import com.extjs.gxt.charts.client.event.ChartEvent; import com.extjs.gxt.charts.client.event.ChartListener; import com.extjs.gxt.charts.client.model.BarDataProvider; import com.extjs.gxt.charts.client.model.ChartModel; import com.extjs.gxt.charts.client.model.Legend; import com.extjs.gxt.charts.client.model.LineDataProvider; import com.extjs.gxt.charts.client.model.ScaleProvider; import com.extjs.gxt.charts.client.model.Legend.Position; import com.extjs.gxt.charts.client.model.charts.BarChart; import com.extjs.gxt.charts.client.model.charts.LineChart; import com.extjs.gxt.charts.client.model.charts.BarChart.BarStyle; import com.extjs.gxt.samples.client.Examples; import com.extjs.gxt.samples.resources.client.TestData; import com.extjs.gxt.samples.resources.client.model.TeamSales; import com.extjs.gxt.ui.client.Style.Orientation; import com.extjs.gxt.ui.client.event.ButtonEvent; 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.SelectionListener; import com.extjs.gxt.ui.client.store.ListStore; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.ContentPanel; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.NumberField; import com.extjs.gxt.ui.client.widget.form.NumberPropertyEditor; import com.extjs.gxt.ui.client.widget.form.Radio; import com.extjs.gxt.ui.client.widget.form.RadioGroup; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.form.FormPanel.LabelAlign; import com.extjs.gxt.ui.client.widget.grid.CellEditor; import com.extjs.gxt.ui.client.widget.grid.CellSelectionModel; 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.FormLayout; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; import com.google.gwt.user.client.Element; public class AdvancedChartExample extends LayoutContainer { private EditorGrid<TeamSales> teamSalesGrid; private Radio selRadio; @Override protected void onRender(Element parent, int index) { super.onRender(parent, index); final ListStore<TeamSales> store = new ListStore<TeamSales>(); store.add(TestData.getTeamSales()); // chart String url = !Examples.isExplorer() ? "../../" : ""; url += "gxt/chart/open-flash-chart.swf"; final Chart chart = new Chart(url); ChartListener listener = new ChartListener() { public void chartClick(ChartEvent ce) { int row = ce.getChartConfig().getValues().indexOf(ce.getDataType()); int col = ce.getChartModel().getChartConfigs().indexOf(ce.getChartConfig()) + 1; CellSelectionModel<TeamSales> csm = (CellSelectionModel<TeamSales>) teamSalesGrid.getSelectionModel(); if (selRadio.getValue()) { csm.selectCell(row, col); } else { teamSalesGrid.startEditing(row, col); } } }; ChartModel model = new ChartModel("Team Sales by Month", "font-size: 14px; font-family: Verdana; text-align: center;"); model.setBackgroundColour("#fefefe"); model.setLegend(new Legend(Position.TOP, true)); model.setScaleProvider(ScaleProvider.ROUNDED_NEAREST_SCALE_PROVIDER); BarChart bar = new BarChart(BarStyle.GLASS); bar.setColour("#00aa00"); BarDataProvider barProvider = new BarDataProvider("alphasales", "month"); barProvider.bind(store); bar.setDataProvider(barProvider); bar.addChartListener(listener); model.addChartConfig(bar); bar = new BarChart(BarStyle.GLASS); bar.setColour("#0000cc"); barProvider = new BarDataProvider("betasales"); barProvider.bind(store); bar.setDataProvider(barProvider); bar.addChartListener(listener); model.addChartConfig(bar); bar = new BarChart(BarStyle.GLASS); bar.setColour("#ff6600"); barProvider = new BarDataProvider("gammasales"); barProvider.bind(store); bar.setDataProvider(barProvider); bar.addChartListener(listener); model.addChartConfig(bar); LineChart line = new LineChart(); line.setAnimateOnShow(true); line.setText("Average"); line.setColour("#FF0000"); LineDataProvider lineProvider = new LineDataProvider("avgsales"); lineProvider.bind(store); line.setDataProvider(lineProvider); model.addChartConfig(line); chart.setChartModel(model); // grid NumberPropertyEditor npe = new NumberPropertyEditor(Integer.class); ArrayList<ColumnConfig> cols = new ArrayList<ColumnConfig>(); ColumnConfig qtr = new ColumnConfig("month", "Month", 100); cols.add(qtr); qtr.setEditor(new CellEditor(new TextField<String>())); ColumnConfig alpha = new ColumnConfig("alphasales", "Alpha ($M)", 100); cols.add(alpha); NumberField nf = new NumberField(); nf.setPropertyEditor(npe); alpha.setEditor(new CellEditor(nf)); ColumnConfig beta = new ColumnConfig("betasales", "Beta ($M)", 100); cols.add(beta); nf = new NumberField(); nf.setPropertyEditor(npe); beta.setEditor(new CellEditor(nf)); ColumnConfig gamma = new ColumnConfig("gammasales", "Gamma ($M)", 100); cols.add(gamma); nf = new NumberField(); nf.setPropertyEditor(npe); gamma.setEditor(new CellEditor(nf)); ColumnModel cm = new ColumnModel(cols); teamSalesGrid = new EditorGrid<TeamSales>(store, cm); teamSalesGrid.getView().setForceFit(true); teamSalesGrid.getView().setShowDirtyCells(false); teamSalesGrid.addListener(Events.AfterEdit, new Listener<GridEvent<TeamSales>>() { public void handleEvent(GridEvent<TeamSales> be) { store.commitChanges(); } }); Button reload = new Button("Reload Team Sales Data"); reload.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { store.removeAll(); store.add(TestData.getTeamSales()); } }); RadioGroup rg = new RadioGroup(); rg.setFieldLabel("Chart click"); Radio edRadio = new Radio(); edRadio.setBoxLabel("Edits Cell"); rg.add(edRadio); selRadio = new Radio(); selRadio.setValue(true); selRadio.setBoxLabel("Selects Cell"); rg.add(selRadio); LayoutContainer radForm = new LayoutContainer(new FormLayout(LabelAlign.RIGHT)); radForm.add(rg); LayoutContainer lc = new LayoutContainer(); RowLayout rl = new RowLayout(); lc.setLayout(rl); lc.setSize(800, 600); RowData data; data = new RowData(1, 300, new Margins(10)); ContentPanel cp = new ContentPanel(new FitLayout()); cp.setHeading("Chart"); cp.add(chart); lc.add(cp, data); data = new RowData(1, 1, new Margins(10)); cp = new ContentPanel(new FitLayout()); cp.setHeading("Teams Sales"); cp.add(teamSalesGrid); lc.add(cp, data); data = new RowData(1, 60, new Margins(10)); LayoutContainer bbar = new LayoutContainer(new RowLayout(Orientation.HORIZONTAL)); bbar.add(reload); bbar.add(radForm, new RowData(1, -1)); lc.add(bbar, data); add(lc); } }