package edu.pdx.cs410J.gwt.client;
import com.google.gwt.event.dom.client.*;
import com.google.gwt.user.client.ui.*;
/**
* Demonstrates several of GWT's low-level event Handlers
*/
public class FocusPanelExample extends Example {
public FocusPanelExample() {
super("Lots of Handlers");
DockPanel dock = new DockPanel();
final Label label = new Label("Move the mouse below");
dock.add(label, DockPanel.NORTH);
dock.setCellHorizontalAlignment(label, DockPanel.ALIGN_CENTER);
final Label status = new Label("Status");
dock.add(status, DockPanel.SOUTH);
dock.setCellHorizontalAlignment(status, DockPanel.ALIGN_CENTER);
FocusPanel panel = new FocusPanel(new Label("Mouse me!"));
panel.addFocusHandler(new FocusHandler() {
public void onFocus( FocusEvent event) {
status.setText("Got focus");
}
public void onLostFocus(FocusEvent event) {
status.setText("Lost focus");
}
});
KeyEventHandler handler = new KeyEventHandler( status );
panel.addKeyDownHandler( handler );
panel.addKeyPressHandler( handler );
panel.addKeyUpHandler( handler );
panel.addMouseWheelHandler(new MouseWheelHandler() {
public void onMouseWheel(MouseWheelEvent event) {
String dir = event.isNorth() ? "North" : "South";
status.setText("Mouse wheel " + dir + " at " + event.getDeltaY());
}
});
dock.add(panel, DockPanel.CENTER);
dock.setCellHeight(panel, "200px");
dock.setCellWidth(panel, "200px");
dock.setCellHorizontalAlignment(panel, DockPanel.ALIGN_CENTER);
dock.setCellVerticalAlignment(panel, DockPanel.ALIGN_MIDDLE);
add(dock);
}
/**
* Handles all kinds of keyboard events
*/
static class KeyEventHandler implements KeyDownHandler, KeyPressHandler, KeyUpHandler {
private Label status;
public KeyEventHandler( Label status )
{
this.status = status;
}
public void onKeyDown(KeyDownEvent event) {
status.setText("Key down " + getModifierString(event) + describe(event.getNativeKeyCode()));
}
public void onKeyPress(KeyPressEvent event) {
status.setText("Key press " + getModifierString(event) + event.getCharCode());
}
public void onKeyUp(KeyUpEvent event) {
status.setText("Key up " + getModifierString(event) + describe( event.getNativeKeyCode() ));
}
/**
* Returns a description of the given native key code associated with a {@link KeyEvent}
*/
private String describe( int nativeKeyCode )
{
switch ( nativeKeyCode ) {
case KeyCodes.KEY_ALT:
return "ALT";
case KeyCodes.KEY_BACKSPACE:
return "BACKSPACE";
case KeyCodes.KEY_CTRL:
return "CRTL";
case KeyCodes.KEY_DELETE:
return "DELETE";
case KeyCodes.KEY_DOWN:
return "DOWN";
case KeyCodes.KEY_END:
return "END";
case KeyCodes.KEY_ENTER:
return "ENTER";
case KeyCodes.KEY_ESCAPE:
return "ESCAPE";
case KeyCodes.KEY_HOME:
return "HOME";
case KeyCodes.KEY_LEFT:
return "LEFT";
case KeyCodes.KEY_PAGEDOWN:
return "PAGEDOWN";
case KeyCodes.KEY_PAGEUP:
return "PAGEUP";
case KeyCodes.KEY_RIGHT:
return "RIGHT";
case KeyCodes.KEY_SHIFT:
return "SHIFT";
case KeyCodes.KEY_TAB:
return "TAB";
case KeyCodes.KEY_UP:
return "UP";
default:
return Character.toString( (char) nativeKeyCode );
}
}
/**
* Returns a description of the given {@link KeyEvent} modifier
*/
private String getModifierString(KeyEvent event) {
StringBuilder sb = new StringBuilder();
if (event.isAltKeyDown()) {
sb.append("ALT ");
}
if (event.isControlKeyDown()) {
sb.append("CTRL ");
}
if (event.isMetaKeyDown()) {
sb.append("META ");
}
if (event.isShiftKeyDown()) {
sb.append("SHIFT ");
}
return sb.toString();
}
}
}