Skip to content

Instantly share code, notes, and snippets.

@branflake2267
Created March 10, 2014 17:44
Show Gist options
  • Save branflake2267/9470126 to your computer and use it in GitHub Desktop.
Save branflake2267/9470126 to your computer and use it in GitHub Desktop.
Chart Scatter Test with Category axis override
import com.google.gwt.core.client.GWT;
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.axis.CategoryAxis;
import com.sencha.gxt.chart.client.chart.axis.NumericAxis;
import com.sencha.gxt.chart.client.chart.series.Primitives;
import com.sencha.gxt.chart.client.chart.series.ScatterSeries;
import com.sencha.gxt.chart.client.chart.series.SeriesToolTipConfig;
import com.sencha.gxt.chart.client.draw.RGB;
import com.sencha.gxt.chart.client.draw.sprite.Sprite;
import com.sencha.gxt.chart.client.draw.sprite.TextSprite;
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.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.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.toolbar.ToolBar;
public class ChartScatterTest {
public ChartScatterTest() {
RootPanel.get().add(asWidget());
}
public class MyData {
private String key;
private double dataX;
private double dataY;
public MyData(String key, double dataX, double dataY) {
this.key = key;
this.dataX = dataX;
this.dataY = dataY;
}
public String getKey() {
return this.key;
}
public double getDataX() {
return dataX;
}
public double getDataY() {
return dataY;
}
}
/**
* Override labels to line up with axis ticks
*/
public class CategoryAxisExt extends CategoryAxis<MyData, String> {
@Override
protected void applyData() {
from = 0;
to = 3;//chart.getCurrentStore().size();
steps = (int) (to - 1);
}
@Override
protected void createLabels() {
labelNames.clear();
ListStore<MyData> store = chart.getCurrentStore();
for (int i = 0; i < 3; i++) {
labelNames.add(field.getValue(store.get(i)));
System.out.println("label=" + field.getValue(store.get(i)));
}
}
}
/**
* The message displayed to the user when the server cannot be reached or returns an error.
*/
public interface DataPropertyAccess extends PropertyAccess<MyData> {
ModelKeyProvider<MyData> key();
ValueProvider<MyData, Double> dataX();
ValueProvider<MyData, Double> dataY();
}
private static final DataPropertyAccess dataAccess = GWT.create(DataPropertyAccess.class);
public Widget asWidget() {
final ListStore<MyData> store = new ListStore<MyData>(dataAccess.key());
store.add(new MyData("key1", 1, 2));
store.add(new MyData("key2", 2, 3));
store.add(new MyData("key3", 3, 2));
store.add(new MyData("key4", 3, 4));
final Chart<MyData> chart = new Chart<MyData>();
chart.setStore(store);
chart.setShadowChart(false);
NumericAxis<MyData> axisY = new NumericAxis<MyData>();
axisY.setPosition(Position.LEFT);
axisY.addField(dataAccess.dataY());
axisY.setMinimum(0);
axisY.setMaximum(10);
TextSprite title = new TextSprite("Number of Hits");
title.setFontSize(18);
axisY.setTitleConfig(title);
chart.addAxis(axisY);
CategoryAxis<MyData, String> axisX = new CategoryAxisExt();
axisX.setPosition(Position.BOTTOM);
// This is an example to deal with label conversion if desired.
// Otherwise it could be a data access property
axisX.setField(new ValueProvider<MyData, String>() {
@Override
public String getValue(MyData object) {
String s = "";
if (object.getDataX() == 1.0) {
s = "one";
} else if (object.getDataX() == 2.0) {
s = "two";
} else if (object.getDataX() == 3.0) {
s = "three";
}
return s;
}
@Override
public void setValue(MyData object, String value) {
}
@Override
public String getPath() {
return "axisX";
}
});
chart.addAxis(axisX);
final ScatterSeries<MyData> series = new ScatterSeries<MyData>();
series.setYAxisPosition(Position.LEFT);
// set both x and y
series.setXField(dataAccess.dataX());
series.setYField(dataAccess.dataY());
series.setToolTipConfig(new SeriesToolTipConfig<MyData>());
Sprite marker = Primitives.cross(0, 0, 8);
marker.setFill(RGB.GREEN);
series.setMarkerConfig(marker);
series.setHighlighting(true);
chart.addSeries(series);
ContentPanel panel = new FramedPanel();
panel.setCollapsible(true);
panel.setHeadingText("Scatter 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);
ToolBar toolBar = new ToolBar();
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;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment