package org.jbox2d.gwt.showcase.client.rendering;
import java.util.List;
import org.jbox2d.gwt.showcase.client.framework.BaseExample;
import org.jbox2d.gwt.showcase.client.framework.ExampleKeyEvent;
import org.jbox2d.gwt.showcase.client.framework.ExampleMouseEvent;
import org.jbox2d.gwt.showcase.client.framework.ExampleRunner;
import org.jbox2d.gwt.showcase.client.framework.StartExampleEvent;
import org.w3c.dom.Element;
import org.w3c.dom.events.Event;
import org.w3c.dom.events.EventListener;
import org.w3c.dom.events.KeyboardEvent;
import org.w3c.dom.events.MouseEvent;
import com.dragome.templates.interfaces.Content;
import com.dragome.web.dispatcher.EventDispatcherImpl;
import com.dragome.web.html.dom.html5canvas.interfaces.HTMLCanvasElement;
public class ExampleView implements StartExampleEvent.StartExampleEventListener
{
CanvasDebugDraw cameraRenderer;
ExampleRunner exampleRunner;
public ExampleView(Content<?> content)
{
cameraRenderer= new CanvasDebugDraw((Element)content.getValue());
exampleRunner= new ExampleRunner(cameraRenderer);
HTMLCanvasElement canvas= cameraRenderer.getCanvas();
EventDispatcherImpl.setEventListener(canvas, new EventListener()
{
public void handleEvent(Event event)
{
if (event instanceof MouseEvent)
{
MouseEvent mouseEvent= (MouseEvent) event;
if (event.getType().equals("mousedown"))
onMouseDown(mouseEvent);
else if (event.getType().equals("mouseup"))
onMouseUp(mouseEvent);
else if (event.getType().equals("mousemove"))
onMouseMove(mouseEvent);
}
else if (event instanceof KeyboardEvent)
{
KeyboardEvent keyboardEvent= (KeyboardEvent) event;
if (event.getType().equals("keypress"))
onKeyPress(keyboardEvent);
else if (event.getType().equals("keyup"))
onKeyUp(keyboardEvent);
else if (event.getType().equals("keydown"))
onKeyDown(keyboardEvent);
}
}
}, "mousedown", "mouseup", "mousemove", "keypress", "keyup", "keydown");
}
protected void onMouseUp(MouseEvent event)
{
event.preventDefault();
ExampleMouseEvent eme= new ExampleMouseEvent(ExampleMouseEvent.MOUSE_EVENT_TYPE_UP, event.getClientX(), event.getClientY(), event.getShiftKey());
eme.dispatch(exampleRunner);
}
protected void onMouseDown(MouseEvent event)
{
event.preventDefault();
ExampleMouseEvent eme= new ExampleMouseEvent(ExampleMouseEvent.MOUSE_EVENT_TYPE_DOWN, event.getClientX(), event.getClientY(), event.getShiftKey());
eme.dispatch(exampleRunner);
}
protected void onMouseMove(MouseEvent event)
{
event.preventDefault();
ExampleMouseEvent eme= new ExampleMouseEvent(ExampleMouseEvent.MOUSE_EVENT_TYPE_MOVE, event.getClientX(), event.getClientY(), event.getShiftKey());
eme.dispatch(exampleRunner);
}
protected void onKeyPress(KeyboardEvent keyboardEvent)
{
keyboardEvent.preventDefault();
ExampleKeyEvent eme= new ExampleKeyEvent(ExampleKeyEvent.KEY_EVENT_TYPE_PRESS, keyboardEvent.getKeyIdentifier().charAt(0));
eme.dispatch(exampleRunner);
}
protected void onKeyDown(KeyboardEvent keyboardEvent)
{
keyboardEvent.preventDefault();
ExampleKeyEvent eme= new ExampleKeyEvent(ExampleKeyEvent.KEY_EVENT_TYPE_DOWN, keyboardEvent.getKeyIdentifier().charAt(0));
eme.dispatch(exampleRunner);
}
protected void onKeyUp(KeyboardEvent keyboardEvent)
{
keyboardEvent.preventDefault();
ExampleKeyEvent eme= new ExampleKeyEvent(ExampleKeyEvent.KEY_EVENT_TYPE_UP, keyboardEvent.getKeyIdentifier().charAt(0));
eme.dispatch(exampleRunner);
}
public CanvasDebugDraw getCameraRenderer()
{
return cameraRenderer;
}
public void onStartExample(BaseExample example)
{
StringBuffer sb= new StringBuffer();
List<String> instr= example.getInstructions();
for (String instruaction : instr)
{
sb.append(instruaction).append("<br/>");
}
// instructions.setHTML(sb.toString());
exampleRunner.onStartExample(example);
}
}