Skip to content

Instantly share code, notes, and snippets.

@branflake2267
Created January 6, 2014 22:55
Show Gist options
  • Save branflake2267/8291388 to your computer and use it in GitHub Desktop.
Save branflake2267/8291388 to your computer and use it in GitHub Desktop.
GXT 3.0 Pie chart with renderer test
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.editor.client.Editor.Path;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.chart.client.chart.Chart;
import com.sencha.gxt.chart.client.chart.Chart.Position;
import com.sencha.gxt.chart.client.chart.Legend;
import com.sencha.gxt.chart.client.chart.event.SeriesSelectionEvent;
import com.sencha.gxt.chart.client.chart.event.SeriesSelectionEvent.SeriesSelectionHandler;
import com.sencha.gxt.chart.client.chart.series.AreaHighlighter;
import com.sencha.gxt.chart.client.chart.series.PieSeries;
import com.sencha.gxt.chart.client.chart.series.Series.LabelPosition;
import com.sencha.gxt.chart.client.chart.series.SeriesLabelConfig;
import com.sencha.gxt.chart.client.chart.series.SeriesRenderer;
import com.sencha.gxt.chart.client.draw.Color;
import com.sencha.gxt.chart.client.draw.RGB;
import com.sencha.gxt.chart.client.draw.sprite.Sprite;
import com.sencha.gxt.core.client.ValueProvider;
import com.sencha.gxt.data.shared.LabelProvider;
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.fx.client.Draggable;
import com.sencha.gxt.widget.core.client.ContentPanel;
import com.sencha.gxt.widget.core.client.FramedPanel;
import com.sencha.gxt.widget.core.client.Resizable;
import com.sencha.gxt.widget.core.client.Resizable.Dir;
import com.sencha.gxt.widget.core.client.button.TextButton;
import com.sencha.gxt.widget.core.client.button.ToggleButton;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer;
import com.sencha.gxt.widget.core.client.container.VerticalLayoutContainer.VerticalLayoutData;
import com.sencha.gxt.widget.core.client.event.CollapseEvent;
import com.sencha.gxt.widget.core.client.event.CollapseEvent.CollapseHandler;
import com.sencha.gxt.widget.core.client.event.ExpandEvent;
import com.sencha.gxt.widget.core.client.event.ExpandEvent.ExpandHandler;
import com.sencha.gxt.widget.core.client.event.SelectEvent;
import com.sencha.gxt.widget.core.client.event.SelectEvent.SelectHandler;
import com.sencha.gxt.widget.core.client.info.Info;
import com.sencha.gxt.widget.core.client.toolbar.ToolBar;
public class GXT3_ChartPieRendererTest {
public interface DataPropertyAccess extends PropertyAccess<Data> {
ValueProvider<Data, Double> data1();
ValueProvider<Data, Double> data2();
ValueProvider<Data, Double> data3();
ValueProvider<Data, String> name();
@Path("id")
ModelKeyProvider<Data> nameKey();
}
private static final DataPropertyAccess dataAccess = GWT.create(DataPropertyAccess.class);
private ListStore<Data> store;
public GXT3_ChartPieRendererTest() {
RootPanel.get().add(asWidget());
}
public Widget asWidget() {
final Chart<Data> chart = getChart();
TextButton regenerate = new TextButton("Reload Data");
regenerate.addSelectHandler(new SelectHandler() {
@Override
public void onSelect(SelectEvent event) {
store.clear();
store.addAll(getData(5, 20, 100));
chart.redrawChart();
}
});
ToggleButton animation = new ToggleButton("Animate");
animation.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
chart.setAnimated(event.getValue());
}
});
animation.setValue(true, true);
ToggleButton shadow = new ToggleButton("Shadow");
shadow.addValueChangeHandler(new ValueChangeHandler<Boolean>() {
@Override
public void onValueChange(ValueChangeEvent<Boolean> event) {
chart.setShadowChart(event.getValue());
chart.redrawChart();
}
});
shadow.setValue(true);
ToolBar toolBar = new ToolBar();
toolBar.add(regenerate);
toolBar.add(animation);
toolBar.add(shadow);
ContentPanel panel = new FramedPanel();
panel.getElement().getStyle().setMargin(10, Unit.PX);
panel.setCollapsible(true);
panel.setHeadingText("Pie Renderer Chart");
panel.setPixelSize(620, 500);
panel.setBodyBorder(true);
final Resizable resize = new Resizable(panel, Dir.E, Dir.SE, Dir.S);
resize.setMinHeight(400);
resize.setMinWidth(400);
panel.addExpandHandler(new ExpandHandler() {
@Override
public void onExpand(ExpandEvent event) {
resize.setEnabled(true);
}
});
panel.addCollapseHandler(new CollapseHandler() {
@Override
public void onCollapse(CollapseEvent event) {
resize.setEnabled(false);
}
});
new Draggable(panel, panel.getHeader()).setUseProxy(false);
VerticalLayoutContainer layout = new VerticalLayoutContainer();
panel.add(layout);
toolBar.setLayoutData(new VerticalLayoutData(1, -1));
layout.add(toolBar);
chart.setLayoutData(new VerticalLayoutData(1, 1));
layout.add(chart);
return panel;
}
private Chart<Data> getChart() {
store = new ListStore<Data>(dataAccess.nameKey());
store.addAll(getData(5, 20, 100));
final PieSeries<Data> series = new PieSeries<Data>();
series.setAngleField(dataAccess.data1());
series.addLengthField(dataAccess.data2());
series.setHighlighting(true);
series.setLabelConfig(getLabelConfig());
series.setLegendValueProvider(dataAccess.name(), new LabelProvider<String>() {
@Override
public String getLabel(String item) {
return item.substring(0, 3);
}
});
final Color[] colors = {
new RGB("#94ae0a"), new RGB("#115fa6"), new RGB("#a61120"), new RGB("#ff8809"), new RGB("#ffd13e"),
new RGB("#a61187"), new RGB("#24ad9a"), new RGB("#a66111")};
final Legend<Data> legend = new Legend<Data>();
legend.setPosition(Position.RIGHT);
legend.setItemHighlighting(true);
legend.setItemHiding(true);
legend.setMarkerRenderer(new SeriesRenderer<GXT3_ChartPieRendererTest.Data>() {
@Override
public void spriteRenderer(Sprite sprite, int index, ListStore<Data> store) {
double value = dataAccess.data1().getValue(store.get(index));
Color color = colors[(int) Math.round(value) % 8];
sprite.setFill(color);
sprite.redraw();
}
});
final Chart<Data> chart = new Chart<Data>();
chart.setDefaultInsets(20);
chart.setStore(store);
chart.setShadowChart(true);
chart.addSeries(series);
chart.setLegend(legend);
series.setRenderer(new SeriesRenderer<Data>() {
@Override
public void spriteRenderer(Sprite sprite, int index, ListStore<Data> store) {
double value = dataAccess.data1().getValue(store.get(index));
sprite.setFill(colors[(int) Math.round(value) % 8]);
sprite.setStroke(RGB.WHITE);
sprite.setStrokeWidth(2);
sprite.redraw();
}
});
series.setPopOutMargin(0);
series.setHighlighter(new AreaHighlighter());
series.addSeriesSelectionHandler(new SeriesSelectionHandler<Data>() {
@Override
public void onSeriesSelection(SeriesSelectionEvent<Data> event) {
Info.display("Click", event.getValueProvider().getValue(event.getItem()).toString());
}
});
return chart;
}
private SeriesLabelConfig<Data> getLabelConfig() {
SeriesLabelConfig<Data> labelConfig = new SeriesLabelConfig<Data>();
labelConfig.setLabelPosition(LabelPosition.OUTSIDE);
labelConfig.setLabelContrast(true);
labelConfig.setValueProvider(dataAccess.name(), new LabelProvider<String>() {
@Override
public String getLabel(String item) {
return item.substring(0, 3);
}
});
return labelConfig;
}
public List<Data> getData(int size, double min, double scale) {
List<Data> data = new ArrayList<Data>();
for (int i = 0; i < size; i++) {
data.add(new Data(monthsFull[i % monthsFull.length], Math.floor(Math.max(Math.random() * scale, min)),
Math.floor(Math.max(Math.random() * scale, min)), Math.floor(Math.max(Math.random() * scale, min)),
Math.floor(Math.max(Math.random() * scale, min)), Math.floor(Math.max(Math.random() * scale, min)),
Math.floor(Math.max(Math.random() * scale, min)), Math.floor(Math.max(Math.random() * scale, min)),
Math.floor(Math.max(Math.random() * scale, min)), Math.floor(Math.max(Math.random() * scale, min))));
}
return data;
}
private static final String[] monthsFull = new String[] {
"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November",
"December"};
private static int lastId = 0;
public class Data {
private String id = "" + lastId++;
private String name;
private double data1;
private double data2;
private double data3;
private double data4;
private double data5;
private double data6;
private double data7;
private double data8;
private double data9;
public Data(String name, double data1, double data2, double data3, double data4, double data5, double data6,
double data7, double data8, double data9) {
super();
this.name = name;
this.data1 = data1;
this.data2 = data2;
this.data3 = data3;
this.data4 = data4;
this.data5 = data5;
this.data6 = data6;
this.data7 = data7;
this.data8 = data8;
this.data9 = data9;
}
public double getData1() {
return data1;
}
public double getData2() {
return data2;
}
public double getData3() {
return data3;
}
public double getData4() {
return data4;
}
public double getData5() {
return data5;
}
public double getData6() {
return data6;
}
public double getData7() {
return data7;
}
public double getData8() {
return data8;
}
public double getData9() {
return data9;
}
public String getName() {
return name;
}
public void setData1(double data1) {
this.data1 = data1;
}
public void setData2(double data2) {
this.data2 = data2;
}
public void setData3(double data3) {
this.data3 = data3;
}
public void setData4(double data4) {
this.data4 = data4;
}
public void setData5(double data5) {
this.data5 = data5;
}
public void setData6(double data6) {
this.data6 = data6;
}
public void setData7(double data7) {
this.data7 = data7;
}
public void setData8(double data8) {
this.data8 = data8;
}
public void setData9(double data9) {
this.data9 = data9;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment