Created
January 6, 2014 22:55
-
-
Save branflake2267/8291388 to your computer and use it in GitHub Desktop.
GXT 3.0 Pie chart with renderer test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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