package com.googlecode.gwt.charts.showcase.client;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.logical.shared.BeforeSelectionEvent;
import com.google.gwt.event.logical.shared.BeforeSelectionHandler;
import com.google.gwt.event.logical.shared.SelectionEvent;
import com.google.gwt.event.logical.shared.SelectionHandler;
import com.google.gwt.http.client.Request;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.http.client.RequestCallback;
import com.google.gwt.http.client.RequestException;
import com.google.gwt.http.client.Response;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimpleLayoutPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.Widget;
public class ExampleWidget extends TabLayoutPanel {
private SimpleLayoutPanel layoutPanel;
private ScrollPanel scrollPanel;
private HTML sourceCodeWidget;
public ExampleWidget() {
super(30, Unit.PX);
initialize();
}
public void setSampleWidget(Widget widget) {
layoutPanel.setWidget(widget);
loadSource();
}
private SimpleLayoutPanel getLayoutPanel() {
if (layoutPanel == null) {
layoutPanel = new SimpleLayoutPanel();
}
return layoutPanel;
}
private ScrollPanel getScrollPanel() {
if (scrollPanel == null) {
scrollPanel = new ScrollPanel();
scrollPanel.setWidget(getSourceCodeWidget());
}
return scrollPanel;
}
private HTML getSourceCodeWidget() {
if (sourceCodeWidget == null) {
sourceCodeWidget = new HTML();
}
return sourceCodeWidget;
}
private void initialize() {
add(getLayoutPanel(), "Example");
add(getScrollPanel(), "Source Code");
addBeforeSelectionHandler(new BeforeSelectionHandler<Integer>() {
@Override
public void onBeforeSelection(BeforeSelectionEvent<Integer> event) {
if (event.getItem() == 1) {
loadSource();
}
}
});
addSelectionHandler(new SelectionHandler<Integer>() {
@Override
public void onSelection(SelectionEvent<Integer> event) {
if (event.getSelectedItem() == 0) {
layoutPanel.onResize();
}
}
});
}
protected void loadSource() {
RequestCallback callback = new RequestCallback() {
@Override
public void onError(Request request, Throwable exception) {
// TODO Auto-generated method stub
}
@Override
public void onResponseReceived(Request request, Response response) {
setSource(response.getText());
}
};
try {
String className = layoutPanel.getWidget().getClass().getName();
className = className.substring(className.lastIndexOf(".") + 1);
RequestBuilder builder = new RequestBuilder(RequestBuilder.GET, "source/" + className + ".java");
builder.setCallback(callback);
builder.send();
} catch (RequestException e) {
callback.onError(null, e);
}
}
protected void setSource(String text) {
SafeHtmlBuilder builder = new SafeHtmlBuilder();
builder.appendHtmlConstant("<pre>");
builder.appendEscaped(text);
builder.appendHtmlConstant("</pre>");
sourceCodeWidget.setHTML(builder.toSafeHtml());
}
}